简而言之

简而言之

简而言之

跟随指南如何在 GNU/Linux 下设置 RAID 1,我已经设置了RAID 1。通过各种方式检查RAID阵列的有效性,似乎是正常的。

然而,重新启动系统后,RAID 阵列无法工作。未按照 中的说明安装有问题的分区/etc/fstab。手动组装阵列,没有丢失任何数据。

新添加的内部/外部磁盘导致磁盘设备名称发生更改(例如系统将磁盘“重命名”sdd为),使我接受这是与此名称更改事实相关的问题。sde然而,这是无关紧要的,因为 RAID 阵列(也)是通过使用唯一的 UUID 构建的。

实际的问题是为什么在启动过程中阵列无法组装?要不然,Funtoo(所有情节发生的操作系统)的启动脚本在处理mdadm -assemble过程中做了什么?

故事很长

按照上面引用的分步指南,我在 Funtoo 下设置了 RAID 1。检查 RAID 1 阵列的有效性可以通过多种方式完成,主要是使用mdadm工具本身的功能。

具体来说,数组的详细信息是通过使用mdadm带有-D标志的工具来检索的。使用该标志检查属于该阵列的磁盘-Emdadm.conf如果相应的配置文件包含正确的指令(即哪个 md 设备、它的 UUID 是什么等等),则可以轻松读取该配置文件。最后,监视文件/proc/mdadm对于确保两个磁盘都处于活动状态并且“同步”非常重要。

以下是有关所面临情况的更详细信息。

mdadm -D /dev/md0

/dev/md0:
        Version : 1.2
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 1953382208 (1862.89 GiB 2000.26 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Thu Jul 18 10:33:37 2013
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : Resilience:0  (local to host Resilience)
           UUID : 73bf29ca:89bff887:79a26531:b9733d7a
         Events : 6455

    Number   Major   Minor   RaidDevice State
       2       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1

根据命令历史记录,我执行了以下操作

# trying to follow the guide -- various tests...
      ...
      979  18.Jul.13 [ 00:09:07 ] mdadm --zero-superblock /dev/sdd1
      980  18.Jul.13 [ 00:09:17 ] mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdd1
      990  18.Jul.13 [ 00:15:58 ] mdadm --examine --scan

# creating/checking the configuration file

      992  18.Jul.13 [ 00:16:17 ] cat /etc/mdadm.conf 
      993  18.Jul.13 [ 00:16:33 ] mdadm --examine --scan | tee /etc/mdadm.conf
      994  18.Jul.13 [ 00:16:35 ] cat /etc/mdadm.conf 

# after some faulty attempts, finally it goes

      997  18.Jul.13 [ 00:24:45 ] mdadm --stop /dev/md0
      998  18.Jul.13 [ 00:24:54 ] mdadm --zero-superblock /dev/sdd1
      999  18.Jul.13 [ 00:25:04 ] mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdd1
     1005  18.Jul.13 [ 00:26:39 ] mdadm --examine --scan | sudo tee /etc/mdadm.conf
     1046  18.Jul.13 [ 03:42:57 ] mdadm --add /dev/md0 /dev/sdc1

配置文件内容/etc/mdadm.conf如下:

ARRAY /dev/md/0  metadata=1.2 UUID=73bf29ca:89bff887:79a26531:b9733d7a name=Resilience:0

从以下内容可以看出,一切正常/proc/mdadm

Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] [raid10] [linear] [multipath] 
md0 : active raid1 sdc1[2] sdd1[1]
      1953382208 blocks super 1.2 [2/2] [UU]

unused devices: <none>

此后,磁盘已同步,访问正常。关闭系统、添加另一个磁盘(外部(通过 USB)或内部)并重新启动系统,导致 RAID1 停止工作!原因是,如果我没记错的话,是磁盘设备号的改变。

在此示例中,前者sdd1变为在启动系统之前由“新”内部磁盘或连接的外部 USB HDDsde1保留sdd1并指示自动安装。

通过删除所有其他磁盘、停止阵列并重新组装它,可以非常轻松地“恢复”“失败”的阵列。在尝试并最终成功取回 ARRAY 时发出的一些命令是:

