【服务器】基于P310S厚款迷你主机搭建的个人All In One服务器(实体机)
系统拓扑
硬件-系统结构拓扑
硬件部分
硬件配置
- 主板芯片组 Intel® B360 Chipset
- CPU接口类型:FCLGA1200
- CPU:QTB0(Intel® Core™ i9-10900T Processor 测试版)
- CPU散热:ID-COOLING IS40X 四热管下压散热器
GPU:
- Intel® UHD Graphics 630
- NVIDIA® TESLA® P4 推理加速器
(设备 ID:0x1bb3,供应商 ID:0x10de)
NVIDIA® TESLA® P4散热改装方案:
- 原装被动散热去盖板
- MSi GTX 1050Ti 刀卡风扇
- 2-3线风扇温控调速模块
- 相关接线端子及主板小4PIN一分二转接线
- 内存:40GB lpddr4 3200MHz(32GB+8GB不对称双通道)
硬盘:
- WD Blue SN550 NVMe™ 2280 SSD 1TB
(设备 ID:0x5009,供应商 ID:0x15b7) - WD Green SN350 NVMe™ 2280 SSD 960GB
(设备 ID:0x5019,供应商 ID:0x15b7) - Samsung(Seagate) ST2000LM003 2.5-inch 9mm HDD 2TB
- Samsung(Seagate) ST2000LM003 2.5-inch 9mm HDD 2TB
- WD Blue SN550 NVMe™ 2280 SSD 1TB
网卡:
- Intel® Ethernet Connection I219-V
(设备 ID:0x2725,供应商 ID:0x8086) - Realtek® RTL8822BE
(设备 ID:0xb822,供应商 ID:0x10ec) - Intel® Wi-Fi 6E AX210 (ESXi7可识别,但直通后无法使用,已更换为RTL8822BE)
(设备 ID:0x15bc,供应商 ID:0x8086)
- Intel® Ethernet Connection I219-V
- 电源:19V 9.47A 180W DC inx 1 (7.4×5.0 mm)
- 尺寸:157×149×97 mm
外部I/O接口:
- USB3.0 × 3、USB2.0 × 2、Type-C(5Gbps)× 1
- HDMI × 1、DP× 1
- RJ45 × 1
- DC-IN × 1
- 3.5mm 二合一耳机孔 × 1
- 其它:SMA内螺内孔天线接口 × 2
工具网站
系统部分
系统底层环境配置
系统底层采用ESXi7虚拟机,安装镜像名为VMware-VMvisor-Installer-7.0.0-15843807.x86_64.iso
,通过学习版密钥激活。
2023.12.5,由于ESXi7.0.0-15843807无法正常安装ESXi-unlock,升级ESXi-7.0U3o-22348816,问题解决。升级后需要重新禁用虚拟机核显输出以使用核显直通功能esxcli system settings kernel set -s vga -v FALSE
。该版本使用官方镜像,安装镜像名ESXi-7.0U3o-22348816-standard.iso
,其sha256为b29f0cd5795a564352d957e3caef139c8d03e776a5c98ee516d20887e9435f0a
。
vSphere ESXi底层环境维护说明
- 网页登录后台,开启ssh后即可通过ssh终端、Xftp等方式连接。
- Xftp连接后会要求二次身份验证,请选择Keyboard Interactive,使用键盘输入密码连接即可。
- 修改一些系统底层文件可能导致系统崩溃,这时可通过安装镜像进行同版本系统升级操作进行修复。
- 直通硬件需要虚拟机内存勾选预留所有虚拟机内存。
- Windows98、CentOS6.6等较早系统遇到Web控制台中鼠标无反应问题,USB控制器已添加但无法解决,应是ESXi兼容性问题,通过VMware Workstation打开可正常使用鼠标。
安装Nvidia vGPU驱动(主板不支持vGPU,保留驱动安装)
- 将主机进入维护模式
esxcli system maintenanceMode set --enable true
配置直通类型
# esxcli graphics host set --default-type SharedPassthru # esxcli graphics host get Default Graphics Type: SharedPassthru Shared Passthru Assignment Policy: Performance
- 下载驱动,可前往NVIDIA官网或Github存档,这里再Github下载了
NVIDIA-GRID-vSphere-6.7-510.73.06-510.73.08-512.78.7z
版本,因为NVIDIA-GRID-vSphere-7.0-510.73.06-510.73.08-512.78.7z
版本驱动要求vmkapi_2_8_0_0
,大概是需要ESXi7.0.2。 上传驱动文件
NVIDIA_bootbank_NVIDIA-VMware_ESXi_6.7_Driver_510.73.06-1OEM.670.0.0.8169922.vib
到/tmp/NVIDIA~1.VIB
并安装# esxcli software vib install -v /tmp/NVIDIA~1.VIB Installation Result Message: Operation finished successfully. Reboot Required: false VIBs Installed: NVIDIA_bootbank_NVIDIA-VMware_ESXi_6.7_Driver_510.73.06-1OEM.670.0. 0.8169922 VIBs Removed: VIBs Skipped:
- 退出维护模式
esxcli system maintenanceMode set --enable false
检查安装情况
# esxcli software vib list | grep -i NVIDIA # 检查vib包安装情况 NVIDIA-VMware_ESXi_6.7_Driver 510.73.06-1OEM.670.0.0.8169922 NVIDIA VMwareAccepted 2023-11-25 # gpuvm # vGPU驱动检查 Xserver unix:0, PCI ID 0:1:0:0, vGPU: Not set, GPU maximum memory 8359364KB GPU memory left 8359364KB. # nvidia-smi # NVIDIA驱动状态检查 Sat Nov 25 10:14:21 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.73.06 Driver Version: 510.73.06 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P4 On | 00000000:01:00.0 Off | Off | | N/A 47C P8 10W / 75W | 28MiB / 8192MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ # nvidia-smi vgpu -s # 查看vGPU资源 GPU 00000000:01:00.0 GRID P4-1B GRID P4-1Q GRID P4-2Q GRID P4-4Q GRID P4-8Q GRID P4-1A GRID P4-2A GRID P4-4A GRID P4-8A GRID P4-2B GRID P4-2B4 GRID P4-1B4 # nvidia-smi -i 0 -e 0 # 关闭ECC,使用vGPU需要关闭ECC,此处显示如下因为以前已经关过了 ECC support is already Disabled for GPU 00000000:01:00.0. All done. # nvidia-smi -i 0 -q ==============NVSMI LOG============== Timestamp : Sat Nov 25 10:15:44 2023 Driver Version : 510.73.06 CUDA Version : Not Found Attached GPUs : 1 GPU 00000000:01:00.0 Product Name : Tesla P4 Product Brand : Tesla Product Architecture : Pascal Display Mode : Enabled Display Active : Disabled Persistence Mode : Enabled MIG Mode Current : N/A Pending : N/A Accounting Mode : Enabled Accounting Mode Buffer Size : 4000 Driver Model Current : N/A Pending : N/A Serial Number : 0422318025849 GPU UUID : GPU-adc3c250-6499-a97a-3b2b-019d933588ee Minor Number : 0 VBIOS Version : 86.04.8C.00.10 MultiGPU Board : No Board ID : 0x100 GPU Part Number : 900-2G414-0000-000 Module ID : 0 Inforom Version Image Version : G414.0200.00.03 OEM Object : 1.1 ECC Object : 4.1 Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A GSP Firmware Version : N/A GPU Virtualization Mode Virtualization Mode : Host VGPU Host VGPU Mode : Non SR-IOV IBMNPU Relaxed Ordering Mode : N/A PCI Bus : 0x01 Device : 0x00 Domain : 0x0000 Device Id : 0x1BB310DE Bus Id : 00000000:01:00.0 Sub System Id : 0x11D810DE GPU Link Info PCIe Generation Max : 3 Current : 1 Link Width Max : 16x Current : 16x Bridge Chip Type : N/A Firmware : N/A Replays Since Reset : 0 Replay Number Rollovers : 0 Tx Throughput : 0 KB/s Rx Throughput : 0 KB/s Fan Speed : N/A Performance State : P8 Clocks Throttle Reasons Idle : Active Applications Clocks Setting : Not Active SW Power Cap : Not Active HW Slowdown : Not Active HW Thermal Slowdown : Not Active HW Power Brake Slowdown : Not Active Sync Boost : Not Active SW Thermal Slowdown : Not Active Display Clock Setting : Not Active FB Memory Usage Total : 8192 MiB Reserved : 0 MiB Used : 28 MiB Free : 8163 MiB BAR1 Memory Usage Total : 256 MiB Used : 2 MiB Free : 254 MiB Compute Mode : Default Utilization Gpu : 0 % Memory : 0 % Encoder : 0 % Decoder : 0 % Encoder Stats Active Sessions : 0 Average FPS : 0 Average Latency : 0 FBC Stats Active Sessions : 0 Average FPS : 0 Average Latency : 0 Ecc Mode Current : Disabled Pending : Disabled ECC Errors Volatile Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : N/A Aggregate Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : N/A Retired Pages Single Bit ECC : 0 Double Bit ECC : 0 Pending Page Blacklist : No Remapped Rows : N/A Temperature GPU Current Temp : 46 C GPU Shutdown Temp : 94 C GPU Slowdown Temp : 91 C GPU Max Operating Temp : N/A GPU Target Temperature : N/A Memory Current Temp : N/A Memory Max Operating Temp : N/A Power Readings Power Management : Supported Power Draw : 10.76 W Power Limit : 75.00 W Default Power Limit : 75.00 W Enforced Power Limit : 75.00 W Min Power Limit : 60.00 W Max Power Limit : 75.00 W Clocks Graphics : 455 MHz SM : 455 MHz Memory : 405 MHz Video : 455 MHz Applications Clocks Graphics : 885 MHz Memory : 3003 MHz Default Applications Clocks Graphics : 885 MHz Memory : 3003 MHz Max Clocks Graphics : 1531 MHz SM : 1531 MHz Memory : 3003 MHz Video : 1379 MHz Max Customer Boost Clocks Graphics : 1113 MHz Clock Policy Auto Boost : N/A Auto Boost Default : N/A Voltage Graphics : N/A Processes : None # nvidia-smi -vm 3 # 选择GPU工作模式,3/VGPU or 4/VSGA,默认为4 All done. //因为主板不支持SR-IOV和PCI Above 4G Decoding,还原设置,采用直通方式使用。可能可以通过修改 BIOS找到开启选项,暂时搁置。 # nvidia-smi -vm 4 All done. //可能用的的命令 # esxcli software vib remove -n NVIDIA-VMware_ESXi_6.7_Driver # 移除vib Removal Result Message: Operation finished successfully. Reboot Required: false VIBs Installed: VIBs Removed: NVIDIA_bootbank_NVIDIA-VMware_ESXi_6.7_Driver_510.73.06-1OEM.670.0.0. 8169922 VIBs Skipped:
参考资料
- VM ESXI安装英伟达显卡驱动
- Using GPUs with Virtual Machines on vSphere – Part 3: Installing the NVIDIA Virtual GPU Technology
- 在Proxmox VE下开启vGPU - Tesla P4为例
参考资料3防丢备忘
授权流程
授权方法分为如下几种方式:
1. 向 NVIDIA 申请 90 天 free license(NVIDIA 中国只面向企业用户发放免费授权,个人可以尝试去海外官网申请),到期后购买 license
2. Rust-based vgpu_unlock,通过 vGPU 伪装,从而可以在虚拟机使用不需要授权的消费级显卡驱动,此方式是唯一支持消费级显卡的方式
3. vGPU_LicenseBypass,此方式将不限制性能的时间从 20 分钟延长为一天,并且每天定时重启驱动,以达成一直不受限的目地,但不适合需要长时间运行 GPU 的场景
4. FastAPI-DLS,此方式通过模拟正规流程的激活服务器,对虚拟机进行许可证授权,支持容器部署
对于原生支持 vGPU 的显卡而言,使用 FastAPI-DLS 为最优解,整套方案除授权服务器虚假外与正规流程无异。而且只要不更新虚拟机驱动,证书验证算法不变,理论具有等同于正规授权的稳定性。
搭建授权服务器
1. 首先安装容器环境,此步略过。
2. 启动容器,原项目需要自行创建证书,这里使用一个二次封装的免证书容器镜像。
# 此处的DLS_URL与DLS_PORT是后续生成授权文件,告知Guest如何访问授权容器IP地址和端口
docker run -d -e DLS_URL=10.0.0.6 -e DLS_PORT=443 -p 443:443 makedie/fastapi-dls
获取授权
1. Windows
使用管理员身份启动 PowerShell 执行如下命令
# <ls-hostname-or-ip>为你的授权服务IP端口
curl.exe --insecure -L -X GET https://<dls-hostname-or-ip>/-/client-token -o "C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\client_configuration_token_$($(Get-Date).tostring('dd-MM-yy-hh-mm-ss')).tok"
Restart-Service NVDisplay.ContainerLocalSystem
nvidia-smi.exe -q | Select-String License # 查看授权状态
2. Linux
root 执行如下命令
# <ls-hostname-or-ip>为你的授权服务IP端口
curl --insecure -L -X GET https://<dls-hostname-or-ip>/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
service nvidia-gridd restart
nvidia-smi -q | grep License # 查看授权状态
现在 vGPU 已经可以正常使用了,只要确保授权服务容器正常运行,grid 驱动就会自动续期。
GPU直通配置
Intel® UHD Graphics 630
使用的QTB0不显测试U,核显并没有显示型号,8086代表供应商Intel的ID,9bc5为设备硬件ID。
修改直通map信息,编辑/etc/vmware/passthru.map
文件,添加:
# Intel VGA
8086 9bc5 d3d0 default
在硬件管理切换直通,给需要直通的系统添加对应PCI设备即可。
NVIDIA® T600
曾使用Quadro T600专业卡作为系统GPU,该卡可以完全容纳在P310S机箱中,目前已更换为TESLA P4,下面对当时的显卡直通操作做简单记录。
- 首先启用ssh并连接到ESXi,输入
esxcli system settings kernel set -s vga -v FALSE
以关闭ESXi显卡调用,恢复使用esxcli system settings kernel get -s vga -v TRUE
。 - 使用
lspci -v
查找显卡设备ID。T600显卡,10de代表NVIDIA,1fb1为显卡设备硬件ID,10fa为显卡音频控制器硬件ID。 使用编辑器修改直通map信息,编辑
/etc/vmware/passthru.map
文件,添加:# Intel VGA 8086 9bc8 d3d0 default # 当时使用的QSRL不显测试U核显 # NVIDIA VGA 10de 1fb1 d3d0 default 10de 10fa d3d0 default
- 保存后重启ESXi,此时BIOS引导完成后不再进入黑黄系统界面。
- 编辑虚拟机,确保取消CPU虚拟化、内存预留所有客户及内存,添加PCI设备,在“虚拟机选项-高级-配置参数-编辑配置”添加键:hypervisor.cpuid.v0,值:FALSE,保存后启动虚拟机安装驱动即可。
- 此时如果单单重启虚拟机,显卡会报错43,需要开启自启动后,重启ESXi使虚拟机自动启动即可直通显卡。禁用VMware SVGA虚拟显卡后即可通过显卡直接输出画面到显示屏。
NVIDIA® TESLA® P4
在后台PCI设备管理中选择Tesla P4,点击切换直通,重启设备后即可看到进入直通活动状态,此时在宿主机中使用nvidia-smi显示如下为正常现象:
# nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
- 为虚拟机添加其他设备-PCI设备-Tesla P4,并在内存设置中勾选“预留所有客户机内存 (全部锁定)”。
启动系统,检查GPU识别情况
# lspci|grep -i nvidia 13:00.0 3D controller: NVIDIA Corporation GP104GL [Tesla P4] (rev a1)
检查Nouveau是否运行
# lsmod |grep nouveau nouveau 1940454 0 mxm_wmi 13021 1 nouveau wmi 21636 2 mxm_wmi,nouveau video 24538 1 nouveau i2c_algo_bit 13413 1 nouveau drm_kms_helper 186531 2 nouveau,vmwgfx ttm 100769 2 nouveau,vmwgfx drm 468454 5 ttm,drm_kms_helper,nouveau,vmwgfx
Nouveau在运行,需要禁用
# vi /lib/modprobe.d/dist-blacklist.conf 添加如下内容: # For Tesla P4 ADD 20231125 blacklist nouveau options nouveau modeset=0
给当前镜像做备份后建立新的镜像
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak # dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
重启后检查Nouveau是否运行,无输出即成功禁用
# lsmod |grep nouveau
前往官网下载并安装驱动,选择510.73.05版本
# wget https://download.nvidia.com/XFree86/Linux-x86_64/510.73.05/ NVIDIA-Linux-x86_64-510.73.05.run # chmod 755 NVIDIA-Linux-x86_64-510.73.05.run # ./NVIDIA-Linux-x86_64-510.73.05.run 一路回车即可成功 # nvidia-smi Sat Nov 25 19:24:12 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.73.05 Driver Version: 510.73.05 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P4 Off | 00000000:13:00.0 Off | Off | | N/A 49C P0 23W / 75W | 0MiB / 8192MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
- 其他CUDA版本和CUDNN采用模块化安装或conda安装,参考下文。
参考资料
- centos7篇---禁用默认的驱动nouveau,安装cuda和cudnn
- ESXI8.0下直通NVIDIA Tesla P4显卡给Ubuntu22.04系统中Docker容器里的Jellyfin使用
NVIDIA® TESLA® P100
- 在后台PCI设备管理中选择Tesla P100,点击切换直通
直通还需要在对应虚拟机高级配置中添加如下两项:
pciPassthru.use64bitMMIO = "TRUE" pciPassthru.64bitMMIOSizeGB = "64"
否则可能出现模块Device Power On打开电源失败的问题
失败的尝试
出现“ERROR: Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example,
be sure you have the ‘kernel-source’ or ‘kernel-devel’ RPM installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the ‘–kernel-source-path’ command line option.”,使用以下命令安装:yum install "kernel-devel-uname-r == $(uname -r)"
- 驱动需要安装zlib依赖
yum install zlib-devel
其他:
yum -y install epel-release yum -y install dkms yum install vulkan yum install xorg-x11-server-devel
安装545.29.06版本成功,其他版本出现nvidia.so相关报错。但是nvidia-smi显示No devices。
硬盘直通配置
NVMe硬盘直通
在硬件管理中根据控制器硬件ID选择切换直通,在虚拟机中添加对应PCI设备即可,注意不要将安装ESXi系统盘的NVMe直通了。
SATA硬盘直通
在硬件管理中找到PCH-H AHCI控制器,记录其设备ID和供应商ID,本机为Cannon Lake PCH-H AHCI Controller(设备ID:0xa352,供应商ID:0x8086),使用编辑器修改直通map信息,编辑/etc/vmware/passthru.map
文件,添加:
# Intel Cannon Lake PCH-H AHCI Controller
8086 a352 d3d0 default
保存重启后即可在硬件管理中选择切换直通。
虚拟机环境配置
环境使用规范
- 专用软件、同一软件多版本,均使用module安装。
- 一项独立工作新建独立的conda环境或新建一般用户。
- 任务优先采用slurm提交。
应用软件环境配置
可参考本站文章:
给虚拟机添加磁盘
- esxi中增加磁盘容量或添加新磁盘后,进入系统,使用
fdisk -l
查看磁盘情况 - 使用
fdisk
选择相应设备新建分区 - partprobe 执行
mkfs.xfs /dev/sda
格式化同一磁盘卷扩容
[root@localhost ~]# lvm lvm> pvcreate /dev/sda3 #初始化sda3分区 lvm> vgdisplay #查看卷组名 lvm> vgextend centos /dev/sda3 #将初始化过的分区加入到虚拟卷组centos lvm> vgdisplay #查看Free PE / Size的大小 lvm> lvextend -l+10239 /dev/mapper/centos-root #扩展已有卷的容量(10239 是通过vgdisplay查看 free PE /Site的大小) lvm> pvdisplay #查看卷容量
卷扩容完毕
文件系统扩容 xfs_growfs /dev/mapper/centos-root不同磁盘卷扩容
(base) [root@C79T-E7P ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. (base) [root@C79T-E7P ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name centos_c79t-e7p PV Size <39.00 GiB / not usable 3.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 9983 Free PE 1 Allocated PE 9982 PV UUID 0f7OJv-Rj0c-hb6c-Q3By-PoJA-PiGG-LaldZD "/dev/sdb1" is a new physical volume of "<40.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size <40.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID X9A98Q-VzOg-Tw3b-pgPq-rP5p-xRYd-YQkDwc (base) [root@C79T-E7P ~]# vgdisplay --- Volume group --- VG Name centos_c79t-e7p System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <39.00 GiB PE Size 4.00 MiB Total PE 9983 Alloc PE / Size 9982 / 38.99 GiB Free PE / Size 1 / 4.00 MiB VG UUID L2vvFz-R1qD-UHVO-Qz9w-2kAx-pIvW-WGQVYf (base) [root@C79T-E7P ~]# vgextend centos_c79t-e7p /dev/sdb1 Volume group "centos_c79t-e7p" successfully extended (base) [root@C79T-E7P ~]# vgdisplay --- Volume group --- VG Name centos_c79t-e7p System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 78.99 GiB PE Size 4.00 MiB Total PE 20222 Alloc PE / Size 9982 / 38.99 GiB Free PE / Size 10240 / 40.00 GiB VG UUID L2vvFz-R1qD-UHVO-Qz9w-2kAx-pIvW-WGQVYf (base) [root@C79T-E7P ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 7.8G 12M 7.8G 1% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos_c79t--e7p-root 37G 34G 3.0G 92% / /dev/sda1 1014M 217M 798M 22% /boot //192.168.2.222/raiduser 1.8T 94G 1.7T 6% /home/RAID-P310S/raiduser tmpfs 1.6G 0 1.6G 0% /run/user/0 (base) [root@C79T-E7P ~]# lvextend -L +40G /dev/mapper/centos_c79t--e7p-root Size of logical volume centos_c79t-e7p/root changed from 36.99 GiB (9470 extents) to 76.99 GiB (19710 extents). Logical volume centos_c79t-e7p/root successfully resized. (base) [root@C79T-E7P ~]# xfs_growfs /dev/mapper/centos_c79t--e7p-root meta-data=/dev/mapper/centos_c79t--e7p-root isize=512 agcount=4, agsize=2424320 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=9697280, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=4735, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 9697280 to 20183040 (base) [root@C79T-E7P ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 7.8G 12M 7.8G 1% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos_c79t--e7p-root 77G 34G 43G 45% / /dev/sda1 1014M 217M 798M 22% /boot //192.168.2.222/raiduser 1.8T 94G 1.7T 6% /home/RAID-P310S/raiduser tmpfs 1.6G 0 1.6G 0% /run/user/0
Ubuntu 22.04.1 Desktop
系统跳板入口
- 安装Todesk等桌面远控 + frpc穿透映射ssh入口作为AIO服务器内部跳板入口
- Todesk只支持X11协议,没有适配最新的Wayland协议,因此需要把Ubuntu窗口系统调整为X11,才能正常远控:
sudo vim /etc/gdm3/custom.conf
,删除#WaylandEnable=false
注释符,保存后重启即可
NVMe系统盘+SATA存储盘直通系统安装
- 虚拟机设置中选择客户机操作系统Ubuntu(64位)安装系统,预留所有客户机内存,删除虚拟硬盘,添加直通固态和机械的PCI控制器。
- 安装镜像使用来自Ubuntu官网的
ubuntu-22.04.1-desktop-amd64.iso
,选择最小安装,取消其他选项勾选,选择固态硬盘进行系统安装。 - 安装完成后移除安装镜像,更改虚拟机引导为EFI即可开机进入系统。
配置SSH和XRDP远程桌面
- 执行update
安装并启用SSH
sudo apt install openssh-server -y sudo systemctl enable --now ssh //相关命令 sudo ss -lt sudo ufw status sudo systemctl disable ssh --now sudo apt autoremove openssh-server -y
安装并启用XRDP,安装完成后需要注销用户避免黑屏问题
sudo apt install xrdp sudo systemctl start xrdp sudo systemctl enable xrdp systemctl status xrdp sudo ufw allow from any to any port 3389 proto tcp
参考资料
安装mdadm配置管理直通硬盘软件RAID-1
登入root用户,进入root目录开始安装管理
磁盘清除原有分区数据,以GPT分区表创建raid分区,直通的两个硬盘分别为/dev/sda和/dev/sdb,分别建立Linux RAID类型分区/dev/sda1和/dev/sdb1,下面以sda为例:
root@U2204D-NAS-E7P:~# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.8 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): ? b back up GPT data to a file c change a partition's name d delete a partition i show detailed information on a partition l list known partition types n add a new partition o create a new empty GUID partition table (GPT) p print the partition table q quit without saving changes r recovery and transformation options (experts only) s sort partitions t change a partition's type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu Command (? for help): x Expert command (? for help): ? a set attributes b byte-swap a partition's name c change partition GUID d display the sector alignment value e relocate backup data structures to the end of the disk f randomize disk and partition unique GUIDs g change disk GUID h recompute CHS values in protective/hybrid MBR i show detailed information on a partition j move the main partition table l set the sector alignment value m return to main menu n create a new protective MBR o print protective MBR data p print the partition table q quit without saving changes r recovery and transformation options (experts only) s resize partition table t transpose two partition table entries u replicate partition table on new device v verify disk w write table to disk and exit z zap (destroy) GPT data structures and exit ? print this menu Expert command (? for help): z About to wipe out GPT on /dev/sda. Proceed? (Y/N): y GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Blank out MBR? (Y/N): y root@U2204D-NAS-E7P:~# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.8 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries in memory. Command (? for help): ? b back up GPT data to a file c change a partition's name d delete a partition i show detailed information on a partition l list known partition types n add a new partition o create a new empty GUID partition table (GPT) p print the partition table q quit without saving changes r recovery and transformation options (experts only) s sort partitions t change a partition's type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): y Command (? for help): l Type search string, or <Enter> to show all codes: raid 8503 Container Linux root on RAID a505 FreeBSD Vinum/RAID a906 NetBSD RAID af01 Apple RAID af02 Apple RAID offline af06 Apple SoftRAID Status af07 Apple SoftRAID Scratch af08 Apple SoftRAID Volume af09 Apple SoftRAID Cache fd00 Linux RAID Command (? for help): n Partition number (1-128, default 1): First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}: Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): fd00 Changed type of partition to 'Linux RAID' Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sda. The operation has completed successfully. root@U2204D-NAS-E7P:~# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.8 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): p Disk /dev/sda: 3907029168 sectors, 1.8 TiB Model: ST2000LM003 HN-M Sector size (logical/physical): 512/4096 bytes Disk identifier (GUID): 7EBB9FE2-202F-4CE9-9FB1-64EDEF9B6730 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 3907029134 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 3907029134 1.8 TiB FD00 Linux RAID Command (? for help): i Using 1 Partition GUID code: A19D880F-05FC-4D3B-A006-743F0F84911E (Linux RAID) Partition unique GUID: E5578E06-E9E6-4366-879A-8770FB3D5E04 First sector: 2048 (at 1024.0 KiB) Last sector: 3907029134 (at 1.8 TiB) Partition size: 3907027087 sectors (1.8 TiB) Attribute flags: 0000000000000000 Partition name: 'Linux RAID' Command (? for help): q
新建完分区的硬盘用
fdisk -l
查看如下:Disk /dev/sda:1.82 TiB,2000398934016 字节,3907029168 个扇区 Disk model: ST2000LM003 HN-M 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 4096 字节 I/O 大小(最小/最佳):4096 字节 / 4096 字节 磁盘标签类型:gpt 磁盘标识符:7EBB9FE2-202F-4CE9-9FB1-64EDEF9B6730 设备 起点 末尾 扇区 大小 类型 /dev/sda1 2048 3907029134 3907027087 1.8T Linux RAID Disk /dev/sdb:1.82 TiB,2000398934016 字节,3907029168 个扇区 Disk model: ST2000LM003 HN-M 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 4096 字节 I/O 大小(最小/最佳):4096 字节 / 4096 字节 磁盘标签类型:gpt 磁盘标识符:DB45AA48-AE54-4FD3-8F29-052355C90462 设备 起点 末尾 扇区 大小 类型 /dev/sdb1 2048 3907029134 3907027087 1.8T Linux RAID
- 安装mdadm
apt install mdadm
识别系统磁盘
root@U2204D-NAS-E7P:~# lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT NAME SIZE FSTYPE TYPE MOUNTPOINT loop0 4K squashfs loop /snap/bare/5 loop1 73.9M squashfs loop /snap/core22/864 loop2 62M squashfs loop /snap/core20/1587 loop3 349.7M squashfs loop /snap/gnome-3-38-2004/143 loop4 400.8M squashfs loop /snap/gnome-3-38-2004/112 loop5 63.5M squashfs loop /snap/core20/2015 loop6 91.7M squashfs loop /snap/gtk-common-themes/1535 loop7 45.9M squashfs loop /snap/snap-store/582 loop8 497M squashfs loop /snap/gnome-42-2204/141 loop9 40.9M squashfs loop /snap/snapd/20290 loop10 452K squashfs loop /snap/snapd-desktop-integration/83 loop11 284K squashfs loop /snap/snapd-desktop-integration/14 loop12 12.3M squashfs loop /snap/snap-store/959 loop13 163.3M squashfs loop /snap/firefox/1635 sda 1.8T disk └─sda1 1.8T ntfs part sdb 1.8T disk └─sdb1 1.8T ntfs part sr0 1024M rom nvme0n1 894.3G disk ├─nvme0n1p1 1M part ├─nvme0n1p2 513M vfat part /boot/efi └─nvme0n1p3 893.8G ext4 part /
可以看到sda和sdb两个用于组件RAID的2T硬盘及其下的分区sda1和sdb1
创建由
/dev/sda1
和/dev/sdb1
组成的RAID-1阵列设备,阵列设备命名为/dev/md0
root@U2204D-NAS-E7P:~# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 / dev/sda1 /dev/sdb1 mdadm: partition table exists on /dev/sda1 mdadm: partition table exists on /dev/sda1 but will be lost or meaningless after creating array mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: partition table exists on /dev/sdb1 mdadm: partition table exists on /dev/sdb1 but will be lost or meaningless after creating array mdadm: size set to 1953381440K mdadm: automatically enabling write-intent bitmap on large array Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. root@U2204D-NAS-E7P:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdb1[1] sda1[0] 1953381440 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.0% (1715008/1953381440) finish=284.4min speed=114333K/sec bitmap: 15/15 pages [60KB], 65536KB chunk unused devices: <none>
创建并挂载文件系统,阵列挂载在
/mnt/md0
root@U2204D-NAS-E7P:~# mkfs.ext4 -F /dev/md0 # 在阵列上创建一个文件系统 mke2fs 1.46.5 (30-Dec-2021) /dev/md0 有一个 ext4 文件系统 上一次挂载于Mon Dec 4 21:08:55 2023 创建含有 488345360 个块(每块 4k)和 122093568 个 inode 的文件系统 文件系统 UUID:7af7226f-ad48-4ca3-9473-0d5362b74a23 超级块的备份存储于下列块: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 正在分配组表: 完成 正在写入 inode表: 完成 创建日志(262144 个块): 完成 写入超级块和文件系统账户统计信息: 已完成 root@U2204D-NAS-E7P:~# mkdir -p /mnt/md0 # 创建挂载点 root@U2204D-NAS-E7P:~# mount /dev/md0 /mnt/md0 # 挂载文件系统 root@U2204D-NAS-E7P:~# df -h -x devtmpfs -x tmpfs # 查看文件系统状态 文件系统 大小 已用 可用 已用% 挂载点 /dev/nvme0n1p3 879G 11G 824G 2% / /dev/nvme0n1p2 512M 6.1M 506M 2% /boot/efi /dev/md0 1.8T 28K 1.7T 1% /mnt/md0
保存阵列布局,设置自动启用
root@U2204D-NAS-E7P:~# mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf # 调整 /etc/mdadm/mdadm.conf 文件确保阵列在启动时自动重新组装 ARRAY /dev/md0 metadata=1.2 name=U2204D-NAS-E7P:0 UUID=9fdd938e:32691083:94cadecd:ea098747 root@U2204D-NAS-E7P:~# update-initramfs -u # 更新 initramfs 或初始 RAM 文件系统,以 便该阵列在早期启动过程中可用 update-initramfs: Generating /boot/initrd.img-6.2.0-37-generic # echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/ fstab # 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载 /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
- 阵列更多信息可查阅如下参考资料
参考资料
- 记一次采坑经历, mdadm 创建 raid0,重启后自动消失
如何在 Ubuntu 22.04 上使用 mdadm 创建 RAID 阵列
介绍 mdadm 实用程序可用于使用 Linux 的软件 RAID 功能创建和管理存储阵列。管理员在协调各自的存储设备和创建具有更高性能或冗余特性的逻辑存储设备方面具有极大的灵活性。 在本指南中,您将执行可使用 Ubuntu 22.04 服务器设置的不同 RAID 配置。 先决条件 要按照本指南中的步骤进行操作,您需要: 在 Ubuntu 22.04 服务器上具有 sudo 权限的非根用户。要了解如何设置具有这些权限的帐户,请遵循我们的 Ubuntu 22.04 初始服务器设置指南。 基本了解 RAID 术语和概念。要详细了解 RAID 以及适合您的 RAID 级别,请阅读我们的 RAID 介绍文章。 您的服务器上有多个可用的原始存储设备。本教程中的示例演示了如何在服务器上配置各种类型的阵列。因此,您需要配置一些驱动器。 根据阵列类型,您将需要两到四个存储设备。在遵循本指南之前,无需格式化这些驱动器。 信息:由于虚拟专用服务器上的 RAID 设置效率低下,我们不建议在 DigitalOcean droplets 上部署 RAID 设置。相对于裸机硬件上的设置,数据中心磁盘复制的效率使得 RAID 的优势可以忽略不计。本教程旨在成为传统 RAID 设置的参考。 重置现有 RAID 设备(可选) 如果您尚未设置任何阵列,则可以暂时跳过此部分。本指南将介绍许多不同的 RAID 级别。如果您希望跟随并完成设备的每个 RAID 级别,您可能希望在每个部分之后重新使用您的存储设备。在测试新的 RAID 级别之前,可以参考这个特定的重置现有 RAID 设备部分来重置您的组件存储设备。 警告:此过程将完全破坏阵列和写入其中的任何数据。确保您在正确的阵列上操作,并且在销毁阵列之前复制了您需要保留的所有数据。 首先在 /proc/mdstat 文件中查找活动数组: cat /proc/mdstat OutputPersonalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid0 sdc[1] sdd[0] 209584128 blocks super 1.2 512k chunks unused devices: <none> 然后从文件系统卸载阵列: sudo umount /dev/md0 现在停止并删除数组: sudo mdadm --stop /dev/md0 使用以下命令查找用于构建阵列的设备: 警告:请记住,/dev/sd* 名称可以在您重新启动时随时更改。每次检查它们以确保您在正确的设备上操作。 lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G linux_raid_member disk sdb 100G linux_raid_member disk sdc 100G disk sdd 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 发现用于创建阵列的设备后,将它们的 superblock 归零,该块保存 RAID 设置的元数据。清零这会删除 RAID 元数据并将它们重置为正常: sudo mdadm --zero-superblock /dev/sda sudo mdadm --zero-superblock /dev/sdb 建议还删除对数组的任何持久引用。编辑 /etc/fstab 文件并注释掉或删除对数组的引用。您可以使用 nano 或您喜欢的文本编辑器在行首插入标签符号 # 来注释掉它: sudo nano /etc/fstab . . . # /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0 此外,从 /etc/mdadm/mdadm.conf 文件中注释掉或删除数组定义: sudo nano /etc/mdadm/mdadm.conf . . . # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91 最后,再次更新 initramfs,以便早期启动过程不会尝试使不可用的阵列联机: sudo update-initramfs -u 从这里开始,您应该准备好单独重用存储设备,或将其作为不同阵列的组件。 创建 RAID 0 阵列 RAID 0 阵列的工作原理是将数据分解成块并将其条带化到可用磁盘上。这意味着每个磁盘都包含一部分数据,并且在检索信息时将引用多个磁盘。 要求:至少 2 个存储设备。 主要优势:在读/写和容量方面的性能。 要记住的事情:确保您有功能备份。单个设备故障将破坏阵列中的所有数据。 识别组件设备 首先,找到您将使用的原始磁盘的标识符: lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G disk sdb 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 在此示例中,您有两个没有文件系统的磁盘,每个磁盘的大小为 100G。这些设备已被赋予了此会话的 /dev/sda 和 /dev/sdb 标识符,并将成为用于构建阵列的原始组件。 创建阵列 要使用这些组件创建 RAID 0 阵列,请将它们传递到 mdadm --create 命令中。您必须指定要创建的设备名称、RAID 级别和设备数量。在此命令示例中,您将命名设备 /dev/md0,并包括将构建阵列的两个磁盘: sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb 通过检查 /proc/mdstat 文件确认 RAID 已成功创建: cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid0 sdb[1] sda[0] 209584128 blocks super 1.2 512k chunks unused devices: <none> 此输出显示 /dev/md0 设备是使用 /dev/sda 和 /dev 在 RAID 0 配置中创建的/sdb 设备。 创建和挂载文件系统 接下来,在阵列上创建一个文件系统: sudo mkfs.ext4 -F /dev/md0 然后,创建一个挂载点来附加新的文件系统: sudo mkdir -p /mnt/md0 您可以使用以下命令挂载文件系统: sudo mount /dev/md0 /mnt/md0 之后,检查新空间是否可用: df -h -x devtmpfs -x tmpfs OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% / /dev/vda15 105M 3.4M 102M 4% /boot/efi /dev/md0 196G 61M 186G 1% /mnt/md0 新文件系统现已挂载并可访问。 保存阵列布局 为确保阵列在启动时自动重新组装,您必须调整 /etc/mdadm/mdadm.conf 文件。您可以自动扫描活动阵列并在文件中附加以下内容: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf 之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可以使用该阵列: sudo update-initramfs -u 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载: echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab 您的 RAID 0 阵列现在将自动组装和安装每个启动。 您现在已完成 RAID 设置。如果您想尝试不同的 RAID,请按照本教程开头的重置说明继续创建新的 RAID 阵列类型。 创建 RAID 1 阵列 RAID 1 阵列类型是通过跨所有可用磁盘镜像数据来实现的。 RAID 1 阵列中的每个磁盘都会获得一份完整的数据副本,从而在设备发生故障时提供冗余。 要求:至少 2 个存储设备。 主要优势:两个存储设备之间的冗余。 注意事项:由于保留了两个数据副本,因此只有一半的磁盘空间可用。 识别组件设备 首先,找到您将使用的原始磁盘的标识符: lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G disk sdb 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 在此示例中,您有两个没有文件系统的磁盘,每个磁盘的大小为 100G。这些设备已被赋予了此会话的 /dev/sda 和 /dev/sdb 标识符,并将成为您用于构建阵列的原始组件。 创建阵列 要使用这些组件创建 RAID 1 阵列,请将它们传递到 mdadm --create 命令中。您必须指定要创建的设备名称、RAID 级别和设备数量。在此命令示例中,您将命名设备 /dev/md0,并包括将构建阵列的磁盘: sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb 如果您使用的组件设备不是启用了 boot 标志的分区,您可能会收到以下警告。用 y 响应并继续是安全的: Outputmdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: size set to 104792064K Continue creating array? y mdadm 工具将开始镜像驱动器。这可能需要一些时间才能完成,但可以在这段时间内使用数组。您可以通过检查 /proc/mdstat 文件来监控镜像的进度: cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdb[1] sda[0] 104792064 blocks super 1.2 [2/2] [UU] [====>................] resync = 20.2% (21233216/104792064) finish=6.9min speed=199507K/sec unused devices: <none> 在第一个突出显示的行中,/dev/md0 设备是使用 /dev/sda 和 在 RAID 1 配置中创建的/dev/sdb 设备。第二个突出显示的行显示了镜像的进度。在此过程完成后,您可以继续下一步。 创建和挂载文件系统 接下来,在阵列上创建一个文件系统: sudo mkfs.ext4 -F /dev/md0 然后,创建一个挂载点来附加新的文件系统: sudo mkdir -p /mnt/md0 您可以通过运行以下命令来挂载文件系统: sudo mount /dev/md0 /mnt/md0 检查新空间是否可用: df -h -x devtmpfs -x tmpfs OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% / /dev/vda15 105M 3.4M 102M 4% /boot/efi /dev/md0 99G 60M 94G 1% /mnt/md0 新文件系统已挂载并可访问。 保存阵列布局 为确保阵列在启动时自动重新组装,您必须调整 /etc/mdadm/mdadm.conf 文件。您可以自动扫描活动阵列并在文件中附加以下内容: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf 之后,您可以更新 initramfs 或初始 RAM 文件系统,以便该阵列在早期启动过程中可用: sudo update-initramfs -u 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载: echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab 您的 RAID 1 阵列现在将自动组装和安装每个启动。 您现在已完成 RAID 设置。如果您想尝试不同的 RAID,请按照本教程开头的重置说明继续创建新的 RAID 阵列类型。 创建 RAID 5 阵列 RAID 5 阵列类型是通过跨可用设备条带化数据来实现的。每个条带的一个组成部分是计算出的奇偶校验块。如果一个设备出现故障,奇偶校验块和剩余的块可以用来计算丢失的数据。轮换接收奇偶校验块的设备,以便每个设备都具有平衡数量的奇偶校验信息。 要求:至少 3 个存储设备。 主要优势:具有更多可用容量的冗余。 注意事项:在分发奇偶校验信息时,一个磁盘的容量将用于奇偶校验。当处于降级状态时,RAID 5 的性能可能会非常差。 识别组件设备 首先,找到您将使用的原始磁盘的标识符: lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G disk sdb 100G disk sdc 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 您有三个没有文件系统的磁盘,每个磁盘大小为 100G。这些设备已被赋予此会话的 /dev/sda、/dev/sdb 和 /dev/sdc 标识符,并将成为用于构建阵列的原始组件。 创建阵列 要使用这些组件创建 RAID 5 阵列,请将它们传递到 mdadm --create 命令中。您必须指定要创建的设备名称、RAID 级别和设备数量。在此命令示例中,您将命名设备 /dev/md0,并包括将构建阵列的磁盘: sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc mdadm 工具将开始配置阵列。出于性能原因,它使用恢复过程来构建阵列。这可能需要一些时间才能完成,但可以在这段时间内使用数组。您可以通过检查 /proc/mdstat 文件来监控镜像的进度: cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid5 sdc[3] sdb[1] sda[0] 209582080 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_] [>....................] recovery = 0.9% (957244/104791040) finish=18.0min speed=95724K/sec unused devices: <none> 在第一个突出显示的行中,/dev/md0 设备是使用 /dev/sda 在 RAID 5 配置中创建的, /dev/sdb 和 /dev/sdc 设备。第二个突出显示的行显示了构建的进度。 警告:由于 mdadm 构建 RAID 5 阵列的方式,当阵列仍在构建时,阵列中的备件数量将被不准确地报告。这意味着您必须等待阵列完成组装才能更新 /etc/mdadm/mdadm.conf 文件。如果您在阵列仍在构建时更新配置文件,系统将获得有关阵列状态的错误信息,并且将无法在启动时使用正确的名称自动组装它。 在此过程完成后,您可以继续本指南。 创建和挂载文件系统 接下来,在阵列上创建一个文件系统: sudo mkfs.ext4 -F /dev/md0 创建一个挂载点来附加新的文件系统: sudo mkdir -p /mnt/md0 您可以使用以下命令挂载文件系统: sudo mount /dev/md0 /mnt/md0 检查新空间是否可用: df -h -x devtmpfs -x tmpfs OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% / /dev/vda15 105M 3.4M 102M 4% /boot/efi /dev/md0 197G 60M 187G 1% /mnt/md0 新文件系统已挂载并可访问。 保存阵列布局 为确保阵列在启动时自动重新组装,您必须调整 /etc/mdadm/mdadm.conf 文件。 警告:如前所述,在调整配置之前,请再次检查以确保阵列已完成组装。在构建阵列之前完成以下步骤将阻止系统在重新启动时正确组装阵列。 您可以通过检查 /proc/mdstat 文件来监控镜像的进度: cat /proc/mdstat OutputPersonalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md0 : active raid5 sdc[3] sdb[1] sda[0] 209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> 此输出表明重建已完成。现在,您可以自动扫描活动数组并附加文件: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf 之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可以使用该阵列: sudo update-initramfs -u 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载: echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab 您的 RAID 5 阵列现在将自动组装和安装每个启动。 您现在已完成 RAID 设置。如果您想尝试不同的 RAID,请按照本教程开头的重置说明继续创建新的 RAID 阵列类型。 创建 RAID 6 阵列 RAID 6 阵列类型是通过跨可用设备条带化数据来实现的。每个条带的两个组件是计算出的奇偶校验块。如果一个或两个设备发生故障,可以使用奇偶校验块和剩余块来计算丢失的数据。轮换接收奇偶校验块的设备,以便每个设备都具有平衡数量的奇偶校验信息。这类似于 RAID 5 阵列,但允许两个驱动器出现故障。 要求:至少 4 个存储设备。 主要优势:双重冗余和更多可用容量。 注意事项:在分发奇偶校验信息时,两个磁盘的容量将用于奇偶校验。当处于降级状态时,RAID 6 的性能可能会非常差。 识别组件设备 首先,找到您将使用的原始磁盘的标识符: lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G disk sdb 100G disk sdc 100G disk sdd 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 在此示例中,您有四个没有文件系统的磁盘,每个磁盘的大小为 100G。这些设备已被赋予 /dev/sda、/dev/sdb、/dev/sdc 和 /dev/sdd 此会话的标识符,将是用于构建数组的原始组件。 创建阵列 要使用这些组件创建 RAID 6 阵列,请将它们传递到 mdadm --create 命令中。您必须指定要创建的设备名称、RAID 级别和设备数量。在以下命令示例中,您将命名设备 /dev/md0 并包括将构建阵列的磁盘: sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd mdadm 工具将开始配置阵列。出于性能原因,它使用恢复过程来构建阵列。这可能需要一些时间才能完成,但可以在这段时间内使用数组。您可以通过检查 /proc/mdstat 文件来监控镜像的进度: cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid6 sdd[3] sdc[2] sdb[1] sda[0] 209584128 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU] [>....................] resync = 0.6% (668572/104792064) finish=10.3min speed=167143K/sec unused devices: <none> 在第一个突出显示的行中,/dev/md0 设备已使用 /dev/sda 在 RAID 6 配置中创建,/dev/sdb、/dev/sdc 和 /dev/sdd 设备。第二个突出显示的行显示了构建的进度。在此过程完成后,您可以继续本指南。 创建和挂载文件系统 接下来,在阵列上创建一个文件系统: sudo mkfs.ext4 -F /dev/md0 创建一个挂载点来附加新的文件系统: sudo mkdir -p /mnt/md0 您可以使用以下命令挂载文件系统: sudo mount /dev/md0 /mnt/md0 检查新空间是否可用: df -h -x devtmpfs -x tmpfs OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% / /dev/vda15 105M 3.4M 102M 4% /boot/efi /dev/md0 197G 60M 187G 1% /mnt/md0 新文件系统已挂载并可访问。 保存阵列布局 为确保阵列在启动时自动重新组装,您必须调整 /etc/mdadm/mdadm.conf 文件。您可以自动扫描活动阵列并通过键入以下内容附加文件: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf 之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可以使用该阵列: sudo update-initramfs -u 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载: echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab 您的 RAID 6 阵列现在将自动组装和安装每个启动。 您现在已完成 RAID 设置。如果您想尝试不同的 RAID,请按照本教程开头的重置说明继续创建新的 RAID 阵列类型。 创建复杂的 RAID 10 阵列 传统上,RAID 10 阵列类型是通过创建由多组 RAID 1 阵列组成的条带化 RAID 0 阵列来实现的。这种嵌套阵列类型以大量磁盘空间为代价提供了冗余和高性能。 mdadm 实用程序有其自己的 RAID 10 类型,可提供相同类型的优势并提高灵活性。它不是通过嵌套数组创建的,但具有许多相同的特性和保证。您将在这里使用 mdadm RAID 10。 要求:至少 3 个存储设备。 主要优势:性能和冗余。 注意事项:阵列的容量缩减量由您选择保留的数据副本数决定。使用 mdadm 风格的 RAID 10 存储的副本数量是可配置的。 默认情况下,每个数据块的两个副本将存储在所谓的 near 布局中。规定每个数据块如何存储的可能布局如下: near:默认排列。条带化时,每个块的副本都是连续写入的,这意味着数据块的副本将围绕多个磁盘的同一部分写入。 far:第一个和后续副本被写入阵列中存储设备的不同部分。例如,第一个块可能写在磁盘的开头附近,而第二个块可能写在另一个磁盘的中途。这可以以写入性能为代价为传统的旋转磁盘提供一些读取性能提升。 offset:复制每个条带,并偏移一个驱动器。这意味着副本彼此偏移,但在磁盘上仍然靠得很近。这有助于最大限度地减少某些工作负载期间的过度搜索。 您可以查看此 man 页面的 RAID10 部分,了解有关这些布局的更多信息: man 4 md 您还可以在线找到此 man 页面。 识别组件设备 首先,找到您将使用的原始磁盘的标识符: lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT OutputNAME SIZE FSTYPE TYPE MOUNTPOINT sda 100G disk sdb 100G disk sdc 100G disk sdd 100G disk vda 25G disk ├─vda1 24.9G ext4 part / ├─vda14 4M part └─vda15 106M vfat part /boot/efi vdb 466K iso9660 disk 在此示例中,您有四个没有文件系统的磁盘,每个磁盘的大小为 100G。这些设备已被赋予 /dev/sda、/dev/sdb、/dev/sdc 和 /dev/sdd 此会话的标识符,将是用于构建数组的原始组件。 创建数组 要使用这些组件创建 RAID 10 阵列,请将它们传递到 mdadm --create 命令中。您必须指定要创建的设备名称、RAID 级别和设备数量。在以下命令示例中,您将命名设备 /dev/md0 并包括将构建阵列的磁盘: 您可以通过不指定布局和副本编号来使用近布局设置两个副本: sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd 如果您想使用不同的布局或更改份数,则必须使用 --layout= 选项,该选项采用布局和副本标识符。布局为 n 表示近,f 表示远,o 表示偏移。之后附加要存储的副本数。 例如,要创建一个在偏移布局中具有三个副本的数组,命令将包括以下内容: sudo mdadm --create --verbose /dev/md0 --level=10 --layout=o3 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd mdadm 工具将开始配置阵列。出于性能原因,它使用恢复过程来构建阵列。这可能需要一些时间才能完成,但可以在这段时间内使用数组。您可以通过检查 /proc/mdstat 文件来监控镜像的进度: cat /proc/mdstat OutputPersonalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0] 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] [===>.................] resync = 18.1% (37959424/209584128) finish=13.8min speed=206120K/sec unused devices: <none> 在第一个突出显示的行中,/dev/md0 设备已使用 /dev/sda 在 RAID 10 配置中创建,/dev/sdb、/dev/sdc 和 /dev/sdd 设备。第二个突出显示的区域显示了用于此示例的布局(近配置中的两个副本)。第三个突出显示的区域显示了构建的进度。在此过程完成后,您可以继续本指南。 创建和挂载文件系统 接下来,在阵列上创建一个文件系统: sudo mkfs.ext4 -F /dev/md0 创建一个挂载点来附加新的文件系统: sudo mkdir -p /mnt/md0 您可以使用以下命令挂载文件系统: sudo mount /dev/md0 /mnt/md0 检查新空间是否可用: df -h -x devtmpfs -x tmpfs OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% / /dev/vda15 105M 3.4M 102M 4% /boot/efi /dev/md0 197G 60M 187G 1% /mnt/md0 新文件系统已挂载并可访问。 保存阵列布局 为确保阵列在启动时自动重新组装,您必须调整 /etc/mdadm/mdadm.conf 文件。您可以通过运行以下命令自动扫描活动阵列并附加文件: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf 之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可以使用该阵列: sudo update-initramfs -u 将新的文件系统挂载选项添加到 /etc/fstab 文件,以便在启动时自动挂载: echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab 您的 RAID 10 阵列现在将自动组装和安装每个启动。 结论 在本指南中,您学习了如何使用 Linux 的 mdadm 软件 RAID 实用程序创建各种类型的阵列。与单独使用多个磁盘相比,RAID 阵列提供了一些引人注目的冗余和性能增强。 一旦确定了您的环境所需的阵列类型并创建了设备,您就可以了解如何使用 mdadm 执行日常管理。我们关于如何在 Ubuntu 上使用 mdadm 管理 RAID 阵列的指南可以帮助您入门。
如何在 Ubuntu 22.04 上使用 mdadm 管理 RAID 阵列
介绍 RAID 阵列通过将单个磁盘组合成特定配置的虚拟存储设备来提供更高的性能和冗余。在 Linux 中,mdadm 实用程序创建和管理软件 RAID 阵列。 在之前的指南中,我们介绍了如何在 Ubuntu 22.04 上使用 mdadm 创建 RAID 阵列。在本指南中,我们将演示如何在 Ubuntu 22.04 服务器上管理 RAID 阵列。 先决条件 要遵循本指南,您需要访问非根 sudo 用户。您可以按照我们的 Ubuntu 22.04 初始服务器设置指南设置合适的用户。 如前所述,本指南将涵盖 RAID 阵列管理。在开始本指南之前,请按照我们关于如何在 Ubuntu 22.04 上使用 mdadm 创建 RAID 阵列的指南来创建一个或多个阵列。本指南将假定您有一个或多个要操作的阵列。 信息:由于虚拟专用服务器上的 RAID 设置效率低下,我们不建议在 DigitalOcean droplets 上部署 RAID 设置。相对于裸机硬件上的设置,数据中心磁盘复制的效率使得 RAID 的优势可以忽略不计。本教程旨在成为传统 RAID 设置的参考。 查询RAID设备信息 正确管理的最基本要求之一是能够找到有关阵列的结构、组件设备和当前状态的信息。 有关 RAID 设备的详细信息,请将带有 -D 或 --detail 选项的 RAID 设备传递给 mdadm: sudo mdadm -D /dev/md0 将显示有关阵列的重要信息: Output/dev/md0: Version : 1.2 Creation Time : Thu Sep 29 17:07:10 2022 Raid Level : raid10 Array Size : 209582080 (199.87 GiB 214.61 GB) Used Dev Size : 104791040 (99.94 GiB 107.31 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Sep 29 17:08:24 2022 State : clean, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : raid2:0 (local to host raid2) UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Events : 35 Number Major Minor RaidDevice State 0 8 0 0 active sync set-A /dev/sda 1 8 16 1 active sync set-B /dev/sdb 2 8 32 2 active sync set-A /dev/sdc 3 8 48 3 active sync set-B /dev/sdd 输出显示 RAID 级别、阵列大小、各个部分的运行状况、阵列的 UUID 以及组件设备及其角色。 对于数组的简短细节,适合添加到 /dev/mdadm/mdadm.conf 文件中,您可以传入 --brief 或 - b 带有详细视图的标志: sudo mdadm -Db /dev/md0 OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=8069bcc7:72e7b49f:fba1c780:560a85e0 要快速获取 RAID 设备的人类可读摘要,请使用 -Q 选项对其进行查询: sudo mdadm -Q /dev/md0 Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail. 这可用于一目了然地查找有关 RAID 设备的关键信息。 获取有关组件设备的信息 您还可以使用 mdadm 查询单个组件设备。 -Q 选项与组件设备一起使用时,会告诉您它所属的数组及其作用: sudo mdadm -Q /dev/sdc Output/dev/sdc: is not an md array /dev/sdc: device 2 in 4 device active raid10 /dev/md0. Use mdadm --examine for more detail. 您可以使用 -E 或 --examine 选项获取更多详细信息: sudo mdadm -E /dev/sdc Output/dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Name : RAID2204:0 (local to host RAID2204) Creation Time : Wed Oct 5 15:56:03 2022 Raid Level : raid10 Raid Devices : 4 Avail Dev Size : 209582080 sectors (99.94 GiB 107.31 GB) Array Size : 209582080 KiB (199.87 GiB 214.61 GB) Data Offset : 133120 sectors Super Offset : 8 sectors Unused Space : before=132968 sectors, after=0 sectors State : clean Device UUID : 027f74c5:6d488509:64844c7a:add75d88 Update Time : Wed Oct 5 16:13:57 2022 Bad Block Log : 512 entries available at offset 136 sectors Checksum : 98edf3ae - correct Events : 35 Layout : near=2 Chunk Size : 512K Device Role : Active device 2 Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing) 此信息类似于对阵列设备使用 -D 选项时显示的信息,但侧重于组件设备与阵列的关系。 读取 /proc/mdstat 信息 有关服务器上每个组装阵列的详细信息,请查看 /proc/mdstat 文件。这通常是查找系统中活动阵列当前状态的最佳方式: cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0] 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] unused devices: <none> 这里的输出非常密集,在少量空间中提供了大量信息: Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] . . . Personalities 行描述了内核当前支持的不同 RAID 级别和配置。 以 md0 开头的行描述了 RAID 设备描述的开头。下面的缩进线也描述了这个设备: . . . md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0] . . . 第一行说明阵列处于活动状态,没有故障,并配置为 RAID 10。之后,列出了用于构建阵列的组件设备。括号中的数字描述了设备在阵列中的当前角色。这会影响为设备提供的数据副本。 . . . 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] . . . 本例中显示的第二行给出了虚拟设备提供的块数、元数据版本(本例中为 1.2)和数组的块大小。由于这是一个 RAID 10 阵列,它还包括有关阵列布局的信息。在此示例中,它已配置为在 near 布局中存储每个数据块的两个副本。 方括号中的最后一项均表示健康集中的当前可用设备。数字括号中的第一个数字表示健康阵列的大小,而第二个数字表示当前可用的设备数。其他括号是阵列健康状况的视觉指示,U 代表健康设备,_ 代表故障设备。 如果您的阵列当前正在组装或恢复,您可能会有另一行显示进度: . . . [>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec . . . 这以多种不同方式描述了正在应用的操作和当前进度。它还提供当前速度和预计完成时间。 在清楚了解系统上当前运行的阵列后,您可以采取多种措施。 停止阵列 要停止阵列,第一步是卸载它。 使用 cd ~ 命令走出挂载的目录: cd ~ 然后卸载设备: sudo umount /mnt/md0 您可以通过运行以下命令停止所有活动阵列: sudo mdadm --stop --scan 如果要停止特定阵列,请将其传递给 mdadm --stop 命令: sudo mdadm --stop /dev/md0 这将停止阵列。您必须重新组装阵列才能再次访问它。 启动数组 要启动配置文件或 /proc/mdstat 中定义的所有阵列,请运行以下命令: sudo mdadm --assemble --scan 要启动一个特定的数组,您可以将它作为参数传递给 mdadm --assemble: sudo mdadm --assemble /dev/md0 如果在配置文件中定义了数组,则此方法有效。 如果配置文件中缺少阵列的正确定义,仍然可以通过传入组件设备来启动阵列: sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd 一旦阵列组装好,就可以像往常一样安装它: sudo mount /dev/md0 /mnt/md0 现在可以在挂载点访问该阵列。 将备用设备添加到阵列 备用设备可以添加到任何提供冗余的阵列,例如 RAID 1、5、6 或 10。除非活动设备发生故障,否则阵列不会主动使用备用设备。发生这种情况时,阵列会将数据重新同步到备用驱动器,以将阵列修复到完全健康状态。不能将备件添加到非冗余阵列 (RAID 0),因为该阵列将无法在驱动器发生故障后幸存下来。 要添加备用设备,请将阵列和新设备传递给 mdadm --add 命令: sudo mdadm /dev/md0 --add /dev/sde 如果阵列未处于降级状态,则新设备将作为备用设备添加。如果设备当前降级,重新同步操作将立即开始使用备用驱动器替换故障驱动器。 添加备用后,更新配置文件以反映新的设备方向: sudo nano /etc/mdadm/mdadm.conf 删除或注释掉与您的数组定义相对应的当前行: . . . # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294 然后,附加您当前的配置: sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf mdadm 实用程序将使用新信息来组装数组。 增加阵列中有源设备的数量 可以通过增加组件中有源设备的数量来增加阵列。确切的过程稍微取决于您使用的 RAID 级别。 使用 RAID 1 或 10 首先将新设备添加为备用设备,如上一节所示: sudo mdadm /dev/md0 --add /dev/sde 找出阵列中 RAID 设备的当前数量: sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 15:29:26 2016 Raid Level : raid1 Array Size : 104792064 (99.94 GiB 107.31 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent . . . 在此示例中,阵列配置为主动使用两个设备。然而,它确实表明,由于有备用设备,阵列可用的设备总数为三个。 现在,重新配置阵列以具有额外的活动设备。备件将用于满足额外的驱动器需求。请记住在此命令中替换您的目标 raid 设备数。在这里,我们将具有 2 个设备的 raid 1 增加到 3。如果您在具有 4 个设备的 raid 10 中,并且有额外的驱动器,请将其增加到 5: sudo mdadm --grow --raid-devices=3 /dev/md0 阵列将开始重新配置一个额外的活动磁盘。要查看同步数据的进度,请运行以下命令: cat /proc/mdstat 该过程完成后,您可以继续使用该设备。 使用 RAID 5 或 6 首先将新设备添加为备用设备,如上一节所示: sudo mdadm /dev/md0 --add /dev/sde 找出阵列中 RAID 设备的当前数量: sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Oct 5 18:38:51 2022 Raid Level : raid5 Array Size : 209584128 (199.88 GiB 214.61 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent . . . 在此示例中,阵列配置为主动使用三个设备,并且由于添加了备用设备,阵列可用的设备总数为四个。 现在,重新配置阵列以具有额外的活动设备。备件将用于满足额外的驱动器需求。在扩展 RAID 5 或 RAID 6 阵列时,包含一个名为 --backup-file 的附加选项很重要。这将指向阵列外的一个位置,其中将存储包含关键信息的备份文件: 注意:备份文件在此过程中只使用很短但很关键的时间,之后会自动删除。因为需要它的时间很短,您可能永远不会在磁盘上看到该文件,但如果出现问题,它可以用来重建阵列。如果您想了解更多信息,这篇文章有一些额外的信息。 sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0 以下输出表明临界区将被备份: Outputmdadm: Need to backup 3072K of critical section.. 阵列将开始重新配置一个额外的活动磁盘。要查看同步数据的进度,请运行: cat /proc/mdstat 在此过程完成后,您可以继续使用该设备。 重塑完成后,您需要扩展阵列上的文件系统以利用额外空间: sudo resize2fs /dev/md0 您的阵列现在将拥有与其容量相匹配的文件系统。 使用 RAID 0 RAID 0 阵列不能有备用驱动器,因为备用驱动器没有机会重建损坏的 RAID 0 阵列。您必须在扩大阵列的同时添加新设备。 首先,找出阵列中当前 RAID 设备的数量: sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 19:17:14 2020 Raid Level : raid0 Array Size : 209584128 (199.88 GiB 214.61 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent . . . 您现在可以在添加新驱动器的同一操作中增加 RAID 设备的数量: sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc 您将收到指示阵列已更改为 RAID 4 的输出: Outputmdadm: level of /dev/md0 changed to raid4 mdadm: added /dev/sdc 这是正常的,也是意料之中的。当数据重新分配到所有现有磁盘后,阵列将转换回 RAID 0。 您可以查看操作的进度: cat /proc/mdstat 同步完成后,调整文件系统的大小以使用额外的空间: sudo resize2fs /dev/md0 您的阵列现在将拥有与其容量相匹配的文件系统。 从阵列中删除设备 如果出现故障或需要更换磁盘,有时需要从 RAID 阵列中移除驱动器。 对于要删除的设备,必须首先在数组中将其标记为“失败”。您可以使用 mdadm --detail 检查是否有失败的设备: sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 21:42:12 2020 Raid Level : raid5 Array Size : 209584128 (199.88 GiB 214.61 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Thu Aug 11 14:10:43 2020 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K Name : mdadmwrite:0 (local to host mdadmwrite) UUID : bf7a711b:b3aa9440:40d2c12e:79824706 Events : 144 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 0 1 active sync /dev/sda 2 8 16 2 active sync /dev/sdb 0 8 32 - faulty /dev/sdc 突出显示的行都表示驱动器不再运行。例如,此输出中的 /dev/sdc 显示驱动器出现故障。 如果您需要移除没有问题的驱动器,您可以使用 --fail 选项手动将其标记为失败: sudo mdadm /dev/md0 --fail /dev/sdc Outputmdadm: set /dev/sdc faulty in /dev/md0 如果查看 mdadm --detail 的输出,您会注意到设备现在被标记为故障。 一旦设备出现故障,您可以使用 mdadm --remove 将其从阵列中删除: sudo mdadm /dev/md0 --remove /dev/sdc Outputmdadm: hot removed /dev/sdc from /dev/md0 然后,您可以使用与添加备用驱动器相同的 mdadm --add 命令将其替换为新驱动器: sudo mdadm /dev/md0 --add /dev/sdd Outputmdadm: added /dev/sdd 阵列将通过将数据复制到新驱动器来开始恢复。 删除数组 要销毁阵列(包括其中包含的所有数据),请按照用于停止阵列的过程开始。 使用以下命令走出挂载的目录: cd ~ 然后卸载文件系统: sudo umount /mnt/md0 接下来,停止阵列: sudo mdadm --stop /dev/md0 然后,使用针对 RAID 设备的 --remove 命令删除阵列本身: sudo mdadm --remove /dev/md0 删除阵列本身后,在每个组件设备上使用 mdadm --zero-superblock。这将擦除 md 超级块,这是 mdadm 用来将组件设备组装和管理为数组的一部分的标头。如果这仍然存在,则在尝试将磁盘重新用于其他目的时可能会导致问题。 查看 lsblk --fs 输出中的 FSTYPE 列以确认数组中存在超级块: lsblk --fs OutputNAME FSTYPE LABEL UUID MOUNTPOINT … sda linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdb linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdc linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdd vda ├─vda1 ext4 DOROOT 4f8b85db-8c11-422b-83c4-c74195f67b91 / └─vda15 在此示例中,/dev/sda、/dev/sdb 和 /dev/sdc 都是数组的一部分,并且仍被标记像这样。 使用以下命令删除标签: sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc 接下来,确保删除或注释掉 /etc/fstab 文件中对数组的任何引用。您可以通过在开头添加主题标签符号 # 来执行此操作: sudo nano /etc/fstab . . . # /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0 完成后保存并关闭文件。 从 /etc/mdadm/mdadm.conf 文件中删除或注释掉对数组的任何引用: nano /etc/mdadm/mdadm.conf # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706 完成后保存并关闭文件。 然后更新 initramfs: sudo update-initramfs -u 这将从早期引导环境中删除设备。 结论 一旦您了解了 Linux 的 mdadm 实用程序使用的约定以及可以找到信息的位置,它就可以帮助您管理数组。本指南并不详尽,但旨在介绍您可能需要在日常工作中执行的一些管理任务。 一旦您熟悉了使用 mdadm 创建和管理 RAID 阵列,接下来您可以探索许多不同的方向。 LVM 等卷管理层与 RAID 紧密集成,允许您将空间灵活地划分为逻辑卷。要了解更多信息,请查看我们的 LVM 概念简介教程。 同样,LUKS 和 dm-crypt 加密通常用于在写入文件系统之前加密 RAID 设备。 Linux 允许结合使用所有这些技术来增强您的存储能力。
配置Samba文件共享
服务端
以下均通过root用户进行配置
安装samba
root@U2204D-NAS-E7P:~# apt -y install samba
在阵列挂载点/mnt/md0下新建共享目录,并配置安全共享
root@U2204D-NAS-E7P:~# mkdir -p /mnt/md0/RAID-P310S 将 Samba 共享目录的组所有权设置为 sambashare 组: root@U2204D-NAS-E7P:~# chgrp sambashare /mnt/md0/RAID-P310S 创建 samba 共享用户 raiduser: root@U2204D-NAS-E7P:~# useradd -M -d /mnt/md0/RAID-P310S/raiduser -s /usr/sbin/nologin -G sambashare raiduser root@U2204D-NAS-E7P:~# mkdir /mnt/md0/RAID-P310S/raiduser root@U2204D-NAS-E7P:~# chown raiduser:sambashare /mnt/md0/RAID-P310S/raiduser root@U2204D-NAS-E7P:~# chmod -Rf 0755 /mnt/md0/RAID-P310S/raiduser 设置用户密码并确认。(改密码也用此命令) root@U2204D-NAS-E7P:~# smbpasswd -a raiduser New SMB password: Retype new SMB password: Added user raiduser. 使用以下命令设置密码后启用 samba 帐户: root@U2204D-NAS-E7P:~# smbpasswd -e raiduser Enabled user raiduser. root@U2204D-NAS-E7P:~# vi /etc/samba/smb.conf 写入如下内容到配置文件末尾: [raiduser] path = /mnt/md0/RAID-P310S/raiduser read only = no browseable = no create mode = 0644 force create mode = 0644 directory mode = 0755 force directory mode = 0755 valid users = @raiduser @sambashare
重启samba守护进程使配置生效
root@U2204D-NAS-E7P:~# systemctl restart smbd nmbd root@U2204D-NAS-E7P:~# systemctl status smbd nmbd ● smbd.service - Samba SMB Daemon Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-12-04 21:59:02 CST; 35s ago Docs: man:smbd(8) man:samba(7) man:smb.conf(5) Process: 1924 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (code=exited, status=0/SUCCESS) Main PID: 1934 (smbd) Status: "smbd: ready to serve connections..." Tasks: 4 (limit: 9426) Memory: 8.8M CPU: 101ms CGroup: /system.slice/smbd.service ├─1934 /usr/sbin/smbd --foreground --no-process-group ├─1936 /usr/sbin/smbd --foreground --no-process-group ├─1937 /usr/sbin/smbd --foreground --no-process-group └─1938 /usr/lib/x86_64-linux-gnu/samba/samba-bgqd --ready-signal-fd=45 --parent-watch-fd=11 --de> 12月 04 21:59:01 U2204D-NAS-E7P systemd[1]: Starting Samba SMB Daemon... 12月 04 21:59:02 U2204D-NAS-E7P systemd[1]: Started Samba SMB Daemon. ● nmbd.service - Samba NMB Daemon Loaded: loaded (/lib/systemd/system/nmbd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-12-04 21:59:01 CST; 35s ago Docs: man:nmbd(8) man:samba(7) man:smb.conf(5) Main PID: 1922 (nmbd) Status: "nmbd: ready to serve connections..." lines 1-29
客户端
- Windows下通过
\\ip\raiduser
即可访问共享文件夹 - 其他系统请参考下文对应部分介绍
- 安装samba客户端
apt -y install smbclient cifs-utils
临时访问Windows上的smb共享
root@U2204D-NAS-E7P:/mnt# smbclient //ip/sharename -U username Password for [WORKGROUP\username]: Try "help" to get a list of possible commands. smb: \> list 0: server=ip, share=sharename smb: \> ls $RECYCLE.BIN DHS 0 Tue Sep 20 18:07:00 2022 Disks Inf D 0 Sun Oct 16 18:26:08 2022 NAS DS 0 Tue Nov 14 14:29:03 2023 NAS_Download D 0 Mon Mar 20 17:31:50 2023 Netdisks D 0 Wed Oct 25 16:44:40 2023 OneDriveTemp DH 0 Wed Sep 21 12:42:52 2022 System Volume Information DHS 0 Wed Sep 28 01:12:38 2022 WiFi-22.250.1-Driver64-Win10-Win11.exe A 40842280 Mon Nov 27 00:26:40 2023 ZeroTier One.msi A 17276928 Wed Aug 23 13:50:17 2023 3418062335 blocks of size 4096. 2891096292 blocks available smb: \> q
挂载smb共享并配置引导保存
root@U2204D-NAS-E7P:/mnt# ls md0 root@U2204D-NAS-E7P:/mnt# mkdir -p winnas root@U2204D-NAS-E7P:/mnt# mount -t cifs -o username=STX-N29-J1900 //192.168.2.224/ hc530_14t /mnt/winnas Password for STX-N29-J1900@//192.168.2.224/hc530_14t: root@U2204D-NAS-E7P:/mnt# df -h 文件系统 大小 已用 可用 已用% 挂载点 tmpfs 794M 3.5M 790M 1% /run /dev/nvme0n1p3 879G 11G 824G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/nvme0n1p2 512M 6.1M 506M 2% /boot/efi tmpfs 794M 76K 793M 1% /run/user/127 /dev/md0 1.8T 36K 1.7T 1% /mnt/md0 tmpfs 794M 60K 793M 1% /run/user/0 //192.168.2.224/hc530_14t 13T 2.0T 11T 16% /mnt/winnas root@U2204D-NAS-E7P:/mnt# echo '//ip/sharename /mnt/winnas cifs credentials=/. sambacreds 0 0' | sudo tee -a /etc/fstab 其中凭据文件安装以下格式创建(**出于安全性考虑应该修改此文件的权限为400**) # vi /.sambacreds username=user password=password domain=WORKGROUP
参考资料
Ubuntu 22.04.1
Ubuntu 22.04.1虚拟机使用镜像ubuntu-22.04.1-live-server-amd64.iso
安装,下载来源Ubuntu官网,使用默认选项安装(未安装最小化系统)。安装完成后执行sudo apt update
。
启用root用户
1. 设置root密码:
sudo passwd root
2. 启用root:
sudo passwd -u root
3. 修改/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
注释掉permitRootLogin prohibit-password
添加上PermitRootLogin yes
4. 保存修改,重启ssh服务
service ssh restart
新建用户
adduser newuser
若要添加sudo权限:
adduser newuser sudo
切换用户
sudo su newuser
删除用户(目录可手动删除)
sudo userdel user
检查
cat /etc/passwd
修改自带Python环境
系统默认安装了Python3.10.12,并且由命令python3调用,添加默认使用python命令调用:sudo ln -s /usr/bin/python3 /usr/bin/python
安装miniconda3 & 配置pip
conda可以管理python、R、 ruby、 lua、 scala、 java、 javaScript、 C/ C++、 fortran等多种语言
- 下载安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
执行安装
sudo bash Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
按脚本使用全默认yes安装,接受license后将安装路径改为用户根目录而不是root。比如我改为:/home/zly/.miniconda3
安装结束后的一点通知:If you'd prefer that conda's base environment not be activated on startup, set the auto_activate_base parameter to false: conda config --set auto_activate_base false Thank you for installing Miniconda3!
- 初始化
echo $SHELL
可以查看shell类型,执行conda init
后重启shell,再次登录即可看到默认进入base环境。 添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
建议添加:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
使用
conda config --show-sources
查看是否添加成功。conda使用常见命令(注意:必须在base环境下进行更改虚拟环境相关命令,否则会出现各种莫名的问题。)
conda update -n base conda #update最新版本的conda conda update --all #update最新版本的conda conda create -n xxxx python=3.5 #创建python3.5的xxxx虚拟环境 conda activate xxxx #开启xxxx环境 conda deactivate #关闭环境 conda env list #显示所有的虚拟环境 conda info --envs #显示所有的虚拟环境 conda search -h #查看search使用帮助信息 conda search tensorflow conda list #查看已经安装的文件包 conda list -n xxx #指定查看xxx虚拟环境下安装的package conda update xxx #更新xxx文件包 conda uninstall xxx #卸载xxx文件包 conda remove -n xxxx --all //创建xxxx虚拟环境 conda clean -p //删除没有用的包 conda clean -t //删除tar包 conda clean -y --all //删除所有的安装包及cache //克隆oldname环境为newname环境 conda create --name newname --clone oldname //彻底删除旧环境 conda remove --name oldname --all #conda 安装本地包 conda install --use-local ~/Downloads/a.tar.bz2 #显示目前conda的数据源有哪些 conda config --show channels #添加数据源:例如, 添加清华anaconda镜像: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes #删除数据源 conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
pip相关配置:
#显示目前pip的数据源有哪些 pip config list pip config list --[user|global] # 列出用户|全局的设置 pip config get global.index-url # 得到这key对应的value 如:https://mirrors.aliyun.com/pypi/simple/ # 添加 pip config set key value #添加数据源:例如, 添加USTC中科大的源: pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple #添加全局使用该数据源 pip config set global.trusted-host https://mirrors.ustc.edu.cn/pypi/web/simple # 删除 pip config unset key # 例如 conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ #搜索 pip search flask #搜素flask安装包 # 升级pip pip install pip -U # pip国内源 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
参考资料
安装Slurm作业调度系统(单台机器)
- 安装
sudo apt install slurm-wlm slurm-wlm-doc slurmd slurmctld -y
查看信息
(base) zly@U2204T-E7P:~$ slurmd -V slurm-wlm 21.08.5 (base) zly@U2204T-E7P:~$ slurmd -C NodeName=U2204T-E7P CPUs=20 Boards=1 SocketsPerBoard=20 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=3907 UpTime=0-00:32:02
生成配置文件
找到配置生成工具目录: (base) zly@U2204T-E7P:/usr$ dpkg -L slurmctld | grep slurm-wlm-configurator.html /usr/share/doc/slurmctld/slurm-wlm-configurator.html进入该目录: cd /usr/share/doc/slurmctld/ 部署http服务器: (base) zly@U2204T-E7P:/usr/share/doc/slurmctld$ python -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 浏览器访问,点击进入 slurm-wlm-configurator.html 按需求填写设置。其中主要修改: ClusterName=ESXi7-P310S SlurmctldHost=U2204T-E7P SlurmUser=root ProctrackType=proctrack/linuxproc ##解决sudo systemctl start slurmd失败,并且systemctl status slurmd中出现Failed to start slurm node daemon.时候,同时cat /var/log/slurm.log后看到cannot create proctrack context for proctrack/cgroup错误 # COMPUTE NODES NodeName=U2204T CPUs=16 State=UNKNOWN ##对应slurmd -C输出信息 PartitionName=U2204T Nodes=ALL Default=YES MaxTime=INFINITE State=UP # 创建 sudo touch /etc/slurm/slurm.conf sudo vim /etc/slurm/slurm.conf # 将网页生成的内容 copy 进来
配置文件备忘:
# slurm.conf file generated by configurator.html. # Put this file on all nodes of your cluster. # See the slurm.conf man page for more information. # ClusterName=ESXi7-P310S SlurmctldHost=U2204T-E7P #SlurmctldHost= # #DisableRootJobs=NO #EnforcePartLimits=NO #Epilog= #EpilogSlurmctld= #FirstJobId=1 #MaxJobId=67043328 #GresTypes= #GroupUpdateForce=0 #GroupUpdateTime=600 #JobFileAppend=0 #JobRequeue=1 #JobSubmitPlugins=lua #KillOnBadExit=0 #LaunchType=launch/slurm #Licenses=foo*4,bar #MailProg=/usr/bin/mail #MaxJobCount=10000 #MaxStepCount=40000 #MaxTasksPerNode=512 MpiDefault=none #MpiParams=ports=#-# #PluginDir= #PlugStackConfig= #PrivateData=jobs ProctrackType=proctrack/linuxproc #Prolog= #PrologFlags= #PrologSlurmctld= #PropagatePrioProcess=0 #PropagateResourceLimits= #PropagateResourceLimitsExcept= #RebootProgram= ReturnToService=1 SlurmctldPidFile=/run/slurmctld.pid SlurmctldPort=6817 SlurmdPidFile=/run/slurmd.pid SlurmdPort=6818 SlurmdSpoolDir=/var/lib/slurm/slurmd SlurmUser=root SlurmdUser=root #SrunEpilog= #SrunProlog= StateSaveLocation=/var/lib/slurm/slurmctld SwitchType=switch/none #TaskEpilog= TaskPlugin=task/affinity #TaskProlog= #TopologyPlugin=topology/tree #TmpFS=/tmp #TrackWCKey=no #TreeWidth= #UnkillableStepProgram= #UsePAM=0 # # # TIMERS #BatchStartTimeout=10 #CompleteWait=0 #EpilogMsgTime=2000 #GetEnvTimeout=2 #HealthCheckInterval=0 #HealthCheckProgram= InactiveLimit=0 KillWait=30 #MessageTimeout=10 #ResvOverRun=0 MinJobAge=300 #OverTimeLimit=0 SlurmctldTimeout=120 SlurmdTimeout=300 #UnkillableStepTimeout=60 #VSizeFactor=0 Waittime=0 # # # SCHEDULING #DefMemPerCPU=0 #MaxMemPerCPU=0 #SchedulerTimeSlice=30 SchedulerType=sched/backfill SelectType=select/cons_tres SelectTypeParameters=CR_Core # # # JOB PRIORITY #PriorityFlags= #PriorityType=priority/basic #PriorityDecayHalfLife= #PriorityCalcPeriod= #PriorityFavorSmall= #PriorityMaxAge= #PriorityUsageResetPeriod= #PriorityWeightAge= #PriorityWeightFairshare= #PriorityWeightJobSize= #PriorityWeightPartition= #PriorityWeightQOS= # # # LOGGING AND ACCOUNTING #AccountingStorageEnforce=0 #AccountingStorageHost= #AccountingStoragePass= #AccountingStoragePort= AccountingStorageType=accounting_storage/none #AccountingStorageUser= #AccountingStoreFlags= #JobCompHost= #JobCompLoc= #JobCompPass= #JobCompPort= JobCompType=jobcomp/none #JobCompUser= #JobContainerType=job_container/none JobAcctGatherFrequency=30 JobAcctGatherType=jobacct_gather/none SlurmctldDebug=info SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurm/slurmd.log #SlurmSchedLogFile= #SlurmSchedLogLevel= #DebugFlags= # # # POWER SAVE SUPPORT FOR IDLE NODES (optional) #SuspendProgram= #ResumeProgram= #SuspendTimeout= #ResumeTimeout= #ResumeRate= #SuspendExcNodes= #SuspendExcParts= #SuspendRate= #SuspendTime= # # # COMPUTE NODES NodeName=U2204T-E7P CPUs=16 State=UNKNOWN PartitionName=U2204T Nodes=U2204T-E7P Default=YES MaxTime=INFINITE State=UP
启动服务
// 启动 slurmd, 日志文件路径为 `/var/log/slurm/slurmd.log` # sudo systemctl start slurmd // 启动 slurmctld, 日志文件路径为 `/var/log/slurm/slurmctld.log` # sudo systemctl start slurmctld
slurm常用命令
sinfo 查看集群分区状态 squeue 查看作业队列 srun, salloc 交互式运行作业 sbatch 提交作业 scancel 取消作业 scontrol 查看和修改作业参数 sacct 查看已完成作业 sinfo #查看所有分区状态 sinfo -a #查看所有分区状态 sinfo -N #查看节点状态 sinfo -n node-name #查看指定节点状态 sinfo --help #查看sinfo的说明 squeue #查看运行中的作业列表 squeue -l #查看列表细节信息 squeue -j job-id #查看运行中作业信息 squeue -u username #查看user所有运行中的作业 scontrol show job JOBID #查看作业的详细信息 scontrol show node #查看所有节点详细信息 scontrol show node node-name #查看指定节点详细信息 scontrol show node | grep CPU #查看各节点cpu状态 scontrol show node node-name | grep CPU #查看指定节点cpu状态 以下所有参数在 srun, sbatch, salloc 中均可以使用。更多参数见srun --help, sbatch --help, salloc --help。 -c, --cpu-per-task=NCPUs #指定每个进程使用核数,不指定默认为1 -e, --error=error_filename #指定错误文件输出 -J, --job-name=JOBNAME #指定作业名称 --mail-type=END/FAIL/ALL #邮件提醒,可选:END,FAIL,ALL --mail-user=mail_address #通知邮箱地址 -n, --ntask=NTASKs #指定总进程数;不使用cpus-per-task,可理解为进程数即为核数 --ntasks-per-node=N #指定每个节点进程数/核数,使用-n参数后变为每个节点最多运行的进程数 -N, --nodes=N #指定节点数量 -o, --output=out_filename #指定输出文件输出 -p, --partion=debug #指定分区 -t, --time=dd-hh:mm:ss #作业最大运行时间 -w, --nodelist=node[1,2] #指定优先使用节点,不可与避免节点冲突 -x, --exclude=node[3,5-6] #指定避免使用节点,不可与优先节点冲突 --mem-per-cpu=MB #指定计算cpu最大占用内存大小
sbatch脚本示例
#!/bin/bash %指定运行shell #提交单个作业 #SBATCH --job-name=JOBNAME %指定作业名称 #SBATCH --partition=debug %指定分区 #SBATCH --nodes=2 %指定节点数量 #SBATCH --cpus-per-task=1 %指定每个进程使用核数,不指定默认为1 #SBATCH -n 32 %指定总进程数;不使用cpus-per-task,可理解为进程数即为核数 #SBATCH --ntasks-per-node=16 %指定每个节点进程数/核数,使用-n参数(优先级更高),变为每个 节点最多运行的任务数 #SBATCH --nodelist=node[3,4] %指定优先使用节点 #SBATCH --exclude=node[1,5-6] %指定避免使用节点 #SBATCH --time=dd-hh:mm:ss %作业最大运行时长,参考格式填写 #SBATCH --output=file_name %指定输出文件输出 #SBATCH --error=file_name %指定错误文件输出 #SBATCH --mail-type=ALL %邮件提醒,可选:END,FAIL,ALL #SBATCH --mail-user=address %通知邮箱地址 #SBATCH --gres=gpu:1 %每个节点上申请一块GPU卡 cd $SLURM_SUBMIT_DIR source /public/home/user/.bashrc #导入环境变量文件 mpirun -n 32 ./iPic3D ./inputfiles/test.inp #运行命令
slurm常见内置环境变量
变量名 含义 备注 SLURM_JOB_NAME 任务名 默认为提交时的脚本名, 可以用-J参数进行设置 SLURM_NNODES 分配的节点数 常用,与-N参数含义相同 SLURM_JOBID 分配的任务编号 SLURM_NTASKS 分配的task数 SLURM_TASKS_PER_NODE 每个节点分配的task数 SLURM_JOB_ID 分配的任务编号 SLURM_SUBMIT_DIR 提交作业时的工作目录 SLURM_NPROCS 加载的进程数 常用,与-n参数含义相同 SLURM_CPUS_ON_NODE 节点的CPU核心数 SLURM_JOB_NODELIST 任务的节点列表 常用,使用yhq命令查询到的节点列表 SLURM_JOB_CPUS_PER_NODE 每个节点的CPU核心数 SLURM_SUBMIT_HOST 提交任务的节点名 通常为某个登录节点,如ln2 SLURM_JOB_NUM_NODES 节点的任务数量 解决参数修改后节点状态为inval、drain的问题
- 虚拟机修改参数后启动节点状态会处于inval,首先更正/etc/slurm/slurm.conf文件信息
- 使用systemctl重启slurmd和slurmctld服务这是节点状态会变为drain
通过如下相关命令重置节点状态,需要在slurmuser对应账户下操作
scontrol show node # 查询节点信息
scontrol update NodeName=State=DOWN Reason=MAINT
scontrol update NodeName=State=RESUME
参考资料
- Ubuntu服务器安装配置slurm (Ubuntu 22.04 LTS)
- slurm安装遇到的问题以及解决办法
- Quick Start Administrator Guide
- slurm的内置环境变量
- Slurm 作业调度系统使用指南
- 北京大学高性能计算平台用户使用文档
- SLURM 节点状态总是drained问题
安装module软件模块化管理(以miniconda3为例)
- 安装
sudo apt-get install environment-modules
- 针对shell类型启用,以bash为例:
source /usr/share/modules/init/bash
- 登录root用户,新建
/public/modulefiles/
文件夹用以存放模块配置信息,新建/public/softwares/
文件夹用以存放软件,添加755权限:chmod -R 755 /public
以miniconda3为例,添加模块
1. 按上文方式安装,选择安装路径为/public/softwares/miniconda3 2. root用户下创建环境变量: # echo "export MODULEPATH=/public/modulefiles" >> /etc/profile # source ~/.bashrc 3. 编写模块文件 # cd /public/modulefiles # mkdir miniconda3 # vim miniconda3/23.5.2 写入如下配置信息: #%Module -*- tcl -*- ## This is a module to access something # 显示 module help 主要内容 proc ModulesHelp { } { puts stderr "This module sets up access to something" } # 添加环境变量 prepend-path PATH /public/softwares/miniconda3/bin prepend-path LD_LIBRARY_PATH /public/softwares/miniconda3/lib 4. module avail即可看到已成功添加 5. 在~/.bashrc文件中添加如下命令即可使用户登陆时默认加载某个模块 module add <模块名>
参考资料
安装v2raya
- 下载并解压v2ray-core到
/usr/local/v2ray-core
目录:unzip v2ray-linux-64.zip -d /usr/local/v2ray-core
启动v2ray服务:
# cd /usr/local/v2ray-core/systemd/system/ # systemctl start v2ray.service # systemctl enable v2ray.service #开机自启
- 下载v2raya安装包并安装:
apt install <installer_debian_x64_2.2.4.3.deb的绝对路径>
配置v2ray-core信息:
vi /etc/default/v2raya # 添加配置 V2RAYA_V2RAY_BIN=/usr/local/v2ray-core/v2ray V2RAYA_V2RAY_CONFDIR=/usr/local/v2ray-core V2RAYA_V2RAY_ASSETSDIR=/usr/local/v2ray-core
启动v2raya
systemctl start v2raya.service systemctl enable v2raya.service
- 后续配置访问http://localhost:2017,重置管理员使用
v2raya --reset-password
后台开启代理后,设置启用系统代理、开启IP转发即可开启全局代理,也可通过终端输入如下命令使用:
# 临时使用 export http_proxy=http://127.0.0.1:port export https_proxy=http://127.0.0.1:port unset http_proxy unset https_proxy # 配置git git config --global http.proxy 'http://127.0.0.1:port' git config --global https.proxy 'http://127.0.0.1:port' git config --global --list git config --global --unset xxx # 检查代理状态 curl cip.cc curl ip.gs
参考资料
直通Intel核显配置ffmpeg-qsv硬件加速
- TODO
参考资料
CentOS 7.9.2009
CentOS 7.9.2009虚拟机使用镜像CentOS-7-x86_64-DVD-2009.iso
安装,下载来源阿里云镜像,使用默认选项安装(安装最小化系统,勾选右侧所有附加项),安装后执行yum update
,并安装yum自带的python3.6.8。安装epel-release:yum install -y epel-release
,安装pip2:yum install python-pip
。
挂载Samba共享存储阵列
- 安装Samba客户端
sudo yum -y install samba-client cifs-utils
挂载smb共享,并配置自动挂载
[zly@C79T-E7P home]$ ls slurm zly [zly@C79T-E7P home]$ sudo mkdir RAID-P310S [zly@C79T-E7P home]$ sudo mount -t cifs -o username=raiduser //ip/raiduser /home/ RAID-P310S/ Password for raiduser@//192.168.2.222/raiduser: *** [zly@C79T-E7P home]$ echo '//192.168.2.222/raiduser /home/RAID-P310S/raiduser cifs credentials=/.raidp310ssambacreds 0 0' | sudo tee -a /etc/fstab [sudo] zly 的密码: //192.168.2.222/raiduser /home/RAID-P310S cifs credentials=/.raidp310ssambacreds 0 0 使挂载生效: sudo mount -a 其中凭据文件安装以下格式创建(**出于安全性考虑应该修改此文件的权限为400**) # vi /.sambacreds username=user password=password domain=WORKGROUP
- 不使用sudo无法写入共享目录,查阅资料据说可能是SElinux的问题,暂未解决,暂时搁置。
安装module软件模块化管理
- 安装
yum install environment-modules
- 针对shell类型启用,以bash为例:
source /usr/share/Modules/init/bash
- 登录root用户,新建
/public/modulefiles/
文件夹用以存放模块配置信息,新建/public/softwares/
文件夹用以存放软件,添加755权限:chmod -R 755 /public
导入环境变量:
# echo "export MODULEPATH=/public/modulefiles" >> /etc/profile # source ~/.bashrc
模块化安装python3
- 安装依赖包
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
- 安装wget
yum install wget
进入
/public/softwares/
目录后,下载python3.10.12并解压、编译、安装:# cd /public/softwares/ # wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz # tar -xzf Python-3.10.12.tgz # mkdir /public/softwares/Python3/ # mkdir /public/softwares/Python3/Python3.10.12 # cd Python-3.10.12 # ./configure --prefix=/public/softwares/Python3/Python3.10.12 # make && make install
新建配置文件:
# mkdir /public/modulefiles/Python3 # vi /public/modulefiles/Python3/3.10.12-gcc4.8.5 // 写入如下内容: #%Module1.0##################################################################### ## ## modules modulefile ## ## modulefiles/modules. Generated from modules.in by configure. ## proc ModulesHelp { } { global version prefix puts stderr "\tmodules - loads the modules software & application environment" puts stderr "\n\tThis adds $prefix/* to several of the" puts stderr "\tenvironment variables." puts stderr "\n\tVersion $version\n" } module-whatis "python 3.10.12" # for Tcl script use only prepend-path PATH /public/softwares/Python3/Python3.10.12/bin prepend-path LD_LIBRARY_PATH /public/softwares/Python3/Python3.10.12/lib prepend-path INCLUDE /public/softwares/Python3/Python3.10.12/include
- 编辑
~/.bashrc
,加入module add Python3/3.10.12-gcc4.8.5
为用户默认添加该模块
模块化安装miniconda3
参照上文内容安装:安装miniconda3 & 配置pip和安装module软件模块化管理(以miniconda3为例)
安装v2raya
- 下载并解压v2ray-core到
/usr/local/v2ray-core
目录 - 下载v2raya安装包并安装:
rpm -ivh installer_redhat_x64_2.2.4.3.rpm
配置v2ray-core信息:
vi /etc/default/v2raya # 添加配置 V2RAYA_V2RAY_BIN=/usr/local/v2ray-core/v2ray V2RAYA_V2RAY_CONFDIR=/usr/local/v2ray-core V2RAYA_V2RAY_ASSETSDIR=/usr/local/v2ray-core
root下启动v2raya
systemctl start v2raya.service systemctl enable v2raya.service
开防火墙端口
相关命令:firewall-cmd --zone=public --add-port=2017/tcp --permanent # 开放2017端口 firewall-cmd --zone=public --remove-port=2017/tcp --permanent #关闭2017端口 firewall-cmd --reload # 配置立即生效 firewall-cmd --zone=public --list-ports # 查看防火墙所有开放的端口 systemctl stop firewalld.service # 关闭防火墙 firewall-cmd --state # 查看防火墙状态 netstat -lnpt # 查看监听的端口 //centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
- 后续配置等请参考上文内容
模块化安装gcc7
以下均在root用户下,位于/public/softwares/build_and_install
文件夹中操作
- 安装依赖包
yum install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make zlib zlib-devel
下载gcc7.5.0源码并解压
# wget https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz # tar -zxvf gcc-7.5.0.tar.gz # cd gcc-7.5.0
安装依赖
# ./contrib/download_prerequisites # mkdir gcc-build-7.5 # cd gcc-build-7.5
- 新建安装路径
mkdir /public/softwares/gcc
- 生成Makefile
../configure --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --enable-gnu-indirect-function --with-tune=generic --disable-multilib --prefix=/public/softwares/gcc/gcc7.5.0
- 编译,根据核数自定义参数,较为耗时
make -j8
- 安装
make install
编辑modulefiles,写入如下内容:
#%Module -*- tcl -*- ## This is a module to access gcc-7.5.0 # 显示 module help 主要内容 proc ModulesHelp { } { puts stderr "This module sets up access to gcc-7.5.0" } # 设置环境变量 prepend-path PATH {/public/softwares/gcc/gcc7.5.0/bin}; prepend-path INCLUDE {/public/softwares/gcc/gcc7.5.0/include}; prepend-path CPATH {/public/softwares/gcc/gcc7.5.0/include}; prepend-path LD_LIBRARY_PATH {/public/softwares/gcc/gcc7.5.0/lib}; prepend-path LD_LIBRARY_PATH {/public/softwares/gcc/gcc7.5.0/lib64}; prepend-path LD_LIBRARY_PATH {/public/softwares/gcc/gcc7.5.0/libexec}; prepend-path MANPATH {/public/softwares/gcc/gcc7.5.0/share/man};
参考资料
编译安装Slurm作业调度系统(单台机器)
以下为root用户在root目录下开始的操作
下载源码、解压、编译、安装
# wget https://download.schedmd.com/slurm/slurm-23.11-latest.tar.bz2 # tar -jxvf slurm-23.11-latest.tar.bz2 # cd slurm-23.11.0/ # ./configure #默认安装到/usr/local/sbin/,安装不同版本请注意文件冲突导致的插件版本冲突问题 # make -j8 #注意需要python3 # make install
- 复制系统服务
cp etc/{slurmctld.service,slurmdbd.service,slurmd.service} /usr/lib/systemd/system
参考上文内容编辑并写入配置文件,也可通过在线网页生成
vi /usr/local/etc/slurm.conf
配置备忘:# slurm.conf file generated by configurator.html. # Put this file on all nodes of your cluster. # See the slurm.conf man page for more information. # ClusterName=ESXi7-P310S SlurmctldHost=C79T-E7P #SlurmctldHost= # #DisableRootJobs=NO #EnforcePartLimits=NO #Epilog= #EpilogSlurmctld= #FirstJobId=1 #MaxJobId=67043328 #GresTypes= #GroupUpdateForce=0 #GroupUpdateTime=600 #JobFileAppend=0 #JobRequeue=1 #JobSubmitPlugins=lua #KillOnBadExit=0 #LaunchType=launch/slurm #Licenses=foo*4,bar #MailProg=/bin/mail #MaxJobCount=10000 #MaxStepCount=40000 #MaxTasksPerNode=512 #MpiDefault= #MpiParams=ports=#-# #PluginDir= #PlugStackConfig= #PrivateData=jobs ProctrackType=proctrack/cgroup #Prolog= #PrologFlags= #PrologSlurmctld= #PropagatePrioProcess=0 #PropagateResourceLimits= #PropagateResourceLimitsExcept= #RebootProgram= ReturnToService=1 SlurmctldPidFile=/var/run/slurmctld.pid SlurmctldPort=6817 SlurmdPidFile=/var/run/slurmd.pid SlurmdPort=6818 SlurmdSpoolDir=/var/spool/slurmd SlurmUser=slurm #SlurmdUser=root #SrunEpilog= #SrunProlog= StateSaveLocation=/var/spool/slurmctld #SwitchType= #TaskEpilog= TaskPlugin=task/affinity,task/cgroup #TaskProlog= #TopologyPlugin=topology/tree #TmpFS=/tmp #TrackWCKey=no #TreeWidth= #UnkillableStepProgram= #UsePAM=0 # # # TIMERS #BatchStartTimeout=10 #CompleteWait=0 #EpilogMsgTime=2000 #GetEnvTimeout=2 #HealthCheckInterval=0 #HealthCheckProgram= InactiveLimit=0 KillWait=30 #MessageTimeout=10 #ResvOverRun=0 MinJobAge=300 #OverTimeLimit=0 SlurmctldTimeout=120 SlurmdTimeout=300 #UnkillableStepTimeout=60 #VSizeFactor=0 Waittime=0 # # # SCHEDULING #DefMemPerCPU=0 #MaxMemPerCPU=0 #SchedulerTimeSlice=30 SchedulerType=sched/backfill SelectType=select/cons_tres # # # JOB PRIORITY #PriorityFlags= #PriorityType=priority/multifactor #PriorityDecayHalfLife= #PriorityCalcPeriod= #PriorityFavorSmall= #PriorityMaxAge= #PriorityUsageResetPeriod= #PriorityWeightAge= #PriorityWeightFairshare= #PriorityWeightJobSize= #PriorityWeightPartition= #PriorityWeightQOS= # # # LOGGING AND ACCOUNTING #AccountingStorageEnforce=0 #AccountingStorageHost= #AccountingStoragePass= #AccountingStoragePort= #AccountingStorageType= #AccountingStorageUser= #AccountingStoreFlags= #JobCompHost= #JobCompLoc= #JobCompParams= #JobCompPass= #JobCompPort= JobCompType=jobcomp/none #JobCompUser= #JobContainerType= JobAcctGatherFrequency=30 #JobAcctGatherType= SlurmctldDebug=info SlurmctldLogFile=/var/log/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurmd.log #SlurmSchedLogFile= #SlurmSchedLogLevel= #DebugFlags= # # # POWER SAVE SUPPORT FOR IDLE NODES (optional) #SuspendProgram= #ResumeProgram= #SuspendTimeout= #ResumeTimeout= #ResumeRate= #SuspendExcNodes= #SuspendExcParts= #SuspendRate= #SuspendTime= # # # COMPUTE NODES NodeName=C79T-E7P CPUs=16 State=UNKNOWN PartitionName=C79T-P4 Nodes=ALL Default=YES MaxTime=INFINITE State=UP
新建所需目录
# mkdir /var/log/slurm/ # mkdir /var/lib/slurm/ # mkdir /var/lib/slurm/slurmd/ # mkdir # mkdir /var/spool/slurmd # mkdir /var/spool/slurmctld
新建用户并添加权限
# useradd slurm # passwd slurm # chown -R slurm.slurm /var/log/slurm/ # chown -R slurm.slurm /var/lib/slurm/ # chown -R slurm.slurm /var/run # chown -R slurm.slurm /var/spool # chown slurm:slurm /usr/local/etc/slurm.conf
源码安装munge
# yum install -y rng-tools bzip2-devel openssl-devel zlib-devel # wget https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz # rpmbuild -tb --without verify munge-0.5.14.tar.xz # cd /root/rpmbuild/RPMS/x86_64 # rpm -ivh munge-0.5.14-1.el7.x86_64.rpm munge-devel-0.5.14-1.el7.x86_64.rpm munge-libs-0.5.14-1.el7.x86_64.rpm
配置munge
# /usr/sbin/mungekey # chown munge:munge /etc/munge # chown munge:munge /var/run/munge # chown munge:munge /var/lib/munge # chown munge:munge /var/log/munge # chown munge:munge /etc/munge/munge.key
启用munge & rngd
# systemctl daemon-reload # systemctl start munge # systemctl enable munge # systemctl start rngd # systemctl enable rngd # rngd -r /dev/urandom # 为系统新增熵池
启动slurm(可能遇到一些文件夹创建与读写权限问题,根据报错逐一解决即可)
# systemctl start slurmd # systemctl enable slurmd # systemctl start slurmctld # systemctl enable slurmctld
解决参数修改后节点状态为inval、drain的问题
- 虚拟机修改参数后启动节点状态会处于inval,首先更正/etc/slurm/slurm.conf文件信息
- 使用systemctl重启slurmd和slurmctld服务这是节点状态会变为drain
通过如下相关命令重置节点状态,需要在slurmuser对应账户下操作,此处应为slurm用户
scontrol show node # 查询节点信息
scontrol update NodeName=State=DOWN Reason=MAINT
scontrol update NodeName=State=RESUME
参考资料
GPU驱动安装
仅安装基本驱动,CUDA和CUDNN由CONDA管理,具体安装步骤参考上文Tesla P4显卡直通
模块化安装CUDA
下面以CUDA11.8为例,CUDA所有版本可前往CUDA Toolkit Archive查看。
- 下载安装包:
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm
安装CUDA:
# rpm -i cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm # yum clean all # yum -y install nvidia-driver-latest-dkms # yum -y install cuda
- 安装完成后,可以在
/usr/local
找到cuda-11.8
文件夹,将其移动到/public/softwares/CUDA
:mv /usr/local/cuda-11.8 /public/softwares/CUDA
mkdir /public/modulefiles/CUDA/
,vim /public/modulefiles/CUDA/11.8
新建modulefile写入如下内容:#%Module1.0##################################################################### ## ## modules modulefile ## ## modulefiles/modules. Generated from modules.in by configure. ## proc ModulesHelp { } { global version prefix puts stderr "\tmodules - loads the modules software & application environment" puts stderr "\n\tThis adds $prefix/* to several of the" puts stderr "\tenvironment variables." puts stderr "\n\tVersion $version\n" } module-whatis "cuda 11.8" # for Tcl script use only prepend-path PATH /public/softwares/CUDA/cuda-11.8/bin prepend-path LD_LIBRARY_PATH /public/softwares/CUDA/cuda-11.8/lib64 #module use
CentOS 6.6
CentOS 6.6虚拟机使用镜像CentOS-6.6-x86_64-minimal.iso
安装,下载来源官方镜像,安装中选择自动开启网卡进行联网,否则可能需要编辑/etc/sysconfig/network-scripts/ifcfg-eth0
加service network restart
文件手动开启。
更换可用源
由于CentOS6已经停止维护,许多软件源都已不能使用,2023.11.26测试腾讯源仍能使用,下面是换源步骤:
- 备份系统旧源配置文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 下载腾讯源,由于没有wget,需要按照如下命令和路径手动下载上传
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
- 把http替换https
sed -i 's#http#https#g' /etc/yum.repos.d/CentOS-Base.repo
参考资料
安装vibauthor tool(VMware驱动包封装)
安装CentOS6.6的目的本是想用旧环境使用VMware已经删除的vib驱动包封装工具vibauthor tool,安装完后发现找不到所需的驱动文件,暂时搁置,以下简单记录vibauthor tool安装过程:
安装依赖
yum install glibc.i686 yum install -y python-lxml
下载工具安装包并安装
wget https://download3.vmware.com/software/vmw-tools/vibauthor/vmware-esx-vib-author-5.0.0-0.0.847598.i386.rpm rpm -i vmware-esx-vib-author-5.0.0-0.0.847598.i386.rpm
- 生成驱动命令
vibauthor -C -t yourdir/ -v MyRule.vib -O MyRule.zip -f
安装相关命令
esxcli software vib list esxcli software vib install -v /MyRule.vib --no-sig-check esxcli software vib remove --vibname=MyRule
参考资料
Windows Server 2022 & Windows 10
ESXi7下安装Windows系统直通SATA控制器后无法启用,弃用Windows作为文件存储服务器,改用Ubuntu 22.04.1 Desktop。
Windows系统虚拟机仅用作测试等临时用途,配置简单,不再赘述。
实用工具
Windows 虚拟机收藏
全家福
MS-DOS 6.22等软盘安装相关问题备忘
- 零散的安装文件提取自安装软盘,每个文件夹对应一个软盘镜像,需要通过UltraISO等软件恢复,同时还需要一个空磁盘镜像
UNINSTALL 1
来存放缓存 - System Disk #1需要遵循系统引导原理制备引导扇区部分文件,DOS系统引导时先将第一个扇区的内容载入内存执行,如果可引导,就载入后面头三个扇区的IO.SYS文件进入内存,将执行权交给IO.SYS等,因此引导扇区要求根目录下头两个文件必须是IO.SYS和MSDOS.SYS,IO.SYS必须是fat目录表保存的第一个文件,并且IO.SYS+MSDOS.SYS必须是连续的,所以要按照以下步骤制备
DISK 1
(按照参考资料说明,需要间隔6个空格才能识别):
- 新建软盘镜像,大小设置为1.44MB,引导扇区选择MSDOS 6.22,重命名为
DISK 1
- 先将IO.SYS添加到软盘根目录中,设置为引导文件,然后添加MSDOS.SYS,再添加COMMAND.COM,先保存一次镜像文件
- 将剩下的所有文件添加到软盘根目录,保存镜像即可
- 无需引导的软盘镜像可以一次性全部添加
- ESXi7虚拟机只有再挂起和关机下可以切换软盘镜像,系统安装时可通过挂起切换解决,而进入系统后挂起切换无法在系统中识别,因此只能通过拷贝到硬盘-关机切换如此循环,在硬盘中存贮整个安装文件来解决软件安装问题(如汉化、Windows3.2 GUI安装),或者添加光盘驱动支持挂载光盘来解决问题
- MS-DOS 6.22不支持光驱,可如下步骤安装光盘驱动:
- 从Windows ME 启动盘等来源提取出OAKCDROM.SYS文件拷贝到C:\DOS\
COPY A:\OAKCDROM.SYS C:\DOS\
在 C:\CONFIG.SYS 的末尾加上如下两行(可使用EDIT编辑):
LASTDRIVE=Z DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:MSCD001
在 AUTOEXEC.BAT 的末尾加上一行:
LH MSCDEX.EXE /D:MSCD001 /L:X
- 重启系统即可挂载光盘,光盘默认在X盘
参考资料
- 在虚拟机上安装 MS-DOS 6.22 简体中文版
- 虚拟机VMware下MS-DOS7.1系统安装、局域网安装教程
- http://www.kompx.com/en/network-setup-in-dos-microsoft-network-client.htm
- dos吧挂载光驱帖子
Windows95、98等系统引导问题
- 网上下载的Windows95、98等早期系统文件可能也是提取自光盘的零散安装文件,直接转换为iso无法引导,可在网上下载相关bif引导文件制作可引导镜像,或者通过MS-DOS升级安装
参考资料
MacOS
esxi-unlocker解锁MacOS虚拟机支持
- VMware虚拟机产品支持MacOS,但是在非Mac机器上安装时,Mac虚拟机功能默认关闭上锁,创建MacOS虚拟机开机时会陷入重启循环,需要通过解锁工具解决。
- ESXi6.7-7.0.2u2据此文章介绍可以利用基于python的shanyungyang/esxi-unlocker项目(存档:THDCOM/ESXiUnlocker)进行解锁,但实测在ESXi7.0.0-15843807上无法解锁成功,运行脚本后重启仍然处于上锁状态。
转而尝试由C++编译过的最新v4版本DrDonk/esxi-unlocker项目,但是实测在ESXi7.0.0-15843807上运行二进制解锁程序仍然会出现语法错误保存,尝试更新新版本ESXi,选择了升级ESXi-7.0U3o-22348816,再尝试解锁运行成功。
解锁过程记录:[root@ZLY-P310S:/vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6] ls CHANGELOG.md TROUBLESHOOTING.md checksmc patchsmc unlock LICENSE apple.v00 checkvmkctl patchvmkctl README.md check dumpsmc relock [root@ZLY-P310S:/vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6] ./check VMware ESXi Unlocker 4.0.5 ========================== Checking unlocker... Current version of ESXi: VMware ESXi 7.0.3 build-22348816 System has not been patched [root@ZLY-P310S:/vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6] ./unlock VMware ESXi Unlocker 4.0.5 ========================== Installing unlocker... PatchSMC 4.0.5 ============== Filename: ./tmp/bin/vmx appleSMCTableV0 (smc.version = "0") File Offset : 0x012b84e0 Keys Offset : 0x012ba500 Private Key #: 0x00f2/0242 Public Keys #: 0x00f0/0240 OSK0 Key Before: 0x012bc880 OSK0 032 ch8* 0x80 0x003877b0 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x012bc880 OSK0 032 ch8* 0x80 0x00387740 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x012bc8c8 OSK1 032 ch8* 0x80 0x003877b0 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x012bc8c8 OSK1 032 ch8* 0x80 0x00387740 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 appleSMCTableV1 (smc.version = "1") File Offset : 0x012bc910 Keys Offset : 0x012be940 Private Key #: 0x01b4/0436 Public Keys #: 0x01b0/0432 OSK0 Key Before: 0x012c4350 OSK0 032 ch8* 0x90 0x003877b0 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x012c4350 OSK0 032 ch8* 0x90 0x00387740 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x012c4398 OSK1 032 ch8* 0x90 0x003877b0 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x012c4398 OSK1 032 ch8* 0x90 0x00387740 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 Modifying ELF RELA records from 0x003877b0 -> 0x00387740 Relocation modified at: 0x0016caf8 Relocation modified at: 0x0016cb10 Relocation modified at: 0x0016f3f0 Relocation modified at: 0x0016f408 PatchSMC 4.0.5 ============== Filename: ./tmp/bin/vmx-debug appleSMCTableV0 (smc.version = "0") File Offset : 0x0170b400 Keys Offset : 0x0170d420 Private Key #: 0x00f2/0242 Public Keys #: 0x00f0/0240 OSK0 Key Before: 0x0170f7a0 OSK0 032 ch8* 0x80 0x003eaee0 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x0170f7a0 OSK0 032 ch8* 0x80 0x003ead30 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x0170f7e8 OSK1 032 ch8* 0x80 0x003eaee0 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x0170f7e8 OSK1 032 ch8* 0x80 0x003ead30 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 appleSMCTableV1 (smc.version = "1") File Offset : 0x0170f830 Keys Offset : 0x01711860 Private Key #: 0x01b4/0436 Public Keys #: 0x01b0/0432 OSK0 Key Before: 0x01717270 OSK0 032 ch8* 0x90 0x003eaee0 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x01717270 OSK0 032 ch8* 0x90 0x003ead30 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x017172b8 OSK1 032 ch8* 0x90 0x003eaee0 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x017172b8 OSK1 032 ch8* 0x90 0x003ead30 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 Modifying ELF RELA records from 0x003eaee0 -> 0x003ead30 Relocation modified at: 0x0016f8e8 Relocation modified at: 0x0016f900 Relocation modified at: 0x001721e0 Relocation modified at: 0x001721f8 PatchSMC 4.0.5 ============== Filename: ./tmp/bin/vmx-stats appleSMCTableV0 (smc.version = "0") File Offset : 0x01382c20 Keys Offset : 0x01384c40 Private Key #: 0x00f2/0242 Public Keys #: 0x00f0/0240 OSK0 Key Before: 0x01386fc0 OSK0 032 ch8* 0x80 0x003b6b70 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x01386fc0 OSK0 032 ch8* 0x80 0x003b6b00 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x01387008 OSK1 032 ch8* 0x80 0x003b6b70 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x01387008 OSK1 032 ch8* 0x80 0x003b6b00 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 appleSMCTableV1 (smc.version = "1") File Offset : 0x01387050 Keys Offset : 0x01389080 Private Key #: 0x01b4/0436 Public Keys #: 0x01b0/0432 OSK0 Key Before: 0x0138ea90 OSK0 032 ch8* 0x90 0x003b6b70 0000000000000000000000000000000000000000000000000000000000000000 OSK0 Key After: 0x0138ea90 OSK0 032 ch8* 0x90 0x003b6b00 6F757268617264776F726B62797468657365776F72647367756172646564706C OSK1 Key Before: 0x0138ead8 OSK1 032 ch8* 0x90 0x003b6b70 0000000000000000000000000000000000000000000000000000000000000000 OSK1 Key After: 0x0138ead8 OSK1 032 ch8* 0x90 0x003b6b00 65617365646F6E74737465616C2863294170706C65436F6D7075746572496E63 Modifying ELF RELA records from 0x003b6b70 -> 0x003b6b00 Relocation modified at: 0x001718c0 Relocation modified at: 0x001718d8 Relocation modified at: 0x001741b8 Relocation modified at: 0x001741d0 PatchVMKCTL 4.0.5 ================= Filename: ./tmp/lib64/libvmkctl.so Patch Status: False smcPresent Patched Building apple.v00 VMTAR file... Cleaning up tmp files... Adding to bootbank... Acquiring lock /tmp/bootbank.lck Copying apple.v00 to /bootbank/apple.v00 Editing /bootbank/boot.cfg to add module apple.v00 Reboot the ESXi server to install unlocker (y/N)? y Rebooting the ESXi Server //重启系统 [root@ZLY-P310S:~] cd /vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6 [root@ZLY-P310S:/vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6] ls CHANGELOG.md TROUBLESHOOTING.md checksmc patchsmc unlock LICENSE apple.v00 checkvmkctl patchvmkctl README.md check dumpsmc relock [root@ZLY-P310S:/vmfs/volumes/63110b02-f2b5d57e-93cb-30bf2106027b/Files/esxi-unlocker-4.0.6] ./check VMware ESXi Unlocker 4.0.5 ========================== Checking unlocker... Current version of ESXi: VMware ESXi 7.0.3 build-22348816 Patch built for ESXi: VMware ESXi 7.0.3 build-22348816 Checking VMTAR loaded... apple.v00 loaded Checking vmx vSMC status... /bin/vmx /bin/vmx-debug /bin/vmx-stats vmx patched Checking smcPresent status... smcPresent = true
MacOS Catalina 10.15.7
解锁成功后即可像安装Windows一样安装MacOS虚拟机了,具体过程不多赘述,注意先使用磁盘工具抹除磁盘为APFS分区进行安装。
本站所有原创文章版权所有,禁止转载,欢迎转发文章链接,参考请标明出处并连接到本站相应页面。所有注明的转载内容版权归原作者所有,如不慎侵权请原作者联系本站删除。