来自 update-initramfs 的 mdadm 警告(系统无法启动),mkconf 的建议修复似乎与 mdadm 的问题描述不一致

use*_*513 6 boot raid mdadm initramfs uuid

摘要:update-initramfs 说系统无法启动,消息指向 mkconf,它建议重写 mdadm.conf 似乎会破坏 RAID,系统启动(目前)但下次重新启动可能会杀死它,不清楚如何继续,mdadm.conf 看起来很好,但是 update-initramfs 警告告诉我什么?为什么 mkconf 似乎暗示了一些不好的东西?

我在 1and1.com 上有一台运行 Ubuntu 12.04 的专用服务器,并且“update-initramfs -u”报告了一条 mdadm 错误消息,表明服务器将无法正确重启。我查看了相关的配置文件,一直没能找出问题所在。自从看到这条消息后,我没有尝试重新启动,因为我不想在我无法物理访问的服务器上“只是看看会发生什么”(如果我无法访问正在运行的系统,可能会使诊断更加困难)我可以探查信息。)我觉得我应该尝试了解错误消息和系统配置,直到我确信重新启动可能会成功为止。

首先是错误信息(来自 update-initramfs -u):

W: mdadm: the array /dev/md3 with UUID dffcb503:bc157198:3fb6082e:e5593158
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.
W: mdadm: the array /dev/md1 with UUID a46d442b:4e5b8a52:3fb6082e:e5593158
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.
Run Code Online (Sandbox Code Playgroud)

下面我将重点放在 md1 上,因为那是 /boot 所在的位置(所以“需要引导”=== TRUE),但是 md3 也会生成相同的错误消息。

md 结构来自 ISP 的默认 Ubuntu 镜像,这部分系统没有被触及。驱动器/分区结构的唯一变化是扩大逻辑驱动器的大小(lvextend 和 resize2fs),这(虽然它可能会影响其他事情)似乎不会影响“/”(在 md1 上)及其启动能力。

猫 /etc/fstab

/dev/md1    /       ext3    defaults       1 1
/dev/sda2   none        swap    sw          
/dev/sdb2   none        swap    sw          
/dev/vg00/usr   /usr        ext4    errors=remount-ro       0 2
/dev/vg00/var   /var        ext4    errors=remount-ro       0 2
/dev/vg00/home  /home       ext4    errors=remount-ro   0 2
Run Code Online (Sandbox Code Playgroud)

proc /proc proc nodev,noexec,nosuid 0 0

我们可以看到md系统运行正常,md1在sda1和sdb1上:

cat /proc/mdstat
-----
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdb1[1] sda1[0]
      4194240 blocks [2/2] [UU]

md3 : active raid1 sdb3[0] sda3[1]
      1458846016 blocks [2/2] [UU]
Run Code Online (Sandbox Code Playgroud)

似乎这些 md 是在 ARRAY 行 mdadm.conf 中定义的:

cat /etc/mdadm/mdadm.conf

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 11 May 2010 20:53:30 +0200
# by mkconf $Id$

ARRAY /dev/md1 level=raid1 num-devices=2 devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md3 level=raid1 num-devices=2 devices=/dev/sda3,/dev/sdb3
Run Code Online (Sandbox Code Playgroud)

