是否可以从 /boot 位于 lvm2 raid1 分区内的系统引导。我尝试了多种配置,但我还没有发现如何做到这一点。
我正在使用两个 2TB 磁盘。每个磁盘包含一个 GPT 分区表,其中有一个 1MB BIOS_Grub 分区和一个 2TB 分区。每个磁盘上的2TB大分区作为物理卷分配给lvm2。
我使用 Ubuntu 14.04 LTS 作为我的操作系统。最初我为 Ubuntu 配置了两个 5GB 逻辑卷。第一个用于 /,第二个用于 /home。 Ubuntu 设置没有选项来配置这些逻辑卷的段类型为 raid1。所以,我只是按照默认值安装它,这是线性的。这工作正常,系统启动没有任何问题。
然后我重新启动到 Live CD 环境,并使用以下命令将两个分区转换为 raid1。
lvconvert --type raid1 -m1 /dev/vg_storage/os_root
lvconvert --type raid1 -m1 /dev/vg_storage/os_home
这些操作完成,没有任何错误。然后我监控了 lvm2 镜像这两个逻辑卷的进度,直到 copy% 为 100%
root@ubuntu:~# lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
os_home vg_storage rwi-a-r-- 4.66g 100.00
os_root vg_storage rwi-a-r-- 4.66g 100.00
现在系统无法启动。 BIOS 尝试从两个磁盘中的第一个启动后立即收到以下错误。我留下了 grub 救援提示。
error: disk 'lvmid/L1VIor-PKIM-mtCO-TUQ2-iWe2-ndnY-df2wOu/yCDXMZ-2q4X-jbJJ-qZhI-sHNL-hrjw-Q5bg6v' not found.
Entering rescue mode...
grub rescue>
我认为有一个 grub2 模块尚未加载。支持lvm2的raid1功能的一个。 grub2 中尚不存在这种支持。
答案1
四年过去了……
是的,从镜像 LVM 卷 ( lvconvert -m1 /dev/vg0/root
) 启动在 Debian 9 (stretch) 中适用。 GRUB lvm.mod 模块可以立即识别镜像 LVN 卷,GRUB 成功读取/boot/grub/grub.cfg
驻留在镜像根卷上的卷,显示启动菜单,加载内核和 initrd。然后就卡住了,无法挂载LVM root:
device-mapper: table: 254:5: raid: Failed to run raid array
device-mapper: reload ioctl on (254:5) failed: Invalid argument
这是通过添加以下模块/etc/initramfs-tools/modules
(顺序问题)并运行来解决的update-initramfs
:
xor
async_tx
raid6_pq
async_xor
async_pq
async_memcpy
async_raid6_recov
md_mod
raid1
raid456
dm_raid
dm_log
dm_region_hash
dm_mirror
lvm
(也许可以省略 raid6_pq、async_raid6_recov、raid456——我现在无法验证)。
现在镜像 LVM 根目录应该可以正常挂载了。最后一步是使两个物理磁盘均可启动,因此如果其中任何一个出现故障,另一个仍将启动系统:
pvdisplay -m | egrep 'PV Name|_rimage_' # find out which physical disks root lv resides on
grub-install /dev/firstdisk
grub-install /dev/seconddisk