据我所知,这是可能的,但我无法在任何地方找到关于如何具体做到这一点的直接答案,并且我不想冒着丢失数据的风险自己进行实验,所以我在这里询问。
我有一台家用服务器,上面有五块磁盘,运行着 CentOS。一块是装有操作系统的 SSD。其余四块磁盘是 4TB 硬盘,配置为 RAID10 和 mdraid。使用的文件系统是 xfs。
我正在考虑尝试用 8TB 磁盘替换 4TB 磁盘。究竟需要做什么才能进行替换,而无需重新配置新的 RAID 并丢失数据?
Details output:
[root@fluttershy ~]# mdadm -D /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Mon Apr 18 12:46:24 2016
Raid Level : raid10
Array Size : 7813771264 (7451.79 GiB 8001.30 GB)
Used Dev Size : 3906885632 (3725.90 GiB 4000.65 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Mon Jun 13 11:04:41 2016
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : fluttershy:data (local to host fluttershy)
UUID : aa8f857a:g8bd0344:06d2f6d3:bac01a46
Events : 13440
Number Major Minor RaidDevice State
0 8 1 0 active sync set-A /dev/sda1
1 8 17 1 active sync set-B /dev/sdb1
2 8 33 2 active sync set-A /dev/sdc1
3 8 49 3 active sync set-B /dev/sdd1
答案1
对每个磁盘完成以下步骤;/dev/sda1
根据需要更换其他磁盘。您必须完成全部完成上述步骤后,才能继续处理下一个磁盘。
- 将磁盘标记为故障,以便 MD 停止使用它:
mdadm --manage /dev/md127 --fail /dev/sda1
- 从阵列中移除磁盘:
mdadm --manage /dev/md127 --remove /dev/sda1
- 物理替换磁盘。
0xDA
使用一个分区跨越整个磁盘的类型对新磁盘进行分区。- 将新磁盘添加到阵列:
mdadm --manage /dev/md127 --add /dev/sda1
添加替换磁盘后,MD 将重建阵列。确保重建已完成前继续处理下一个磁盘。您可以通过运行来检查阵列的状态cat /proc/mdstat
。
一次全部磁盘已更换且阵列已重建,请扩展阵列以使用 填充所有磁盘的最大容量mdadm --grow /dev/md127 --size=max
。您可以从那里调整文件系统的大小以填充扩展的 RAID;对于您的情况,请使用命令xfs_growfs
。
有关如何培养 MD 阵列的更多信息,请访问Linux RAID 维基。
与任何其他磁盘操作任务一样,您应该在开始之前进行备份。
答案2
您首先需要逐个更换每个磁盘。
要做到这一点,您需要让每个磁盘“发生故障”,然后用新的 8Tb 替换它,实际上,如果您有备用端口,您可以添加额外的磁盘,然后使用 mdadm“替换”来替换,而不是从 raid 中移除磁盘并承担更高的故障风险。
完成此操作后,您只需将现有 FS 扩展到新创建的空间即可。看起来这个命令是“xfs_growfs”,但我没有使用 xfs 的经验,无法解释您具体如何执行此操作。
与往常一样,准备好备份(并且突袭不是备份!)。