Ubuntu 22.04.3 LTS环境下mdadm管理16×8TB Raid6阵列的磁盘升级及空间利用问题咨询
Hey Perry, let's walk through your questions with practical mdadm know-how based on real-world setups:
问题1:是否必须全部替换8TB磁盘才能利用16TB盘的额外空间?
你的判断完全正确!原生mdadm RAID6的可用容量是由阵列中最小容量的磁盘决定的,计算公式是(磁盘总数 - 2) × 单盘最小容量。只要阵列里还有8TB的盘,哪怕其他盘是16TB,整个阵列的单盘可用空间都会被限制在8TB,16TB盘上剩余的8TB空间会处于闲置状态,没法被ext4文件系统识别和使用。
关于你提到的替代方案:攒够9块16TB盘后新建RAID6阵列(容量为(9-2)×16TB=112TB,刚好和现有16×8TB阵列的(16-2)×8TB=112TB容量一致),把数据复制过去,之后再逐步扩容,这个思路非常稳妥。好处是旧的备份阵列可以一直保留到新阵列完全就绪,避免了“无备份”的风险,之后你可以用熟悉的命令扩容:
mdadm --grow --raid-devices=10 --backup-file=/root/md4_grow.bak /dev/md4 resize2fs /dev/md4
至于LVM的转换:如果想在现有阵列上叠加LVM,无法直接在线转换,必须先备份所有数据,然后销毁现有阵列,重新创建mdadm RAID后再搭建LVM。考虑到这是你的备份阵列,一旦销毁就失去了备份能力,除非你有其他临时备份介质(比如你提到的离线10TB盘),否则这个操作的风险太高,不建议尝试。
问题2:全部替换为16TB磁盘后,如何扩容到全容量?
只替换磁盘还不够,需要分两步操作才能让系统识别并利用全部空间:
- 先让mdadm扩展阵列的容量,识别到单盘的16TB空间:
这个命令会让mdadm重新计算阵列的总容量,把所有磁盘的最大可用空间都利用起来(此时阵列总容量会变成mdadm --grow /dev/md4 --size=max(16-2)×16TB=224TB)。 - 再扩容ext4文件系统,让它适配新的阵列容量:
resize2fs /dev/md4
直接运行resize2fs是不够的,因为mdadm默认不会自动识别磁盘容量的变化,必须先通过--grow --size=max让阵列扩容,之后文件系统才能跟着扩展。
另外补充一点:你提到的Synology的混合扩容是他们定制的解决方案,原生mdadm并不支持这种“混合容量磁盘的RAID空间即时利用”,所以用原生mdadm的话,要么等全部磁盘升级完再扩容,要么就用你想到的“建新阵列迁移数据”的方案,这两种都是最稳妥的路径。
备注:内容来源于stack exchange,提问作者PerryCS