# booting and unsuccessfully trying to add the "missing" disk

     1091  18.Jul.13 [ 10:22:53 ] mdadm --add /dev/md0 /dev/sdc1
     1092  18.Jul.13 [ 10:28:26 ] mdadm --assemble /dev/md0 --scan
     1093  18.Jul.13 [ 10:28:39 ] mdadm --assemble /dev/md0 --scan --force
     1095  18.Jul.13 [ 10:30:36 ] mdadm --detail /dev/md0

# reading about `mdadm`, trying to "stop", incomplete command though

     1096  18.Jul.13 [ 10:30:45 ] mdadm stop
     1097  18.Jul.13 [ 10:31:12 ] mdadm --examine /dev/sdd
     1098  18.Jul.13 [ 10:31:16 ] mdadm --examine /dev/sdd1
     1099  18.Jul.13 [ 10:31:20 ] mdadm --examine /dev/sdc
     1100  18.Jul.13 [ 10:31:21 ] mdadm --examine /dev/sdc1

# reading again, stop it -- the right way

     1101  18.Jul.13 [ 10:33:19 ] mdadm --stop /dev/md0

# assemble & check

     1102  18.Jul.13 [ 10:33:25 ] mdadm --assemble /dev/md0 --scan
     1111  18.Jul.13 [ 10:34:17 ] mdadm --examine /dev/sd[cd]1

# does the Array have a UUID?

     1112  18.Jul.13 [ 10:37:36 ] UUID=$(mdadm -E /dev/sdd1|perl -ne '/Array UUID : (\S+)/ and print $1')

# below, learning how to report on the Array

     1115  18.Jul.13 [ 10:42:26 ] mdadm -D /dev/md0
     1116  18.Jul.13 [ 10:45:08 ] mdadm --examine /dev/sd[cd]1 >> raid.status
     1197  18.Jul.13 [ 13:16:59 ] mdadm --detail /dev/md0
     1198  18.Jul.13 [ 13:17:29 ] mdadm --examine /dev/sd[cd]1
     1199  18.Jul.13 [ 13:17:41 ] mdadm --help
     1200  18.Jul.13 [ 13:18:41 ] mdadm --monitor /dev/md0
     1201  18.Jul.13 [ 13:18:53 ] mdadm --misc /dev/md0

但是,我希望这种情况不会发生,并且当基于 UUID 和/或标签进行安装时,能够像其他磁盘/分区一样安全地进行操作。

中的相应条目/etc/fstab读取(笔记,我跳过了选项nosuid,nodev

/dev/md0        geo     xfs     defaults        0 2

的详细信息sdc1,输出来自mdadm -E /dev/sdc1

/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
           Name : Resilience:0  (local to host Resilience)
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 5552ba2d:8d79c88f:c995d052:cef0aa03

    Update Time : Fri Jul 19 11:14:19 2013
       Checksum : 385183dd - correct
         Events : 6455


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing)

有关分区的详细信息

的详细信息sdd1,输出来自mdadm -E /dev/sdd1

/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
           Name : Resilience:0  (local to host Resilience)
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0

    Update Time : Fri Jul 19 11:14:19 2013
       Checksum : c1df68a0 - correct
         Events : 6455


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)

再次添加“新”内部磁盘并重新启动后,我遇到了同样的问题。

mdadm -E /dev/sdd1报告

mdadm: No md superblock detected on /dev/sdd1.

尽管mdadm -E /dev/sde1

/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
           Name : Resilience:0  (local to host Resilience)
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0

    Update Time : Fri Jul 19 11:34:47 2013
       Checksum : c1df6d6c - correct
         Events : 6455


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)

mdadm --detail /dev/md0

mdadm: md device /dev/md0 does not appear to be active.

cat /proc/mdstat在阅读时

Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] [raid10] [linear] [multipath] 
md0 : inactive sde1[1](S)
      1953382400 blocks super 1.2

unused devices: <none>

