我的第一块硬盘 (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 所期望的读取性能加速。