系统拓扑

硬件-系统结构拓扑

p310s .webp

硬件部分

硬件配置

  • 主板芯片组 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散热改装方案:

    1. 原装被动散热去盖板
    2. MSi GTX 1050Ti 刀卡风扇
    3. 2-3线风扇温控调速模块
    4. 相关接线端子及主板小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
  • 网卡:

    • 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)
  • 电源: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,保留驱动安装)

  1. 将主机进入维护模式
    esxcli system maintenanceMode set --enable true
  2. 配置直通类型

     # esxcli graphics host set --default-type SharedPassthru
     # esxcli graphics host get
    Default Graphics Type: SharedPassthru
    Shared Passthru Assignment Policy: Performance
  3. 下载驱动,可前往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。
  4. 上传驱动文件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:
  5. 退出维护模式
    esxcli system maintenanceMode set --enable false
  6. 检查安装情况

     # 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:

参考资料

参考资料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,下面对当时的显卡直通操作做简单记录。

  1. 首先启用ssh并连接到ESXi,输入esxcli system settings kernel set -s vga -v FALSE以关闭ESXi显卡调用,恢复使用esxcli system settings kernel get -s vga -v TRUE
  2. 使用lspci -v查找显卡设备ID。T600显卡,10de代表NVIDIA,1fb1为显卡设备硬件ID,10fa为显卡音频控制器硬件ID。
  3. 使用编辑器修改直通map信息,编辑/etc/vmware/passthru.map文件,添加:

     # Intel VGA
     8086 9bc8 d3d0    default # 当时使用的QSRL不显测试U核显 
     # NVIDIA VGA
     10de 1fb1 d3d0    default   
     10de 10fa d3d0    default
  4. 保存后重启ESXi,此时BIOS引导完成后不再进入黑黄系统界面。
  5. 编辑虚拟机,确保取消CPU虚拟化、内存预留所有客户及内存,添加PCI设备,在“虚拟机选项-高级-配置参数-编辑配置”添加键:hypervisor.cpuid.v0,值:FALSE,保存后启动虚拟机安装驱动即可。
  6. 此时如果单单重启虚拟机,显卡会报错43,需要开启自启动后,重启ESXi使虚拟机自动启动即可直通显卡。禁用VMware SVGA虚拟显卡后即可通过显卡直接输出画面到显示屏。

NVIDIA® TESLA® P4

  1. 在后台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.
  2. 为虚拟机添加其他设备-PCI设备-Tesla P4,并在内存设置中勾选“预留所有客户机内存 (全部锁定)”。
  3. 启动系统,检查GPU识别情况

     # lspci|grep -i nvidia
     13:00.0 3D controller: NVIDIA Corporation GP104GL [Tesla P4] (rev a1)
  4. 检查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
  5. Nouveau在运行,需要禁用

     # vi /lib/modprobe.d/dist-blacklist.conf
     添加如下内容:
     # For Tesla P4 ADD 20231125
     blacklist nouveau
     options nouveau modeset=0
  6. 给当前镜像做备份后建立新的镜像

     # mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
     # dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
  7. 重启后检查Nouveau是否运行,无输出即成功禁用

     # lsmod |grep nouveau
  8. 前往官网下载并安装驱动,选择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                                                 |
     +-----------------------------------------------------------------------------+
  9. 其他CUDA版本和CUDNN采用模块化安装或conda安装,参考下文。

参考资料

NVIDIA® TESLA® P100

  1. 在后台PCI设备管理中选择Tesla P100,点击切换直通
  2. 直通还需要在对应虚拟机高级配置中添加如下两项:

    pciPassthru.use64bitMMIO = "TRUE"
    pciPassthru.64bitMMIOSizeGB = "64"

    否则可能出现模块Device Power On打开电源失败的问题

失败的尝试
  1. 出现“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)"
  2. 驱动需要安装zlib依赖yum install zlib-devel
  3. 其他:

    yum -y install epel-release
    yum -y install dkms
    yum install vulkan
    yum install xorg-x11-server-devel
  4. 安装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   

保存重启后即可在硬件管理中选择切换直通。

虚拟机环境配置

环境使用规范

  1. 专用软件、同一软件多版本,均使用module安装。
  2. 一项独立工作新建独立的conda环境或新建一般用户。
  3. 任务优先采用slurm提交。

应用软件环境配置

  可参考本站文章:

配置总方针:默认设置优先;软链接优化路径优先;SSD以目录划分优先;
2023-10-30
0
【环境配置】常用计算机软件环境在Windows和Linux操作系统下的配置和操作

