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

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

摘要: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.

下面我将重点讨论 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

proc /proc proc nodev,noexec,nosuid 0 0

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

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]

看来这些 md 是在 mdadm.conf 中的 ARRAY 行中定义的:

猫/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

/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

如果我没看错的话,系统建议重写 mdadm.conf(以修复 md1 和 md3“当前处于活动状态,但...未在 mdadm.conf 中列出”),这将删除 mdadm.conf 中列出的 md1 和 md3。因此,我无法将错误消息和建议的修复方法(将 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 未列出,以及当前配置有什么问题(为什么会有错误消息)?所以那条思路(试图理解没有 ARRAY 谎言的生成文件如何有所帮助)也没有奏效。

这也许是在找错方向,但是像 sda1 这样的设备名称目前是否允许在 mdadm.conf 的 ARRAY 行中使用?我知道 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

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

答案1

我在这里找到了一个解决方案: 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

将我的 /dev/mdX 设备和 UUID 替换为您的。我刚刚在我的一个设备上这样做了,而且成功了。我发布这篇文章并不是真的为了你,因为你可能很久以前就解决了这个问题,但是为了其他遇到这种情况的人。

相关内容