缓慢的逻辑卷检测

缓慢的逻辑卷检测

最近我遇到了一些测试服务器问题。它是几天前安装的,一直运行良好,直到昨天,它重启后没有唤醒。引导加载程序未找到根设备。错误:

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 上的所有测试逻辑卷解决了这个问题。

相关内容