将 lvm2 root 转换为 lvm2 raid1 后无法启动

将 lvm2 root 转换为 lvm2 raid1 后无法启动

我的第一块硬盘 (sda) 上安装了 Ubuntu 12.10(无更新,内核 3.5.0-17-generic),它使用 MBR,分区为“为 ubuntu 使用整个磁盘”,启用了 LVM2。根文件系统位于 LVM2(VG:ubuntu)上。今天我添加了第二块大小相同的硬盘 (sdb),像第一块硬盘一样对其进行分区,创建了 lvm2 PV,并将根 LV 转换为 raid1:

pvcreate /dev/sdb5
vgextend ubuntu /dev/sdb5
lvconvert --type raid1 -m1 /dev/ubuntu/root /dev/sdb5

100% 重新同步后,我重新启动了,但 initramfs 无法找到根 fs:

Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
... (kernel messages)
Gave up waiting for root device. Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
   - Check root= (did the system wait for the right device?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  /dev/mapper/ubuntu-root does not exist.  
Dropping to a shell!

以下是模块列表:

(initramfs) cat /proc/modules
hid_generic
usbhid
hid
e1000
raid10
raid456
async_pq
async_xor
xor
async_memcpy
async_raid6_recov
raid6_pq
async_tx
raid1
raid0
multipath
linear
(initramfs) cat /proc/cmdline
BOOT_IMAGE=/vmlinux-3.5.0-17-generic root=/dev/mapper/ubuntu-root ro
(initramfs) ls /dev/mapper
control     ubuntu-swap_1

实用程序有输出lvm

lvm> pvscan
  PV /dev/sda5    VG ubuntu   lvm2 [ 13.76 GiB / 408.00 MiB free]
  PV /dev/sdb5    VG ubuntu   lvm2 [ 13.76 GiB / 508.00 MiB free]
lvm> vgscan
  Reading all physical volumes. This may take a while...
  Found volume group "ubuntu" using metadata type lvm2
lvm> lvscan
  inactive        '/dev/ubuntu/root' [13.26 GiB] inherit
  ACTIVE          '/dev/ubuntu/swap_1' [100.00 MiB] inherit

lvm> lvdisplay ubuntu
  --- Logical volume ---
  LV Path                /dev/ubuntu/root
  LV Name                root
  VG Name                ubuntu
  LV UUID                xxxxxxxxxxxxxxx
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2013-05-07
  LV Status              NOT available          <<<<< !!!!
  LV Size                13.26 GB
  Current LE             3394
  Mirrored volumes       2
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

失败lvchange -ay ubuntu了:

lvm>  lvchange -ay ubuntu
  /sbin/modprobe failed: 1
  Can't process LV root: raid1 target support missing from kernel?

initrd 缺少什么?

答案1

我在我的 Debian 系统上遇到了同样的问题;结果是由于 initramfs 中没有安装一些必要的模块导致的。

具体来说,在 /etc/initramfs-tools/modules 中添加以下几行后:

dm_mirror
dm_raid
dm_region_hash

并运行

update-initramfs -u -k all

我的系统启动正确。

请注意,我还没有检查所有这些行是否都是必需的。我认为至少默认情况下缺少 dm_raid 模块。

经过进一步搜索,发现 Debian 中有一个针对 initramfs-tools 的错误,与此问题有关:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699804

答案2

另一个选项是使用mirror类型而不是raid1。默认情况下应该可以工作,甚至 grub2 也支持它。因此,而不是

lvconvert --type raid1 -m1 /dev/ubuntu/root /dev/sdb5

做这个:

lvconvert --type mirror -m1 /dev/ubuntu/root /dev/sdb5

sdb5(最后不需要指定,LVM 会选择合适的 PV 来放置镜像。)

但是镜像类型有一个很大的缺点,它只能从第一个设备读取,因此你无法获得 RAID1 所期望的读取性能加速。

相关内容