V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

ubuntu/debian 如何才能把 lvm thin 逻辑卷上的分区作为根文件系统?

  •  
  •   wniming · 1 天前 · 694 次点击

    我想用物理机直接启动 pve 创建的虚拟机,pve 使用 lvm thin 逻辑卷来存储虚拟机的磁盘,如果虚拟机是 fedora 的话很容易就能实现,比如我对 fedora 虚拟机的 dracut 做了以下的一点修改:

    root@develop:/lib/dracut/modules.d# diff -u 90lvm/module-setup.sh 90lvm/module-setup.sh.bak 
    --- 90lvm/module-setup.sh	2025-08-18 19:38:58.989838506 +0800
    +++ 90lvm/module-setup.sh.bak	2025-08-18 19:30:54.839828659 +0800
    @@ -49,7 +49,6 @@
     # called by dracut
     install() {
         inst_multiple lvm grep
    -    inst_multiple kpartx
     
         if [[ $hostonly_cmdline == "yes" ]]; then
             local _lvmconf
    root@develop:/lib/dracut/modules.d# 
    root@develop:/lib/dracut/modules.d# diff -u 90lvm/lvm_scan.sh 90lvm/lvm_scan.sh.bak 
    --- 90lvm/lvm_scan.sh	2025-08-18 19:39:06.604838587 +0800
    +++ 90lvm/lvm_scan.sh.bak	2025-08-18 13:59:44.755601855 +0800
    @@ -150,7 +150,6 @@
                 # if the LV is not lised as complete.
                 # shellcheck disable=SC2086
                 lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo
    -            kpartx -av "/dev/$LV" 
             fi
         done
     fi
    root@develop:/lib/dracut/modules.d# 
    root@develop:/lib/dracut/modules.d# 
    
    

    然后用以下命令在虚拟机里生成一个用于物理机直接启动用的 initramfs:

    dracut -f ~/initramfs-6.14.0-63.fc42.x86_64.guest.img -a "lvm" --add-drivers "nvme"
    

    然后把这个 initramfs 和虚拟机的内核以及虚拟机 /boot/loader/entries/ 目录下的 grub 启动项拷贝到物理机的 boot 分区,然后再给内核命令行上加上一个 "rd.lvm=1 rd.lvm.lv=thin/desktop" 这样的配置就能实现直接从物理机启动虚拟机的系统了,这个内核命令行结合上面对 dracut 的修改可以实现在 initramfs 里把名为 thin 的 thin pool 里的名为 desktop 逻辑卷上的分区激活,然后 dracut 就能通过虚拟机的根文件系统的 UUID 找到根分区了,也就和正常的启动没有区别了,启动后用 lsblk 查看效果如下:

    d@fedora-desktop:~$ lsblk
    NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    nvme1n1                      259:0    0   3.6T  0 disk 
      thin-pool_tmeta            252:0    0   3.6G  0 lvm  
        thin-pool-tpool          252:2    0   3.6T  0 lvm  
          thin-desktop           252:3    0   200G  0 lvm  
            thin-desktop1        252:4    0   600M  0 part /boot/efi
            thin-desktop2        252:5    0     1G  0 part /boot
            thin-desktop3        252:6    0 198.4G  0 part /home
                                                           /
          thin-pool              252:7    0   3.6T  1 lvm  
      thin-pool_tdata            252:1    0   3.6T  0 lvm  
        thin-pool-tpool          252:2    0   3.6T  0 lvm  
          thin-desktop           252:3    0   200G  0 lvm  
            thin-desktop1        252:4    0   600M  0 part /boot/efi
            thin-desktop2        252:5    0     1G  0 part /boot
            thin-desktop3        252:6    0 198.4G  0 part /home
                                                           /
          thin-pool              252:7    0   3.6T  1 lvm  
    

    可以看到根文件系统所在的块设备是/dev/mapper/thin-desktop3 ,这个块设备是/dev/mapper/thin-desktop 这个 lvm thin 逻辑卷的一个分区。

    我想在 debian 13 系统上实现一样的效果,但是我对 debian 不熟悉,有没有非常熟悉 debian 或 ubuntu 的老哥们能帮我想一个简单一点的办法搞定这个,真的不想去啃 debian 系的 initramfs 的生成逻辑,感觉那一套和 redhat 系用 dracut 制作 initramfs 的方式比起来实在是太落后了。

    2 条回复    2025-08-18 23:10:58 +08:00
    pagxir
        1
    pagxir  
       1 天前 via Android
    那你可以直接使用 Fedora 的 initramfs+kernel+module 其他的用 Debian 就好了
    oott123
        2
    oott123  
       1 天前 via Android
    一般不是会有生成 fallback 的 initramfs 吗,啥也不改用那个直接启动就行了吧
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1368 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 17:37 · PVG 01:37 · LAX 10:37 · JFK 13:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.