给虚拟机添加磁盘

  1. esxi中增加磁盘容量或添加新磁盘后,进入系统,使用fdisk -l查看磁盘情况
  2. 使用fdisk选择相应设备新建分区
  3. partprobe 执行
  4. mkfs.xfs /dev/sda格式化
  5. 同一磁盘卷扩容

     [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

  6. 不同磁盘卷扩容

    (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存储盘直通系统安装

  1. 虚拟机设置中选择客户机操作系统Ubuntu(64位)安装系统,预留所有客户机内存,删除虚拟硬盘,添加直通固态和机械的PCI控制器。
  2. 安装镜像使用来自Ubuntu官网ubuntu-22.04.1-desktop-amd64.iso,选择最小安装,取消其他选项勾选,选择固态硬盘进行系统安装。
  3. 安装完成后移除安装镜像,更改虚拟机引导为EFI即可开机进入系统。

配置SSH和XRDP远程桌面

  1. 执行update
  2. 安装并启用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
  3. 安装并启用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目录开始安装管理

  1. 磁盘清除原有分区数据,以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
  2. 安装mdadm
    apt install mdadm
  3. 识别系统磁盘

     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

  4. 创建由/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>
  5. 创建并挂载文件系统,阵列挂载在/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
  6. 保存阵列布局,设置自动启用

     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
  7. 阵列更多信息可查阅如下参考资料

参考资料

  • 记一次采坑经历, 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用户进行配置

  1. 安装samba

    root@U2204D-NAS-E7P:~# apt -y install samba
  2. 在阵列挂载点/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
  3. 重启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即可访问共享文件夹
  • 其他系统请参考下文对应部分介绍
  1. 安装samba客户端
    apt -y install smbclient cifs-utils
  2. 临时访问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
  3. 挂载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等多种语言

  1. 下载安装脚本
    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
  2. 执行安装
    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!
  3. 初始化
    echo $SHELL可以查看shell类型,执行conda init后重启shell,再次登录即可看到默认进入base环境。
  4. 添加清华源
    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查看是否添加成功。

  5. 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/
  6. 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作业调度系统(单台机器)

  1. 安装
    sudo apt install slurm-wlm slurm-wlm-doc slurmd slurmctld -y
  2. 查看信息

    (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
  3. 生成配置文件

    找到配置生成工具目录:
    (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
    
  4. 启动服务

     // 启动 slurmd, 日志文件路径为 `/var/log/slurm/slurmd.log`
     # sudo systemctl start slurmd
     // 启动 slurmctld, 日志文件路径为 `/var/log/slurm/slurmctld.log`
     # sudo systemctl start slurmctld
  5. 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最大占用内存大小
  6. 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 #运行命令
  7. 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节点的任务数量
  8. 解决参数修改后节点状态为inval、drain的问题

  9. 虚拟机修改参数后启动节点状态会处于inval,首先更正/etc/slurm/slurm.conf文件信息
  10. 使用systemctl重启slurmd和slurmctld服务这是节点状态会变为drain
  11. 通过如下相关命令重置节点状态,需要在slurmuser对应账户下操作
    scontrol show node # 查询节点信息
    scontrol update NodeName= State=DOWN Reason=MAINT
    scontrol update NodeName= State=RESUME

参考资料

安装module软件模块化管理(以miniconda3为例)

  1. 安装
    sudo apt-get install environment-modules
  2. 针对shell类型启用,以bash为例:
    source /usr/share/modules/init/bash
  3. 登录root用户,新建/public/modulefiles/文件夹用以存放模块配置信息,新建/public/softwares/文件夹用以存放软件,添加755权限:chmod -R 755 /public
  4. 以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

  1. 下载并解压v2ray-core到/usr/local/v2ray-core目录:
    unzip v2ray-linux-64.zip -d /usr/local/v2ray-core
  2. 启动v2ray服务:

     # cd /usr/local/v2ray-core/systemd/system/
     # systemctl start v2ray.service
     # systemctl enable v2ray.service  #开机自启
  3. 下载v2raya安装包并安装:
    apt install <installer_debian_x64_2.2.4.3.deb的绝对路径>
  4. 配置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
  5. 启动v2raya

    systemctl start v2raya.service
    systemctl enable v2raya.service
  6. 后续配置访问http://localhost:2017,重置管理员使用v2raya --reset-password
  7. 后台开启代理后,设置启用系统代理、开启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共享存储阵列

  1. 安装Samba客户端
    sudo yum -y install samba-client cifs-utils
  2. 挂载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
  3. 不使用sudo无法写入共享目录,查阅资料据说可能是SElinux的问题,暂未解决,暂时搁置。

安装module软件模块化管理

  1. 安装
    yum install environment-modules
  2. 针对shell类型启用,以bash为例:
    source /usr/share/Modules/init/bash
  3. 登录root用户,新建/public/modulefiles/文件夹用以存放模块配置信息,新建/public/softwares/文件夹用以存放软件,添加755权限:chmod -R 755 /public
  4. 导入环境变量:

     # echo "export MODULEPATH=/public/modulefiles" >> /etc/profile
     # source ~/.bashrc

模块化安装python3

  1. 安装依赖包
    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
  2. 安装wget
    yum install wget
  3. 进入/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
  4. 新建配置文件:

    # 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
  5. 编辑~/.bashrc,加入module add Python3/3.10.12-gcc4.8.5为用户默认添加该模块

模块化安装miniconda3

参照上文内容安装:安装miniconda3 & 配置pip安装module软件模块化管理(以miniconda3为例)

安装v2raya

  1. 下载并解压v2ray-core到/usr/local/v2ray-core目录
  2. 下载v2raya安装包并安装:
    rpm -ivh installer_redhat_x64_2.2.4.3.rpm
  3. 配置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
  4. root下启动v2raya

    systemctl start v2raya.service
    systemctl enable v2raya.service
  5. 开防火墙端口
    相关命令:

    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
  6. 后续配置等请参考上文内容

模块化安装gcc7

以下均在root用户下,位于/public/softwares/build_and_install文件夹中操作

  1. 安装依赖包
    yum install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make zlib zlib-devel
  2. 下载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
  3. 安装依赖

     # ./contrib/download_prerequisites
     # mkdir gcc-build-7.5
     # cd gcc-build-7.5
  4. 新建安装路径
    mkdir /public/softwares/gcc
  5. 生成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
  6. 编译,根据核数自定义参数,较为耗时
    make -j8
  7. 安装
    make install
  8. 编辑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目录下开始的操作

  1. 下载源码、解压、编译、安装

     # 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
  2. 复制系统服务
    cp etc/{slurmctld.service,slurmdbd.service,slurmd.service} /usr/lib/systemd/system
  3. 参考上文内容编辑并写入配置文件,也可通过在线网页生成
    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
    
  4. 新建所需目录

     # mkdir /var/log/slurm/
     # mkdir /var/lib/slurm/
     # mkdir /var/lib/slurm/slurmd/
     # mkdir 
     # mkdir /var/spool/slurmd
     # mkdir /var/spool/slurmctld
  5. 新建用户并添加权限

     # 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
  6. 源码安装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
  7. 配置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
  8. 启用munge & rngd

     # systemctl daemon-reload
     # systemctl start munge
     # systemctl enable munge
     # systemctl start rngd
     # systemctl enable rngd
    
     # rngd -r /dev/urandom   # 为系统新增熵池
  9. 启动slurm(可能遇到一些文件夹创建与读写权限问题,根据报错逐一解决即可)

     # systemctl start slurmd
     # systemctl enable slurmd
     # systemctl start slurmctld
     # systemctl enable slurmctld
  10. 解决参数修改后节点状态为inval、drain的问题

  11. 虚拟机修改参数后启动节点状态会处于inval,首先更正/etc/slurm/slurm.conf文件信息
  12. 使用systemctl重启slurmd和slurmctld服务这是节点状态会变为drain
  13. 通过如下相关命令重置节点状态,需要在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查看。

  1. 下载安装包: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
  2. 安装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
  3. 安装完成后,可以在/usr/local找到cuda-11.8文件夹,将其移动到/public/softwares/CUDA
    mv /usr/local/cuda-11.8 /public/softwares/CUDA
  4. 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-eth0service network restart文件手动开启。

更换可用源

  由于CentOS6已经停止维护,许多软件源都已不能使用,2023.11.26测试腾讯源仍能使用,下面是换源步骤:

  1. 备份系统旧源配置文件
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  2. 下载腾讯源,由于没有wget,需要按照如下命令和路径手动下载上传
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
  3. 把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安装过程:

  1. 安装依赖

    yum install glibc.i686
    yum install -y python-lxml
  2. 下载工具安装包并安装

    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
  3. 生成驱动命令
    vibauthor -C -t yourdir/ -v MyRule.vib -O MyRule.zip -f
  4. 安装相关命令

    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激活项目

Windows 虚拟机收藏

全家福

WINFAMILY1.png
WINFAMILY2.png

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. 新建软盘镜像,大小设置为1.44MB,引导扇区选择MSDOS 6.22,重命名为DISK 1
  2. 先将IO.SYS添加到软盘根目录中,设置为引导文件,然后添加MSDOS.SYS,再添加COMMAND.COM,先保存一次镜像文件
  3. 将剩下的所有文件添加到软盘根目录,保存镜像即可
  • 无需引导的软盘镜像可以一次性全部添加
  • ESXi7虚拟机只有再挂起和关机下可以切换软盘镜像,系统安装时可通过挂起切换解决,而进入系统后挂起切换无法在系统中识别,因此只能通过拷贝到硬盘-关机切换如此循环,在硬盘中存贮整个安装文件来解决软件安装问题(如汉化、Windows3.2 GUI安装),或者添加光盘驱动支持挂载光盘来解决问题
  • MS-DOS 6.22不支持光驱,可如下步骤安装光盘驱动:
  1. 从Windows ME 启动盘等来源提取出OAKCDROM.SYS文件拷贝到C:\DOS\
    COPY A:\OAKCDROM.SYS C:\DOS\
  2. 在 C:\CONFIG.SYS 的末尾加上如下两行(可使用EDIT编辑):

    LASTDRIVE=Z
    DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:MSCD001
  3. 在 AUTOEXEC.BAT 的末尾加上一行:

    LH MSCDEX.EXE /D:MSCD001 /L:X
  4. 重启系统即可挂载光盘,光盘默认在X盘

参考资料

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分区进行安装。

文章目录