摘要: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 替换为您的。我刚刚在我的一个设备上这样做了,而且成功了。我发布这篇文章并不是真的为了你,因为你可能很久以前就解决了这个问题,但是为了其他遇到这种情况的人。