2 年前我创建了一个有 2 个磁盘的 raid5 阵列,如下所示:
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 missing
现在我已经用最新的 ubuntu 服务器 LTS 重建了我的系统,并且 mdadm 不会重新组装正在运行的阵列:
root@htpc:~# mdadm -E /dev/sdb1
/dev/sdb1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
Name : ubuntu:0
Creation Time : Sat Aug 17 11:37:44 2019
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=143 sectors
State : active
Device UUID : 1c03a042:a40c1eb8:8aa0533c:22a74311
Internal Bitmap : 8 sectors from superblock
Update Time : Fri Apr 9 17:24:44 2021
Bad Block Log : 512 entries available at offset 32 sectors
Checksum : eaaa2b7f - correct
Events : 223469
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 0
Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm -E /dev/sdc1
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x9
Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
Name : ubuntu:0
Creation Time : Sat Aug 17 11:37:44 2019
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=143 sectors
State : active
Device UUID : 019a2ef9:f11076b3:7060bf02:3b6ba98e
Internal Bitmap : 8 sectors from superblock
Update Time : Fri Apr 9 17:24:44 2021
Bad Block Log : 512 entries available at offset 32 sectors - bad blocks present.
Checksum : e0624aba - correct
Events : 223469
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 1
Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm --assemble --scan
mdadm: /dev/md/ubuntu:0 assembled from 2 drives - not enough to start the array while not clean - consider --force.
mdadm: No arrays found in config file or automatically
root@htpc:~# mdadm --detail /dev/md127
/dev/md127:
Version : 1.2
Raid Level : raid0
Total Devices : 2
Persistence : Superblock is persistent
State : inactive
Working Devices : 2
Name : ubuntu:0
UUID : 530afddc:f4e62791:eba1539c:15672d1d
Events : 223469
Number Major Minor RaidDevice
- 8 33 - /dev/sdc1
- 8 17 - /dev/sdb1
root@htpc:~#
当我创建缺少磁盘的 raid5 阵列时,根本没有同步,所以这是一个“假”raid5,可能有点像 raid0,而且 mdadm assemble 输出并不让我感到惊讶。但我不想犯任何错误,那么此时我有什么选择呢?
启动该状态下的阵列
mdam——启动/dev/md127
我不确定这一点,因为每个磁盘上的元数据都谈到了 raid 5......
我现在有第三个磁盘,其中有一个干净的 /dev/sdd1 分区,我应该尝试
mdadm --assemble /dev/md0 /dev/db1 /dev/sdc1 /dev/sdd1
在这种情况下,我认为 mdadm 将尝试重建阵列,但对于这个 mdadm 将在前两个磁盘上期望 raid 5 条带数据,但事实并非如此,因为它是一种 raid 0...
我确实需要恢复这些数据,但我找不到好的命令。任何帮助都将不胜感激 :)
答案1
总结
首先,最好手动再检查一下事情是否真的处于预期状态,这样你就不会丢失任何信息。这可以通过使用mdadm --examine --scan
和mdadm --examine /dev/sdXY
(组件)、、、lsblk
检查blkid
等dmesg
来完成。从examine
命令中,你会知道你拥有的数组的 UUID:
# mdadm --examine --scan
ARRAY /dev/md/0 metadata=1.2 UUID=6bbeca3f:5284fd0a:e15d62ec:b6a5a9a4 name=vh1:0
ARRAY /dev/md/1 metadata=1.2 UUID=cc82d789:94c6c7c2:11e57657:710a4175 name=vh1:1
ARRAY /dev/md/2 metadata=1.2 UUID=ddfbcbfd:9c11fd11:72eab0f2:88e595b1 name=vh1:2
当您确信自己知道自己在做什么时,请使用--assemble --force
强制组装特定数组:
mdadm --assemble --force --uuid ddfbcbfd:9c11fd11:72eab0f2:88e595b1 /dev/md/2
或一次处理所有数组:
mdadm --assemble --force --scan
玩得开心!
解释
Linux 软件 RAID 会跟踪阵列上次运行时的状态。它会记录阵列是在最佳状态还是降级状态,以及存在哪些设备(哪些阵列插槽被占用)。此信息存储在 MD 超级块中。详细信息在MD RAID 维基。
如果存在超级块,该命令mdadm --examine /dev/sdXY
将显示其解码的内容:/dev/sdXY
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : cc82d789:94c6c7c2:11e57657:710a4175
Name : vh1:1 (local to host vh1)
Creation Time : Fri Aug 28 16:54:57 2020
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 1953257472 (931.39 GiB 1000.07 GB)
Array Size : 976628736 (931.39 GiB 1000.07 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=0 sectors
State : active
Device UUID : 93be2645:7b75bdb5:89f489ac:003794ff
Internal Bitmap : 8 sectors from superblock
Update Time : Thu Jun 3 10:26:30 2021
Bad Block Log : 512 entries available at offset 16 sectors
Checksum : 4c9ddac1 - correct
Events : 16674
Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
这可能有助于回答一些“为什么”的问题。
当 MD 启动并扫描所有适合的超级块设备时,它会检查内容是否与存储的信息真正匹配。如果内容不匹配,它将不会自动组装该阵列。这样做有几个原因,例如,某些设备初始化速度可能很慢,最好等到一切正常后直接以最佳状态启动阵列,而不是以降级状态启动阵列,然后在迟到的设备出现后执行恢复。
但是如果迟到的设备从未出现,例如它被物理移除,阵列将不会自行启动。在这种情况下,您可以使用命令它启动,--force
如果仍然有足够的设备供它在降级状态下运行。
也可以看看这个答案。