请注意,根据吉尔斯的观察,此时报告的块 (1953382400) 与 报告的块不匹配Array Size : 1953382208,如上面(或下面)所示。显然,这里出了问题。

的(部分)输出mdadm -Evvvvs

/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
           Name : Resilience:0  (local to host Resilience)
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0

    Update Time : Fri Jul 19 11:34:47 2013
       Checksum : c1df6d6c - correct
         Events : 6455


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing)
/dev/sde:
   MBR Magic : aa55
Partition[0] :   3907026944 sectors at         2048 (type fd)

/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
           Name : Resilience:0  (local to host Resilience)
  Creation Time : Thu Jul 18 00:25:05 2013
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
     Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
  Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 5552ba2d:8d79c88f:c995d052:cef0aa03

    Update Time : Fri Jul 19 11:34:47 2013
       Checksum : 385188a9 - correct
         Events : 6455


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :   3907026944 sectors at         2048 (type fd)

检查fdisk -l,以前的sdc sdd磁盘s,现在是sdb根据其余驱动器的大小sde识别m 个磁盘)。看来“它”还在寻找/寻找?sdc1sdd1

根据评论部分中的建议,我添加了更多详细信息。

按照德罗伯特的评论中的建议,ARRAY 停止并成功重新组装:

# stop it!
mdadm --stop /dev/md0
mdadm: stopped /dev/md0

# re-assemble -- looks good!
mdadm --assemble -v --scan

mdadm: looking for devices for /dev/md/0
mdadm: no RAID superblock on /dev/sdf1
mdadm: no RAID superblock on /dev/sdf
mdadm: no RAID superblock on /dev/sde
mdadm: no RAID superblock on /dev/sdd1
mdadm: no RAID superblock on /dev/sdd
mdadm: no RAID superblock on /dev/sdc
mdadm: no RAID superblock on /dev/sdb
mdadm: no RAID superblock on /dev/sda6
mdadm: no RAID superblock on /dev/sda5
mdadm: no RAID superblock on /dev/sda4
mdadm: no RAID superblock on /dev/sda3
mdadm: no RAID superblock on /dev/sda2
mdadm: no RAID superblock on /dev/sda1
mdadm: no RAID superblock on /dev/sda
mdadm: /dev/sde1 is identified as a member of /dev/md/0, slot 1.
mdadm: /dev/sdc1 is identified as a member of /dev/md/0, slot 0.
mdadm: added /dev/sde1 to /dev/md/0 as 1
mdadm: added /dev/sdc1 to /dev/md/0 as 0
mdadm: /dev/md/0 has been started with 2 drives.

# double-check
mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 name=Resilience:0 UUID=73bf29ca:89bff887:79a26531:b9733d7a

新问题,如何在不丢失数据的情况下解决这个问题?根据评论中的讨论和建议,它与启动过程有关吗? 也许有问题的挂载点的权限?

mdadm未注册为启动服务。添加它并重新启动,但并没有解决问题。关于dmesg失败的地方还有一些可能很有趣的细节:

[   25.356947] md: raid6 personality registered for level 6
[   25.356952] md: raid5 personality registered for level 5
[   25.356955] md: raid4 personality registered for level 4
[   25.383630] md: raid1 personality registered for level 1
[   25.677100] md: raid0 personality registered for level 0
[   26.134282] md: raid10 personality registered for level 10
[   26.257855] md: linear personality registered for level -1
[   26.382152] md: multipath personality registered for level -4
[   41.986222] md: bind<sde1>
[   44.274346] XFS (md0): SB buffer read failed
[   55.028598] ata7: sas eh calling libata cmd error handler
[   55.028615] ata7.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0
[   55.046186] ata7: sas eh calling libata cmd error handler
[   55.046209] ata7.00: cmd ef/c2:00:00:00:00/00:00:00:00:00/40 tag 0
[   55.278378] ata8: sas eh calling libata cmd error handler
[   55.278406] ata8.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0
[   55.349235] ata8: sas eh calling libata cmd error handler
[   55.349290] ata8.00: cmd ef/c2:00:00:00:00/00:00:00:00:00/40 tag 0
[  105.854112] XFS (md0): SB buffer read failed

