我有一台旧服务器(Fedora 4——是的,旧!)最近死掉了。它在软件 RAID 1 阵列中配置了两个 IDE 磁盘,我正在尝试恢复数据。不幸的是,我已经有一段时间没有搞乱 mdadm 了,我担心我可能搞砸了一些事情。另外,虽然阵列中有两个磁盘,但其中一个似乎完全死了。当我将其连接到另一台计算机时,该计算机挂在 BIOS 屏幕上并且无法启动。所以我决定使用另一个镜像磁盘。
我把磁盘放在另一台机器上,我尝试的第一件事就是运行:
mdadm --create /dev/md0 -v --force --raid-devices=1 --level=raid1 /dev/sdb2
然而,这不会让我挂载文件系统:
# mount -t ext3 /dev/md0 /mnt mount: wrong fs type, bad option, bad superblock on /dev/md0, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so
不过,它显然确实将一些内容写回磁盘,这就是为什么我担心我可能把它搞砸了:
# mdadm --examine /dev/sdb2
/dev/sdb2:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : b6babdfb:e99e3bd3:398fcebe:dd38faab
Name : bluto:0 (local to host bluto)
Creation Time : Thu Dec 29 15:36:10 2016
Raid Level : raid1
Raid Devices : 1
Avail Dev Size : 310277362 (147.95 GiB 158.86 GB)
Array Size : 310277218 (147.95 GiB 158.86 GB)
Used Dev Size : 310277218 (147.95 GiB 158.86 GB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : active
Device UUID : 0f3d948b:398095cc:9621f72f:fcd11310
Update Time : Thu Dec 29 15:36:10 2016
Checksum : c58ea2b6 - correct
Events : 0
Device Role : Active device 0
Array State : A ('A' == active, '.' == missing)
此处的创建时间是当前的,主机名“bluto”是我用于恢复的机器,而不是原始服务器。因此,这肯定是在我进行恢复工作时写入的,这让我担心一些重要的东西可能已被抹去。
然后我想起了一个更简单的 mdadm 技巧,这实际上适用于同一磁盘的不同分区。不幸的是,该分区只是 /boot,因此数据并不有趣,但它证明该技术应该有效:
# mdadm --assemble --run /dev/md0 /dev/sdb1
mdadm: /dev/md0 has been started with 1 drive (out of 2).
# mount -t ext3 /dev/md0 /mnt
# ls /mnt
config-2.6.11-1.1369_FC4 grub initrd-2.6.17-1.2142_FC4.img System.map-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4
config-2.6.17-1.2142_FC4 initrd-2.6.11-1.1369_FC4.img lost+found System.map-2.6.17-1.2142_FC4 vmlinuz-2.6.17-1.2142_FC4
但是当我卸载它并停止 md 设备,然后对我的实际数据分区(sdb2)尝试同样的操作时,我得到了与以前相同的错误:
# umount /mnt
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --assemble --run /dev/md0 /dev/sdb2
mdadm: /dev/md0 has been started with 1 drive.
# mount -t ext3 /dev/md0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/md0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
我不知道接下来要尝试什么。我想过在其上运行 e2fsck,但是我应该直接针对 /dev/sdb2 运行它,还是在运行时针对 /dev/md0 运行它?我还担心如果 fs 已经很糟糕,这可能会使事情变得更糟。