![无法重新组装从 ReadyNas Duo v1 中拔出的驱动器上的 md raid](https://linux22.com/image/1355200/%E6%97%A0%E6%B3%95%E9%87%8D%E6%96%B0%E7%BB%84%E8%A3%85%E4%BB%8E%20ReadyNas%20Duo%20v1%20%E4%B8%AD%E6%8B%94%E5%87%BA%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E7%9A%84%20md%20raid.png)
我正在摆弄我最近买的 ReadyNAS 设备。它是一款基于 SPARC 的设备,运行 Linux。
由于设备速度很慢,我从阵列中取出一个驱动器,希望能够以比通过以太网更快的速度向其中填充文件。但是,组装其 MD 磁盘阵列对我来说似乎是不可能的。
配置:
/dev/sdb
是从 NAS 拉出的设备。/dev/sdb[1-3]
分区类型为fd
(linux raid 自动检测)。- 每个分区都是各自 raid1 设备的一部分
/dev/md[0-2]
。 - 当设备插入 NAS 时,所有 raid 阵列都能正常工作。
以下是我得到的结果:
# mdadm --assemble --scan
mdadm: failed to add /dev/sdb3 to /dev/md/2_0: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md/2_0: Invalid argument
mdadm: failed to add /dev/sdb2 to /dev/md/1_0: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md/1_0: Invalid argument
mdadm: failed to add /dev/sdb1 to /dev/md/0_0: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md/0_0: Invalid argument
mdadm: failed to add /dev/sdb to /dev/md/2: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md/2: Invalid argument
mdadm: No arrays found in config file or automatically
# mdadm -E /dev/sdb1
/dev/sdb1:
Magic : a92b4efc
Version : 0.90.03
UUID : 8ae34a5e:c446418f:1245590f:4aa53e2a
Creation Time : Wed Mar 13 09:56:36 2013
Raid Level : raid1
Used Dev Size : 2047936 (2000.27 MiB 2097.09 MB)
Array Size : 2047936 (2000.27 MiB 2097.09 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Update Time : Wed Mar 13 10:19:36 2013
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Checksum : f7dff982 - expected 5532a626
Events : 91658897063936
Number Major Minor RaidDevice State
this 1 33 1 1 active sync
0 0 22 1 0 active sync
1 1 33 1 1 active sync
# cat /proc/mdstat
Personalities :
Unused devices: <none>
设备/dev/sdb2
具有/dev/sdb3
与上面相同的输出,但 UUID、已用设备大小、数组大小、首选次要设备、校验和和事件除外,因此为了清楚起见,我省略了它们。
我读到过一些文章说上述错误意味着需要先加载内核模块,但我相信如果我在另一对磁盘上创建 raid1 阵列(当有问题的磁盘仍然存在时),linux 会自动加载所有必要的模块(如果我错了请纠正我)。但它仍然无法识别 md raid 设备。
尝试手动组装一个数组没有任何用处:
# mdadm --assemble /dev/md0 /dev/sdb1
mdadm: failed to add /dev/sdb1 to /dev/md0: Invalid argument
mdadm: /dev/md0 assembled from 0 drives - need all 2 to start it (use --run to insist).
这里 mdadm 非常清楚它需要什么,因为这是一个 raid1 阵列,但由于它是镜像副本的一部分,它必须能够独立工作:
# mdadm --assemble /dev/md0 /dev/sdb1 --run
mdadm: failed to add /dev/sdb1 to /dev/md0: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md0: Invalid argument
我该如何安装这些 MD RAID 设备?
答案1
遇到了同样的问题:
$ sudo mdadm --assemble /dev/md100 /dev/sdj3
mdadm: failed to add /dev/sdj3 to /dev/md100: Invalid argument
mdadm: /dev/md100 assembled from 0 drives - need all 2 to start it (use --run to insist).
dmesg 显示以下错误:
$ dmesg | grep sdj3
[ 102.886486] sdj: sdj1 sdj2 sdj3
[ 103.138246] md: invalid superblock checksum on sdj3
[ 103.138250] md: sdj3 does not have a valid v0.90 superblock, not importing!
可以通过以下方式修复:
$ sudo mdadm --assemble /dev/md100 /dev/sdj3 --update=summaries --force
mdadm: /dev/md100 has been started with 1 drive (out of 2).
如果您已连接所有驱动器,则它们的名称应附加在一起,在本例中我只连接了 1 个光盘,即 sdj3。
编辑:
我应该补充以下几个混乱的情况。
由于它是 LVM,因此无法挂载 md 阵列:
$ sudo mount /dev/md100 /mnt/readynas
mount: unknown filesystem type 'LVM2_member'
lvdisplay 可以为您提供 lvm 设备的名称:
$ sudo lvdisplay | grep "LV Path"
LV Path /dev/c/c
但安装该设备也失败了:
$ sudo mount /dev/c/c /mnt/readynas
mount: wrong fs type, bad option, bad superblock on /dev/mapper/c-c,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
dmesg 会告诉你为什么:
$ dmesg | tail -2
[ 2294.007063] EXT4-fs (dm-1): mounting ext3 file system using the ext4 subsystem
[ 2294.007069] EXT4-fs (dm-1): bad block size 16384
在 ubuntu 上可以使用另一个工具来挂载文件系统:
$ sudo apt-get install fuseext2
$ sudo fuseext2 -o ro,allow_other /dev/c/c /mnt/readynas