我的服务器设置了 RAID-1,几天前一个驱动器出现故障。我更换了它并将其重新添加到阵列中。问题是 3TB 驱动器有 2 个分区:
root@s01 [~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server01-LogVol01
2.7T 419G 2.2T 17% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/md0 477M 149M 303M 33% /boot
/dev/md2 32G 6.5G 24G 22% /mysql
/usr/tmpDSK 4.0G 223M 3.6G 6% /tmp
root@s01 [~]#
因此基本上是 2.7TB /
、7.8GBtmpfs
和 477MB boot
。
因此和md0
都md1
在同一个驱动器上。然后使用以下方法重新添加发生故障的驱动器:mdadm --manage /dev/md1 --add /dev/sdc2
现在您可以看到的问题是md1
已同步但md0
被遗漏了:
root@s01 [~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[1]
511988 blocks super 1.0 [2/1] [_U]
md2 : active raid1 sda1[0] sdb1[1]
33558657 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdc1[2] sdd2[1]
2929751932 blocks super 1.1 [2/2] [UU]
bitmap: 6/22 pages [24KB], 65536KB chunk
unused devices: <none>
root@s01 [~]#
有什么方法可以安全地重新添加md0
而无需重新格式化所有内容?
md0
现在看起来像:
root@s01 [~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Jul 7 18:23:23 2012
Raid Level : raid1
Array Size : 511988 (499.99 MiB 524.28 MB)
Used Dev Size : 511988 (499.99 MiB 524.28 MB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Thu Jul 7 00:59:54 2016
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : server01.domain.com:0
UUID : 2ca3a4dc:db3ef0ca:b3d37d49:b43e826f
Events : 726
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 49 1 active sync /dev/sdd1
root@s01 [~]#
看起来md1
像:
root@s01 [~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.1
Creation Time : Sat Jul 7 18:23:24 2012
Raid Level : raid1
Array Size : 2929751932 (2794.03 GiB 3000.07 GB)
Used Dev Size : 2929751932 (2794.03 GiB 3000.07 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Thu Jul 7 20:33:31 2016
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : server01.domain.com:1
UUID : 58600fc5:5348d92c:a7d25465:20d42940
Events : 2359606
Number Major Minor RaidDevice State
2 8 33 0 active sync /dev/sdc1
1 8 50 1 active sync /dev/sdd2
root@s01 [~]#
答案1
因此 md0 和 md1 都位于同一驱动器上。然后使用 mdadm --manage /dev/md1 --add /dev/sdc2 重新添加故障驱动器
现在的问题是,正如您所看到的,md1 已同步,但 md0 却被遗漏了:
这是因为你只将丢失的驱动器重新添加到/dev/md1
,你需要对它执行相同的操作/dev/md0
,例如
mdadm --manage /dev/md0 --add /dev/sdcX
sdcX
- 您现在需要知道使用哪个分区,我们无法知道。
有什么方法可以安全地重新添加 md0 而无需重新格式化所有内容?
您可以使用parted
,并找出什么在哪里以及哪个分区未被使用。Mdadm
这样做很安全,它不允许您添加当前正在使用的设备。
我敢打赌,你没有在那个新驱动器上创建第二个分区。Mdadm
允许你重新添加不同大小的分区(在你的情况下更大)。你应该创建与 相同的分区布局。Parted 也会帮助你做到这一点。你可以像这样/dev/sdd
检查布局: ,然后将其与 进行比较。/dev/sdd
parted /dev/sdd unit MiB print
/dev/sdc
确保正确对齐分区,parted
这也将帮助你,在新磁盘上创建第一个分区后,你应该注意它从 2048 扇区(第 1 MiB)开始。错位通常会影响磁盘性能。
在进行分区之前,您还需要:
mdadm --manage /dev/mdX --fail /dev/sdX
- 将磁盘标记为故障(非破坏性)
mdadm --manage /dev/mdX --remove /dev/sdX
- 从阵列中删除磁盘(非破坏性)
相应地对磁盘进行分区(在某种程度上是破坏性的)并再次重新添加它(非破坏性的,当然对于阵列来说不是用于添加的磁盘/分区)。