收到错误“似乎具有非常相似的超级块”。有办法解决吗?

收到错误“似乎具有非常相似的超级块”。有办法解决吗?

我的分区有些奇怪。

root@rescue ~ # mdadm -A --scan
mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.
root@rescue ~ # lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0     4G  1 loop
sda      8:0    0   2.7T  0 disk
├─sda1   8:1    0     1G  0 part
├─sda2   8:2    0    64G  0 part
├─sda3   8:3    0   200G  0 part
├─sda4   8:4    0     1M  0 part
└─sda5   8:5    0   2.5T  0 part
sdb      8:16   0   2.7T  0 disk
└─sdb1   8:17   0   2.7T  0 part
sdc      8:32   0 223.6G  0 disk

在突袭检查中我收到这样的错误。有什么办法可以修复它而不丢失数据吗?

PS 添加了新输出

root@rescue ~ # fdisk -l /dev/sdb
Disk /dev/sdb: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: ST3000NM0033-9ZM
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A93A2325-8454-A346-8133-2ACDF59BE163

Device     Start        End    Sectors  Size Type
/dev/sdb1   2048 5860533134 5860531087  2.7T Linux RAID

root@rescue ~ # mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 1ac1670b:7c95ed23:0028a58b:a51e25d4
  Creation Time : Mon Dec  2 20:14:13 2019
     Raid Level : raid0
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Mon Dec  2 20:14:13 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : a194544e - correct
         Events : 1

     Chunk Size : 8K

      Number   Major   Minor   RaidDevice State
this     1       8       17        1      active sync   /dev/sdb1

   0     0       8        5        0      active sync   /dev/sda5
   1     1       8       17        1      active sync   /dev/sdb1


root@rescue ~ # mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 1ac1670b:7c95ed23:0028a58b:a51e25d4
  Creation Time : Mon Dec  2 20:14:13 2019
     Raid Level : raid0
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Mon Dec  2 20:14:13 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : a194544e - correct
         Events : 1

     Chunk Size : 8K

      Number   Major   Minor   RaidDevice State
this     1       8       17        1      active sync   /dev/sdb1

   0     0       8        5        0      active sync   /dev/sda5
   1     1       8       17        1      active sync   /dev/sdb1

答案1

这是旧 mdadm 0.90 元数据的一个非常常见的问题。该元数据位于设备末尾的某个位置,但不是在最后一个扇区,而是在 64K 对齐的偏移处:

超级块的长度为 4K,并被写入 64K 对齐的块中,该块从设备末尾开始至少 64K 且小于 128K(即,获取超级块的地址,将设备的大小向下舍入到 64K 的倍数,并且然后减去 64K)。

来源:https://raid.wiki.kernel.org/index.php/RAID_superblock_formats#The_version-0.90_Superblock_Format

不幸的是,对于不是 64K 倍数大的整个磁盘设备,并且有一个分区延伸到非常接近磁盘末尾(进入最后一个部分 64K 块),这意味着最后一个分区的超级块位置,以及超级块位置对于整个驱动器来说,结果是完全相同的。

mdadm 手册页也提到了这个问题:

           0, 0.90
                 Use the original 0.90 format superblock.  This format
                 limits arrays to 28 component devices and limits
                 component devices of levels 1 and greater to 2 terabytes.
                 It is also possible for there to be confusion about
                 whether the superblock applies to a whole device or just
                 the last partition, if that partition starts on a 64K
                 boundary.

它还间接地建议了另一种解决方法:只是不要将分区设置为 64K 对齐;那么分区上的超级块将不会与磁盘进行 64K 对齐,因此,它不能被视为整个磁盘的超级块。

但就您而言,您的分区是 MiB 对齐的,这也使其成为 64K 对齐的。分区的超级块位置是2048(start) + 5860531087(size) - 15(size%128) = 5860532992,磁盘的超级块位置是5860533168(size) - 48(size%128) - 128 = 5860532992

换句话说,这里没有两个超级块;这是一回事。如果你mdadm --zero-superblock按照消息中的建议选择其中之一,那么你最终会失去两者。所以请不要这样做。

对于一个系统来说,在 mdadm.conf 中添加 DEVICE 行是一种简单的解决方法,但是一旦启动没有 mdadm.conf 的 Live CD 或 Initramfs,问题就会再次出现。


这是应避免使用 0.90 元数据的几个原因之一。请改用 1.x 元数据。

mdadm允许从 0.90 元数据格式转换为 1.0 元数据格式,例如:

mdadm --stop /dev/mdX
mdadm --assemble /dev/mdX --update=metadata /dev/sdx1 /dev/sdy1

从联机帮助页:

元数据选项仅适用于 v0.90 元数据数组,并将它们转换为 v1.0 元数据。该数组不能是脏的(即它不能需要同步)并且不能有写意图位图。

使用默认的 1.2 元数据(位于开头而不是末尾)会更好,但它需要移动所有数据并且无法就地转换。

相关内容