/boot 中最新的 initrd 是 initrd.img-3.2.0-37-generic,缓存在那里的 mdadm.conf 看起来相同(通过“gunzip -c /boot/initrd.img-3.2.0-37-generic | cpio -i --quiet --to-stdout etc/mdadm/mdadm.conf")

所以实际情况(正在运行的 md 以及它们是如何为引导定义的)对我来说看起来不错。回到“update-initramfs -u”错误消息,它建议将 mdadm.conf 与 /usr/share/mdadm/mkconf 的输出进行比较。这是我们开始看到一些看起来非常不同的东西的地方:

/usr/share/mdadm/mkconf

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
Run Code Online (Sandbox Code Playgroud)

如果我没看错,系统建议重写 mdadm.conf(以修复 md1 和 md3“当前处于活动状态,但...未在 mdadm.conf 中列出”)将从 mdadm 中删除 md1 和 md3 的列表.conf。所以我无法解决错误消息和建议的修复(将 mdadm.conf 从未列出更改为列出,但建议的修复在哪里从列出更改为未列出?)我无法 (1) 找到任何实际问题,并且 ( 2) 将错误消息与建议的修复程序协调一致,使我不信任 /usr/share/mdadm/mkconf 的输出(以及从 update-initramfs -u 引导我到那里的错误消息)。但我不想忽视系统的求助,尤其是系统中非常关键的部分。我相信操作系统知道我不知道的东西。实验(远程重启)是最后的手段。

在网上搜索其他有类似错误消息的人时,相关问题似乎涉及 mkconf 生成的 ARRAY 行与 mdadm.conf 中的当前不同(通常建议使用 mkconf 的输出,作为对 ARRAY 行的修复。)但在这种情况下,mkconf 根本没有提供 ARRAY 行,所以这行研究并没有导致相关的帮助。mdadm.conf 中的注释说它默认扫描 MD 超级块,因此如果 mdadm 可以从超级块中提取该信息,那么生成的文件省略对 md1/md3 的显式引用这一事实可能没问题(?)。但是如果是这样,为什么错误信息说问题是md1/md3是unlisted,以及当前配置有什么问题(为什么会出现错误消息)?因此,这种思路(试图了解没有 ARRAY 谎言的生成文件可能会有所帮助)也没有奏效。

这可能是错误的树,但当前是否允许在 ARRAY 行上的 mdadm.conf 中使用像 sda1 这样的设备名称?我知道 UUID 是首选,使用设备名称可能是错误消息的原因吗?如果是这样,哪些选项可能有效: (1) 不更改 mdadm.conf 并依靠系统继续根据设备名称组装 md1;(2) 使用 mkconf 的输出,完全没有明确的 md(没有设备名称,没有 UUID),依靠基于超级块的自动发现;(3) 找到 UUID 并为 mdadm.conf 编写新的 ARRAY 行(这既不是现有值,也不是 mkconf 建议的替换值)?

应如何确定此错误消息的原因,它想告诉我什么?

可能有用的其他信息:

mdadm --misc --detail /dev/md1

/dev/md1:
        Version : 0.90
  Creation Time : Sun Feb 24 19:11:59 2013
     Raid Level : raid1
     Array Size : 4194240 (4.00 GiB 4.29 GB)
  Used Dev Size : 4194240 (4.00 GiB 4.29 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Sun Apr 27 23:39:38 2014
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : a46d442b:4e5b8a52:3fb6082e:e5593158
         Events : 0.122

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

mdadm --misc --detail /dev/md3

/dev/md3:
        Version : 0.90
  Creation Time : Sun Feb 24 19:11:59 2013
     Raid Level : raid1
     Array Size : 1458846016 (1391.26 GiB 1493.86 GB)
  Used Dev Size : 1458846016 (1391.26 GiB 1493.86 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 3
    Persistence : Superblock is persistent

    Update Time : Sun Apr 27 23:43:41 2014
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : dffcb503:bc157198:3fb6082e:e5593158
         Events : 0.1883

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       1       8        3        1      active sync   /dev/sda3
Run Code Online (Sandbox Code Playgroud)

Mic*_*ver 6

我在这里找到了一个解决方案:http : //www.howtoforge.com/forums/showthread.php?t=65066

使用以下命令获取相关阵列的 UUID:(mdadm --misc --detail /dev/mdX其中 X 是阵列编号)并编辑/etc/mdadm/mdadm.conf并将它们替换为:

ARRAY /dev/md1 UUID=dffcb503:bc157198:3fb6082e:e5593158
ARRAY /dev/md3 UUID=a46d442b:4e5b8a52:3fb6082e:e5593158
Run Code Online (Sandbox Code Playgroud)

用你的替换我的 /dev/mdX 设备和 UUID。我只是在我的一个上做了这个并且它起作用了。我发布这个不是真的为你,因为你很可能在很久以前就解决了它,而是为其他发生这种情况的人发布的。

  • 如上所述,通过运行获取 UUID: mdadm --misc --detail /dev/mdX (其中 X 是数组编号) (2认同)