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

1 天前
 wniming

我想用物理机直接启动 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 的方式比起来实在是太落后了。

721 次点击
所在节点    Linux
2 条回复
pagxir
1 天前
那你可以直接使用 Fedora 的 initramfs+kernel+module 其他的用 Debian 就好了
oott123
1 天前
一般不是会有生成 fallback 的 initramfs 吗,啥也不改用那个直接启动就行了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1153290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX