如何使用 lvm2 精简池上的根分区启动我的笔记本电脑

如何使用 lvm2 精简池上的根分区启动我的笔记本电脑

我的笔记本电脑配置为双启动系统,装有 Ubuntu 14.04(和 Windows 8.1)。最近,我用 lvm2 分区(VG(卷组)LinuxBereich)替换了专用的根分区和交换分区,其中包含 LV(逻辑卷)LinuxSwap、LinuxRoot 和 LinuxHome。在精简池 LV RootArea 和 HomeArea 中,有根分区和主分区的副本,分别名为 Linux_Root 和 Linux_Boot。

  • 3.13.0-62-generic 从非池 LV 正确启动或恢复。
  • 3.13.0-63-generic 找不到根分区并进入 busybox shell。使用 lvm 激活 LVs LinuxSwap、LinuxRoot 和 LinuxHome 后,启动继续,没有出现其他问题。
  • 两个版本 (62/63) 均未从精简池中的 LV 启动。尝试:
    lvm lvchange -ay LinuxBereich/Linux_Root
    (或 Linux_Home、RootArea、HomeArea)
    来自 busybox shell,结果为:
    /sbin/modprobe 失败:1
    无法读取精简池目标版本。
    无法处理 LV Linux_Root:内核缺少精简池目标支持?

如果 LV 可以在 3.13.0-63-generic 中自动激活就好了。
如果系统从精简池启动就更好了。
欢迎提出任何想法。也许我需要更多的耐心。
你的
Wolfgang

解决方案:

  • 3.13.0-63-generic(和 3.13.0-65-generic)现在可以从 LV 启动,没有问题。
    原因是 /boot/initrd.img-3.13.0-63-generic 中缺少一个文件,而该文件存在于 /boot/initrd.img-3.13.0-63-generic 中:
    -rw-r--r-- 1 root root 272 2012 年 5 月 4 日 lib/udev/rules.d/85-lvm2.rules
    检查此类文件后得到:

ls -l /lib/udev/rules.d/85-lvm*
-rw-r--r-- 1 root root 272 2012 年 5 月 4 日 /lib/udev/rules.d/85-lvm2.rules.drblsave

因此文件存在,但已被重命名。

cp -p /lib/udev/rules.d/85-lvm2.rules.drblsave /lib/udev/rules.d/85-lvm2.rules

更新-initramfs -u

成功了。

要获取 initrd.img 的排序内容表:

对于 62 63 65 中的 n;执行 zcat /boot/initrd.img-3.13.0-$n-generic|cpio -itv|sort -k9>$n.lst;完成

不含修改时间和内核版本

对于 62 63 65 中的 n;do sed 's/3.13.0-6./3.13.0-6?/g' $n.lst|cut -c 1-42,56->$n.lsu;done

  • 由于没有内核支持,无法从精简池 LV 启动。这很奇怪,因为正在运行的系统能够处理精简卷。

    lsmod |grep -ie dm_thin_pool -e dm_persistent_data -e dm_bio_prison -e dm_bufio -e libcrc32c
    dm_thin_pool           46897  7 
    dm_persistent_data     61675  1 dm_thin_pool
    dm_bufio               27539  1 dm_persistent_data
    dm_bio_prison          15501  1 dm_thin_pool
    libcrc32c              12644  1 dm_persistent_data
    
    for n in  dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c;do modinfo $n;done|grep filename:|sort -u
    filename:       /lib/modules/3.13.0-65-generic/kernel/drivers/md/dm-bio-prison.ko
    filename:       /lib/modules/3.13.0-65-generic/kernel/drivers/md/dm-bufio.ko
    filename:       /lib/modules/3.13.0-65-generic/kernel/drivers/md/dm-thin-pool.ko
    filename:       /lib/modules/3.13.0-65-generic/kernel/drivers/md/persistent-data/dm-persistent-data.ko
    filename:       /lib/modules/3.13.0-65-generic/kernel/lib/libcrc32c.ko
    

因此创建了一个文件 /etc/initramfs-tools/hooks/lvm2thin:

    #!/bin/sh
    PREREQ=""
    prereqs()
    {
         echo "$PREREQ"
    }

    case $1 in
    prereqs)
         prereqs
         exit 0
         ;;
    esac

    . /usr/share/initramfs-tools/hook-functions
    # Begin real processing below this line
    copy_exec /lib/modules/${version}/kernel/drivers/md/dm-thin-pool.ko
    copy_exec /lib/modules/${version}/kernel/drivers/md/dm-bio-prison.ko
    copy_exec /lib/modules/${version}/kernel/drivers/md/dm-bufio.ko
    copy_exec /lib/modules/${version}/kernel/drivers/md/persistent-data/dm-persistent-data.ko

设置适当的权限。

    chmod 755 /etc/initramfs-tools/hooks/lvm2thin 
    ls -l /etc/initramfs-tools/hooks/lvm2thin 
    -rwxr-xr-x 1 root root 583 Okt  8 18:16 /etc/initramfs-tools/hooks/lvm2thin

然后再次

更新-initramfs -u

完毕。

相关内容