Unraid 7.2.2 硬盘阵列容量异常(465G显147G)终极解决方案总结

一、问题概述

场景描述

  1. 硬件:3块物理硬盘(/dev/sdb、/dev/sdc、/dev/sdd),单盘物理容量约465.8G(系统按1024进制识别为490G左右);
  2. 需求:纯命令行格式化、单分区、Unraid原生XFS格式,加入阵列(Array)Slots使用;
  3. 异常现象:命令行格式化后加入阵列,硬盘可用容量仅显示147G/150G,物理容量被大量隐藏,lsblk可确认硬盘本身为完整465.8G裸盘。

最终结果

所有硬盘均成功恢复490G左右满容可用,状态为:单分区+XFS格式+阵列稳定挂载+重启自动复现+无任何残留/报错,达到Unraid阵列硬盘最优工作状态。

二、核心根因(Unraid 7.2.2 专属特性)

问题为纯软件层面的“容量识别锁死”,非硬盘硬件故障、分区错误或格式化失败,核心由三重因素叠加导致:

  1. 内存级顽固缓存:Unraid 7.2.2将硬盘旧容量信息写入内存缓存,常规刷新命令(udevadm/partprobe)无法清除,仅重启可彻底清空;
  2. 虚拟阵列分区锁容:系统自动创建虚拟阵列设备(/dev/md1)及分区(/dev/md1p1),强制沿用旧模板划147G分区,无视硬盘真实容量;
  3. 硬盘元数据残留:硬盘头部/尾部残留旧阵列超级块、分区表签名,普通清盘命令(dd清头尾)无法彻底抹除,导致系统复用旧配置。

三、前置准备(必做,避免误操作)

  1. 数据备份:格式化/清盘会彻底清空硬盘数据,确认目标硬盘无重要数据后操作;

  2. 停止阵列:登录Unraid WebUI → 顶部「Main」→ 底部「Array Operation」→ 点击「Stop」,等待阵列状态变为「Stopped」,目标硬盘回到「Unassigned」状态;

  3. 确认硬盘状态:执行命令 lsblk /dev/sdb(替换为目标硬盘),输出显示“无分区、容量465G左右”即为纯净裸盘,可继续操作。

四、解决方案(分单盘修复、批量修复,均实测可用)

4.1 单盘修复(以/dev/sdb为例,适配单块硬盘)

  1. 强制卸载+解除占用:彻底释放硬盘及关联虚拟分区的进程占用,避免清盘失败。 fuser -km /dev/sdb && umount -lf /dev/sdb* /dev/md1* /mnt/disk1 &>/dev/null 无报错即成功,若有进程提示属正常现象。

  2. 彻底清盘(出厂级):使用sgdisk命令抹除所有分区表、签名及元数据,速度快、无硬盘损耗,优于dd命令。 sgdisk --zap-all /dev/sdb && sgdisk --clear /dev/sdb && sync 输出“Creating new GPT entries.”即为成功。

  3. 清除系统缓存:删除阵列及磁盘识别缓存文件,避免重启后复用旧配置。 rm -rf /var/run/mdadm/* /var/lib/blkid/* &>/dev/null udevadm trigger && udevadm settle && partprobe && sync 无输出即成功。

  4. 重启Unraid(核心步骤):仅重启可彻底清空内存顽固缓存,让系统对硬盘“完全失忆”。 reboot

  5. 重新分配阵列:重启后登录WebUI → 「Main」→ 阵列插槽下拉框选择「/dev/sdb」→ 底部点击「Start」启动阵列,无需额外操作(系统自动创建满容分区+XFS格式化+挂载)。

4.2 批量修复(适配sdb/sdc/sdd三块硬盘,一键复刻)

适用于多块硬盘同故障场景,复用单盘成功逻辑,无需逐块操作,效率拉满。

  1. 前置准备:停止阵列,确保sdb/sdc/sdd均为「Unassigned」裸盘状态;

  2. 批量清盘+解除占用+清缓存:

1
2
3
4
5
6
for disk in sdb sdc sdd; do
fuser -km /dev/${disk} && umount -lf /dev/${disk}* &>/dev/null
sgdisk --zap-all /dev/${disk} && sgdisk --clear /dev/${disk} && sync
done
rm -rf /var/run/mdadm/* /var/lib/blkid/* &>/dev/null
udevadm trigger && udevadm settle && partprobe && sync
  1. 重启Unraid:reboot

  2. 批量分配阵列:重启后WebUI → 「Main」→ 将sdb/sdc/sdd分别分配到对应阵列插槽 → 点击「Start」启动阵列,系统自动完成后续配置。

五、验证方法(确认容量恢复正常)

阵列启动完成后,执行以下命令验证,满足任一条件即为成功:

  1. 查看挂载容量+格式: df -hT | grep -E 'disk1|disk2|disk3' 成功特征:容量显示490G左右,FSTYPE为xfs,Used仅几十MB;

  2. 查看硬盘分区+容量: lsblk -f 成功特征:sdb1/sdc1/sdd1均为单分区,容量490G左右,TYPE为xfs;

  3. WebUI可视化验证:「Main」页面阵列硬盘显示「Active」,Free空间≈490G,无报错。

六、永久避坑核心铁律(Unraid 7.2.2 专属)

  1. 重启是缓存问题的终极解法:内存级缓存无法通过刷新命令清除,清盘后必须重启,否则容量锁死问题会复现;

  2. 阵列盘清盘首选sgdisk:sgdisk --zap-all 比dd命令更高效、无损耗,能彻底抹除所有元数据残留;

  3. 阵列盘需为纯净裸盘:加入阵列Slots的硬盘禁止手动分区/格式化,由Unraid自动接管(创建分区+格式化+挂载),手动操作会触发容量异常;

  4. 7.2.2无mdadm命令:系统阉割了mdadm用户权限,无需纠结该命令,所有操作可通过原生命令+WebUI完成。

七、常用运维命令(收藏备用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1. 强制卸载硬盘/挂载点
umount -lf /mnt/disk1
fuser -km /dev/sdb

# 2. 单盘彻底清盘(阵列盘首选)
sgdisk --zap-all /dev/sdb && sgdisk --clear /dev/sdb && sync

# 3. 磁盘识别刷新
udevadm trigger && udevadm settle && partprobe

# 4. 查看硬盘物理容量+分区
lsblk /dev/sdb

# 5. 查看所有硬盘挂载状态
df -hT

八、总结

本方案针对Unraid 7.2.2版本“硬盘加入阵列后容量锁死”问题,核心逻辑为「彻底清盘抹除残留+重启清空内存缓存+系统自动重建配置」,全程使用原生命令,无mdadm依赖,单盘/批量操作均适配。操作完成后,硬盘可稳定以满容状态工作,重启后自动挂载,无任何异常,可直接用于生产环境运维。

⬆︎TOP