由于校验和错误,mdadm 无法挂载

由于校验和错误,mdadm 无法挂载

我在 4 个 1TB 磁盘上安装了 ubuntu raid5,没有发生过非正常关机或电源问题。启动盘是第 5 个磁盘,不在 mdadm 上。我的启动盘上也有 XP,我今天刚启动。XP 无法挂载 mdadm 或无法触碰磁盘,至少我是这么认为的。

自从关闭 XP 后,ubuntu 就无法启动了,可能是因为 fstab 阻止了它,因为它在等待后无法挂载 /dev/md0。现在我无法进入我原来的 ubuntu 安装。

因此我移除了所有 raid 成员并将它们全部放入外部磁盘托架中,然后在 macbook 中启动 ubuntu 进行恢复。

/dev/sdh:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 05143452:9d98ca6b:c59a91b5:fda8b846
           Name : vikas-VirtualBox:0
  Creation Time : Sat Dec 31 17:31:47 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 1953263024 (931.39 GiB 1000.07 GB)
     Array Size : 2929889280 (2794.16 GiB 3000.21 GB)
  Used Dev Size : 1953259520 (931.39 GiB 1000.07 GB)
    Data Offset : 259072 sectors
   Super Offset : 8 sectors
   Unused Space : before=258984 sectors, after=6576 sectors
          State : clean
    Device UUID : b0cc00bc:b20c2671:1eb062bc:28eb229b

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Aug 11 17:08:49 2017
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 846ac784 - correct
         Events : 18840

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
===============================
/dev/sdf1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 05143452:9d98ca6b:c59a91b5:fda8b846
           Name : vikas-VirtualBox:0
  Creation Time : Sat Dec 31 17:31:47 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 1953259520 (931.39 GiB 1000.07 GB)
     Array Size : 2929889280 (2794.16 GiB 3000.21 GB)
    Data Offset : 259072 sectors
   Super Offset : 8 sectors
   Unused Space : before=258984 sectors, after=3072 sectors
          State : clean
    Device UUID : a36f72c1:d4ec55f0:e4a4ff8a:19a0d659

    Update Time : Fri Aug 11 17:08:49 2017
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 965ce69e - expected 965ce69d
         Events : 18840

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
===============================
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 05143452:9d98ca6b:c59a91b5:fda8b846
           Name : vikas-VirtualBox:0
  Creation Time : Sat Dec 31 17:31:47 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 1953259520 (931.39 GiB 1000.07 GB)
     Array Size : 2929889280 (2794.16 GiB 3000.21 GB)
    Data Offset : 259072 sectors
   Super Offset : 8 sectors
   Unused Space : before=258984 sectors, after=3072 sectors
          State : clean
    Device UUID : 04920971:8ce054dc:4756516d:07eedc84

    Update Time : Fri Aug 11 17:08:49 2017
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 3f4afc07 - expected 3f4afc06
         Events : 18840

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
===============================
/dev/sdi:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 05143452:9d98ca6b:c59a91b5:fda8b846
           Name : vikas-VirtualBox:0
  Creation Time : Sat Dec 31 17:31:47 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 1953263024 (931.39 GiB 1000.07 GB)
     Array Size : 2929889280 (2794.16 GiB 3000.21 GB)
  Used Dev Size : 1953259520 (931.39 GiB 1000.07 GB)
    Data Offset : 259072 sectors
   Super Offset : 8 sectors
   Unused Space : before=258984 sectors, after=6576 sectors
          State : clean
    Device UUID : 426c61e9:ea61c2f3:cf27167c:09807918

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Aug 11 17:08:49 2017
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 7171c8e1 - correct
         Events : 18840

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

当我尝试装配力量时:

sudo mdadm --assemble /dev/md0 --verbose --force --run /dev/sde1 /dev/sdf1 /dev/sdh /dev/sdi
mdadm: looking for devices for /dev/md0
mdadm: /dev/sde1 is identified as a member of /dev/md0, slot 0.
mdadm: /dev/sdf1 is identified as a member of /dev/md0, slot 1.
mdadm: /dev/sdh is identified as a member of /dev/md0, slot 2.
mdadm: /dev/sdi is identified as a member of /dev/md0, slot 3.
mdadm: added /dev/sdf1 to /dev/md0 as 1
mdadm: added /dev/sdh to /dev/md0 as 2
mdadm: added /dev/sdi to /dev/md0 as 3
mdadm: added /dev/sde1 to /dev/md0 as 0
mdadm: failed to RUN_ARRAY /dev/md0: Invalid argument

来自 dmesg:

[ 2208.363750] RAID conf printout:
[ 2208.363752]  --- level:5 rd:4 wd:4
[ 2208.363755]  disk 0, o:1, dev:sde1
[ 2208.363758]  disk 1, o:1, dev:sdf1
[ 2208.363760]  disk 2, o:1, dev:sdh
[ 2208.363763]  disk 3, o:1, dev:sdi
[ 2208.363994] md0: invalid bitmap file superblock: bad magic
[ 2208.363997] md0: bitmap file superblock:
[ 2208.364000]          magic: ff88ffff
[ 2208.364002]        version: 11
[ 2208.364005]           uuid: 00000000.00000000.00000000.00000000
[ 2208.364007]         events: 0
[ 2208.364009] events cleared: 0
[ 2208.364012]          state: 00000000
[ 2208.364014]      chunksize: 0 B
[ 2208.364016]   daemon sleep: 0s
[ 2208.364018]      sync size: 0 KB
[ 2208.364020] max write behind: 0
[ 2208.364023] md0: failed to create bitmap (-22)

我的猜测是 XP 启动一定以某种方式触碰了这些磁盘成员,因此魔法有所不同。

我已经看到了--create新阵列的选项,但我不确定它是否会丢失数据。其次,如果在不同的 ubuntu 上创建,它会在另一个 ubuntu 上恢复工作吗?

有没有简单的方法来验证完整性并重置所有成员的校验和?请提出建议。谢谢。

答案1

我发现此电子邮件主题,这似乎描述了与您的相同的问题。

该人的解决方案是运行以​​下命令:

sudo mdadm -A --update=super-minor /dev/md0

该用户写道:

我通过对 mdadm 源代码进行一些调查,自己找到了这个问题的答案。似乎 mdadm 在读取超级块时会自动清除位图文件中的无效位图(但内核不会这样做)。因此,您需要做的就是找出一种让 mdadm 将该超级块保存回磁盘的方法。对我来说,解决这个问题的神奇命令是:

mdadm -A --update=super-minor /dev/md0

--update 命令强制 mdadm 在尝试挂载磁盘之前将 raid 超级块保存回磁盘,因此位图标志被清除。

不过,该用户有元数据版本00.90.01,并且根据mdadm(8)手册页

超小调仅与 v0.90 元数据相关

这意味着你应该更新姓名新版本超级块中的数组,1.2而不是超小调,而版本 1 元数据中不存在该项。

从手册页中:

-U--更新=

在组装阵列时更新每个设备上的超级块。此标志的参数可以是以下之一:sparc2.2摘要唯一标识姓名家庭主机重新同步字节顺序设备尺寸无位图, 或者超小调

姓名选项将改变姓名数组存储在超级块中。这仅支持版本 1 超级块。

相关内容