这篇文章整理华为阵列卡使用 hiraidadm 配置 7 块硬盘组成 RAID5、另外 1 块作为专用热备 的命令,包含单机操作与 Ansible ad-hoc 批量操作。
案例中有 8 块 16TB HDD,槽位为 0:2~0:9;另外两块 SSD 位于 0:0、0:1,保留原有系统阵列。
一、目标布局与操作前提
| 物理盘槽位 | 用途 |
|---|---|
0:0、0:1 | 原有 SSD 系统阵列,保留 |
0:2~0:8 | 7 块 HDD,创建 RAID5 |
0:9 | 1 块 HDD,作为该 RAID Group 的专用热备 |
本文以控制器 c0 为例。控制器号、槽位号、VD 编号、RG 编号以及程序路径都需要以实际查询结果为准。
删除 VD 会破坏原阵列配置,可能造成原数据无法访问。只有确认旧数据不再需要、相关业务已停止,并且已经核实目标盘身份时,才执行删除。本文是配置记录整理,具体语法支持情况以当前控制器及 hiraidadm 版本为准。
容量怎么算?
7 块 16TB 硬盘组成 RAID5,理论数据容量为:
(7 - 1) × 16TB = 96TB ≈ 87.31TiB第 8 块盘作为热备,不贡献可用容量。
厂家标称的 16TB 是十进制容量,换算约为 14.55TiB。案例中工具显示的单盘数值约为 14.553,因此需要注意其单位显示口径,不能把约 87.3TiB 写成厂家口径的 87.3TB。实际容量以阵列输出为准。
RAID5 加热备仍然只能容忍一块成员盘故障。 热备盘可以在满足控制器策略和条件时接替故障盘进行重建,但不会增加 RAID5 的校验级别;重建完成前再损坏一块成员盘仍可能导致阵列失效。
二、确认 hiraidadm 程序位置
如果程序在当前目录:
./hiraidadm c0 show pdlist如果已经加入 PATH:
command -v hiraidadm
hiraidadm c0 show pdlist以下单机命令统一使用 ./hiraidadm,请在程序所在目录执行。Ansible 示例统一使用 /root/hiraidadm,这是示例路径,必须替换成远端实际路径。
三、查看物理盘、虚拟盘与后台任务
# 查看物理盘:核对槽位、容量、状态和成员关系
./hiraidadm c0 show pdlist
# 查看虚拟盘:核对现有阵列及其用途
./hiraidadm c0 show vdlist
# 查看后台任务
./hiraidadm c0 show bgtask先确认:
0:0、0:1确实属于要保留的系统阵列。0:2~0:9确实是准备重新配置的 8 块数据 HDD。- 这些 HDD 是否已经属于现有 VD。
- 需要删除的旧 VD 与成员盘之间的对应关系。
物理盘显示 online 通常表示它正在作为阵列成员使用,不表示它是可以直接重新分配的空盘。
同样,不能默认 vd0 一定是系统盘,也不能默认 vd1~vd8 一定是数据盘。必须根据当前输出核实;若列表信息不足,应结合该版本工具支持的详细查询和现有配置记录继续确认。
四、按需删除旧数据 VD
如果目标 HDD 已经空闲,可以跳过删除步骤。
原案例准备释放 8 块 HDD,但旧 VD 编号不应直接复制到其他机器。建议按已核实的编号逐个处理:
# 留空时会停止;填写查询确认的旧数据 VD 编号后再执行
VD_ID=''
: "${VD_ID:?请先填写已经核实的旧数据 VD 编号}"
printf 'y\n' | ./hiraidadm "c0:vd${VD_ID}" delete例如,只有当你确认 vd1 就是应删除的旧数据虚拟盘时,才使用:
printf 'y\n' | ./hiraidadm c0:vd1 delete这里的 printf 'y\n' 会自动回答删除确认提示,所以执行前的对象核对尤其重要。多块物理盘不一定对应同样数量的 VD,应删除的是核实后的虚拟盘,而不是按槽位号推测 VD 号。
删除完成后重新查询:
./hiraidadm c0 show pdlist
./hiraidadm c0 show vdlist确认预定的数据 HDD 已经释放,保留的系统阵列没有变化。空闲盘状态的具体名称以当前工具输出为准。
五、创建 7 盘 RAID5
使用 0:2~0:8 共 7 块 HDD:
./hiraidadm c0 create vd raid5 name=data_raid5 size=max_left drives=0:2,0:3,0:4,0:5,0:6,0:7,0:8参数含义:
| 参数 | 含义 |
|---|---|
c0 | 本例的目标控制器 |
create vd raid5 | 创建 RAID5 虚拟盘 |
name=data_raid5 | 虚拟盘名称 |
size=max_left | 使用所选配置可分配的最大剩余容量 |
drives=0:2,...,0:8 | 指定参与 RAID5 的 7 块物理盘 |
0:9 不包含在成员列表中,它留给下一步作为热备。
命令中的 name=data_raid5、size=max_left、drives=... 应保持为完整参数,不要在等号两边添加空格。
创建后查询:
./hiraidadm c0 show vdlist确认新虚拟盘名称、RAID 级别、容量与成员配置正确,并记录其实际 RAID Group(RG)编号。不要根据旧配置或 VD 编号推断 RG。
六、设置专用热备
只有当查询确认新建 RAID5 对应的 RG 为 1 时,执行:
./hiraidadm c0:e0:s9 set hotspare rg=1这里:
c0:控制器 0。e0:enclosure 0。s9:slot 9,即前面保留的0:9。rg=1:将热备关联到已经核实的 RAID Group 1。
如果实际 RG 不是 1,需要替换为查询得到的编号。热备盘还应符合控制器对容量、介质类型和兼容性的要求。
不要把“创建 RAID5”和“设置 rg=1 热备”直接拼成一条命令执行。先查询新 RG,再设置热备,才能确认热备关联到了目标阵列。
最终布局:
0:0、0:1 原系统阵列,保留
0:2 ┐
0:3 │
0:4 │
0:5 ├── RAID5:data_raid5
0:6 │
0:7 │
0:8 ┘
0:9 ─── 该 RAID Group 的专用热备七、检查配置结果
./hiraidadm c0 show pdlist
./hiraidadm c0 show vdlist
./hiraidadm c0 show bgtask重点检查:
- 原系统阵列仍然存在,成员盘没有变化。
- 新虚拟盘为 RAID5,容量符合 7 盘 RAID5 的预期。
0:2~0:8属于目标 RAID5。0:9已成为正确 RG 的热备。- 虚拟盘和物理盘状态正常,后台任务没有异常。
创建命令返回成功,不等于初始化等后台任务已经完成。任务状态应以 show bgtask 的实际输出为准。
八、Ansible ad-hoc 批量操作
以下示例假设:
- inventory 文件为
inventory.ini。 - 华为阵列卡主机组为
huawei_raid_hosts。 - 首台验证机器的 inventory 别名为
raid01。 - 远端程序路径为
/root/hiraidadm。
请按实际环境替换这些值。建议先用 --limit raid01 完成单台操作,再逐台核对其他服务器布局并调整执行范围。
1. 核对目标主机
ansible huawei_raid_hosts -i inventory.ini --list-hosts不要为了方便直接改成 all,以免包含不属于本次操作范围的机器。
2. 批量查询
ansible huawei_raid_hosts -i inventory.ini -b -m ansible.builtin.command -a '/root/hiraidadm c0 show pdlist'
ansible huawei_raid_hosts -i inventory.ini -b -m ansible.builtin.command -a '/root/hiraidadm c0 show vdlist'
ansible huawei_raid_hosts -i inventory.ini -b -m ansible.builtin.command -a '/root/hiraidadm c0 show bgtask'即使服务器型号相同,也要逐台核实 VD、RG 和成员盘,不能用一台的输出代表整个主机组。
3. 按需删除已核实的旧 VD
下面只演示在 raid01 上删除 已确认可删除的 vd1。请替换成实际核实的主机与 VD:
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.shell -a 'printf "y\n" | /root/hiraidadm c0:vd1 delete'删除后立即查询:
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show pdlist'
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show vdlist'这里使用 shell 是因为命令需要管道。不要把历史记录里的 1 2 3 4 5 6 7 8 直接写成所有机器通用的删除循环。
4. 创建 RAID5
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 create vd raid5 name=data_raid5 size=max_left drives=0:2,0:3,0:4,0:5,0:6,0:7,0:8'接着查询新 RG:
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show vdlist'5. 设置热备
确认这台机器的新 RG 确实为 1 后:
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0:e0:s9 set hotspare rg=1'如果不同机器的 RG 不同,应分别使用对应的参数执行。
6. 最终复查
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show pdlist'
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show vdlist'
ansible huawei_raid_hosts -i inventory.ini --limit raid01 -b -m ansible.builtin.command -a '/root/hiraidadm c0 show bgtask'上述创建、删除命令不是幂等配置。连接中断、超时或返回异常后,先查询实际状态,再决定是否重试。
九、常见问题
硬盘显示 online,为什么不能直接组新阵列?
它可能已经属于现有 VD。先查看 pdlist、vdlist,确认成员关系和旧阵列用途;只有准备清空重建时才删除对应旧 VD。
热备为什么不能直接写死 rg=1?
新建阵列的 RG 编号取决于当前控制器配置,不保证总是 1。必须在创建后查询,并使用目标 RAID5 的实际 RG。
Ansible 提示 Unable to parse argument string
检查 -a 后的引号是否闭合、复制时是否破坏了换行、是否混入中文引号或其他字符。上面的单行写法便于复制;多行参数本身不一定有错。
无管道、重定向和 shell 变量展开时使用 command;需要这些功能时使用 shell。远程执行最好使用实际绝对路径,避免依赖交互式登录时的当前目录或 PATH。
配置完成后,最少保留哪几条巡检命令?
./hiraidadm c0 show pdlist
./hiraidadm c0 show vdlist
./hiraidadm c0 show bgtask这三条分别用于查看物理盘、虚拟盘和后台任务。后续巡检时应关注成员盘状态、热备关联、阵列健康状态以及重建或初始化任务进度。
1 条评论
感谢分享经验,谢谢站长!!已收藏