进一步检查有问题的 XFS 分区sde1

xfs_check /dev/sde1
xfs_check: /dev/sde1 is not a valid XFS filesystem (unexpected SB magic number 0x00000000)
xfs_check: WARNING - filesystem uses v1 dirs,limited functionality provided.
xfs_check: read failed: Invalid argument
cache_node_purge: refcount was 1, not zero (node=0x22a64a0)
xfs_check: cannot read root inode (22)
bad superblock magic number 0, giving up

事实证明,有问题的 XFS 分区不健康。

XFS 文件系统虽然并非不可能,但很可能不是问题的根源。根据 Gilles 的评论,属于 RAID 阵列一部分的分区,不是 XFS 文件系统!文件系统从一个偏移量开始,首先有一个 RAID 标头。

问题)

在一开始的时候

  • 是否可以将 RAID 1 阵列“锁定”为仅适用于独立于磁盘设备名称的特定磁盘/分区?

  • 例如,使用阵列的 UUID 是否足以/etc/fstab避免磁盘设备名称的更改?

重新查找问题后

  • 在 Funtoo 启动过程的哪个阶段尝试组装 RAID 阵列?具体如何?哪里可以修改/调整?

答案1

好的——我不太确定你的盒子出了什么问题,但是快速总结一下这是怎么回事怎么样?应该工作,帮助排除故障。

当您创建具有持久超级块的阵列(相当合理的默认值以及您完成的方式)时,mdadm 会在每个磁盘上存储各种元数据。该元数据中包含数组 UUID、数组名称和槽号。每个磁盘存储相同的 UUID 和名称。每个磁盘的插槽号都不同。 (如果您想查看元数据,请使用mdadm -E

在启动时可以通过三种不同的方式组装阵列:

  1. 内核可以做到。这就是 0xFD 自动检测分区类型的作用。这种方法令人泄气。
  2. 您的发行版的脚本可以将其作为 的一部分udev,使用增量组装,在设备mdadm出现时将其传递给它们。这是最新的方法。当它正常工作时,它可以处理各种异步探测设备,例如 USB,而不会出现任何问题。
  3. 您的发行版的脚本mdadm --assemble --scan将在所有设备被认为已被识别后调用。例如,USB 需要 Kluges(基本上是睡眠以确保设备节点已创建)。在此模式下,mdadm检查(默认情况下)/proc/partitions以查找系统上的所有块设备,并扫描每个块设备以查找超级块。

发行版脚本可以在 initramfs 或更高版本中执行此操作。或者,有时,某些阵列是从 initramfs(获取根文件系统所需的阵列)完成的,而其他阵列则在启动后完成。

无论如何完成,mdadm 都会通过查看 UUID、名称和插槽号来匹配设备。它需要为您的两磁盘阵列找到 #0 和 #1。它实际上并不关心它是哪个设备(默认情况下,您可以在 mdadm.conf 中将其配置为关心)

答案2

是否可以将 RAID 1 阵列“锁定”为仅适用于独立于磁盘设备名称的特定磁盘/分区?

您应该能够使用下面的别名/dev/disk/by-*来完成此操作。我建议/dev/disk/by-id/*,因为这些将直接映射到物理磁盘上应该容易看到的信息,但任何一个目录都应该包含在您的场景中有用的符号链接。使用哪一个很大程度上取决于品味。

例如,在我的系统上,/dev/disk/by-id/scsi-SATA_ST31000340NS_9QJ26FT9-part1 映射到 /dev/sdb1。那就是公共汽车,模型,连续剧分割导致相关分区的编号。如果阵列中的驱动器发生故障,您可以使用mdadm问题中的命令之类的命令来明确确定哪个物理驱动器是罪魁祸首。

例如,在 /etc/fstab 中使用阵列的 UUID 是否足以避免磁盘设备名称的更改?

我不太熟悉 MD RAID,但这不会只影响对整个阵列的引用吗?如果您担心 /dev/md0 突然显示为 /dev/md1,也许还有其他方法可以提供对数组本身的固定引用?

相关内容