最近我遇到了一些测试服务器问题。它是几天前安装的,一直运行良好,直到昨天,它重启后没有唤醒。引导加载程序未找到根设备。错误:
Gave up waiting for root device.
ALERT! /dev/mapper/vg_mru-lv_mru_root does not exists. dropping to shell!
我启动了恢复 shell,挂载了设备,chroot 到系统中,一切正常,所以我只是将 rootdelay 增加到 90 秒并重新启动。这样它又工作了一天。但现在我得到了同样的错误,然后是:
udevd[112]: worker [119] unexpectedly returned with status 0x0100
udevd[112]: worker[119] failed while handling '/devices/virtual/block/md0'
udevd[112]: worker [120] unexpectedly returned with status 0x0100
udevd[112]: worker[120] failed while handling '/devices/virtual/block/md1'
如果我等待大约 5 分钟,然后写入 exit int intramfs shell,启动将照常继续,并且计算机将完全正常运行。
在消息中,有几十行这样的内容:
Sep 30 21:58:48 mru-server kernel: [ 1038.291536] lost page write due to I/O error on dm-15
和
Sep 29 10:02:16 mru-server kernel: [ 0.845246] ACPI Warning: Incorrect checksum in table [OEMB] - A4, should be 9F (20090903/tbutils-314)
运行 ubuntu 10.04 的计算机,2 个 1TD 磁盘,镜像在 raid1 中,两个 raid 设备 md0 和 md1,每个设备都有一个 LVM 卷组。两个磁盘都通过了简短智能测试。内存也通过了一次 memtest86+。两天前测试了 24 小时。
Debian 错误#583917看起来有些相似,但是 Ubuntu 有旧版本的 mdadm。
我怀疑的另一件事是 lvm。当我在 intramfs shell 中执行 cat /proc/modules 时,有几十个 raid 模块,但没有 lvm 模块。
如果您需要,我可以为您提供额外的数据。
grub配置文件
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default="0"
if [ ${prev_saved_entry} ]; then
set saved_entry=${prev_saved_entry}
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z ${boot_once} ]; then
saved_entry=${chosen}
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_usr)'
search --no-floppy --fs-uuid --set 48111d09-5c3d-48e4-be9d-0ab141c8cb4a
if loadfont /share/grub/unicode.pf2 ; then
set gfxmode=640x480
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
fi
fi
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
set locale_dir=($root)/grub/locale
set lang=en
insmod gettext
if [ ${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.32-25-server' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
linux /vmlinuz-2.6.32-25-server root=/dev/mapper/vg_mru-lv_mru_root ro rootdelay=90
initrd /initrd.img-2.6.32-25-server
}
menuentry 'Ubuntu, with Linux 2.6.32-25-server (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
echo 'Loading Linux 2.6.32-25-server ...'
linux /vmlinuz-2.6.32-25-server root=/dev/mapper/vg_mru-lv_mru_root ro single
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-25-server
}
menuentry 'Ubuntu, with Linux 2.6.32-24-server' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
linux /vmlinuz-2.6.32-24-server root=/dev/mapper/vg_mru-lv_mru_root ro rootdelay=90
initrd /initrd.img-2.6.32-24-server
}
menuentry 'Ubuntu, with Linux 2.6.32-24-server (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
echo 'Loading Linux 2.6.32-24-server ...'
linux /vmlinuz-2.6.32-24-server root=/dev/mapper/vg_mru-lv_mru_root ro single
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-24-server
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
linux16 /memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
insmod raid
insmod mdraid
insmod lvm
insmod ext2
set root='(vg_mru-lv_mru_boot)'
search --no-floppy --fs-uuid --set 4523fbba-a68d-413a-9606-c68094438879
linux16 /memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
谢谢您的回答!
问候,安德拉兹
答案1
我最近在将一台机器从 Ubuntu Januty 升级到 Ubuntu Karmic 时遇到了这个问题。我也有两个卷组,其中一个有大约 20 个逻辑卷,另一个有 root 和一些快照。
我的问题是,仅添加一个 LVM 快照就会使 LVM 子系统的初始化时间超过内核等待根文件系统可用的时间。
解决方案是在 /boot/grub/menu.lst 中的内核行中添加“rootdelay=180”参数(此功能是我仍然使用 grub legacy 的原因之一)。
这确实会延长启动时间,但在长期运行的服务器上,我并不认为这是一个严重的问题。
答案2
您的磁盘是否支持 SMART?如果是,您能看看吗?在我看来,这似乎是磁盘故障。(或者可能是 RAM 故障)
答案3
我相信当涉及快照时,LVM 必须执行某种 GC。当您删除 vg_virt 上的测试 LV 时,是否还剩下许多快照?
答案4
好的,我想我解决了。
我有两个卷组,vg_mru 用于主机系统,vg_virt 用于虚拟系统。我最近一直在测试一些 LVM 快照功能,包括尝试覆盖超出其容量的快照。我还没有确切的原因,但删除 vg_virt 上的所有测试逻辑卷解决了这个问题。