Ubuntu预配置(preseed)混合分区问题咨询:加密LVM与非加密分区配置可行性及空间报错解决
我以前总能在旧帖子里找到解决方案,但这次实在找不到有用的答案,只好来求助了。这个问题已经困扰我好一阵子了,相信你们能帮我搞定!先提前谢谢大家的帮助,另外也为我的英语失误致歉(我是法国人)。
我的需求是这样的:想要按照下面的分区方案安装Ubuntu:
- /boot
- /efi
- 加密LVM容器,里面包含:
- /(10GB)
- /tmp(2GB)
- /var/log(10GB)
- 四个非加密分区,各占可用磁盘的25%:
- /opt/space/1
- /opt/space/2
- /opt/space/3
- /opt/space/4
简单来说,/所在的LVM是加密的,但那四个主分区要不加密,各占约25%的可用空间。请问这个方案可行吗?
现在安装的时候,安装程序一直提示我没有足够的可用空间,但实际上磁盘是有空间的。
下面是我用的preseed配置和partman分区文件:
我的Preseed配置
d-i partman-auto/method crypto db_set partman-auto-lvm/new_vg_name crypt d-i partman-crypto/passphrase password WILLBEOVERRIDEN d-i partman-crypto/passphrase-again password WILLBEOVERRIDEN d-i partman-lvm/device_remove_lvm boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true d-i partman-auto-lvm/guided_size string max d-i partman-auto-lvm/new_vg_name string crypt d-i partman-auto/choose_recipe select mytest d-i partman-auto/expert_recipe_file string /cdrom/mytest/installer/mytest.partman d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman-md/device_remove_md boolean true d-i partman-basicfilesystems/no_mount_point boolean false
我的partman分区配方文件(mytest.partman)
mytest :: 538 538 538 free $iflabel{ gpt } method{ efi } format{ } . 512 512 512 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } options/nosuid{ nosuid } options/nodev{ nodev } options/noexec{ noexec } options/noauto{ noauto } . 10240 10240 10240 ext4 $lvmok{ } in_vg { crypt } lv_name{ root } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . 2048 2048 2048 ext4 $lvmok{ } in_vg { crypt } lv_name{ var_log } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /var/log } options/nosuid{ nosuid } options/nodev{ nodev } options/noexec{ noexec } . 1024 1024 1024 ext4 $lvmok{ } in_vg { crypt } lv_name{ tmp } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /tmp } options/nosuid{ nosuid } options/nodev{ nodev } options/noexec{ noexec } . 2048 2048 2048 linux-swap; $lvmok{ } in_vg { crypt } lv_name{ swap } method{ swap } format{ } . 5000 1000000000 1000000000 ext4 $defaultignore{ } $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /opt/space/1 } label{ 1 } . 5000 1000000000 1000000000 ext4 $defaultignore{ } $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /opt/space/2 } label{ 2 } . 5000 1000000000 1000000000 ext4 $defaultignore{ } $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /opt/space/3 } label{ 3 } . 5000 1000000000 1000000000 ext4 $defaultignore{ } $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /opt/space/4 } label{ 4 } .
方案可行性分析
首先可以明确:你的需求是完全可行的——Ubuntu的preseed支持混合使用加密LVM和独立的非加密分区,关键是分区配方的逻辑要正确。
空间报错的可能原因及解决办法
你遇到的“无可用空间”报错,大概率是因为当前的partman配方存在以下问题:
加密LVM的空间分配逻辑冲突
你设置了d-i partman-auto-lvm/guided_size string max,这会让安装程序尝试把所有剩余空间都分配给加密LVM卷组,导致后面的非加密分区没有剩余空间可用。这就是报错的核心原因。解决办法:把
guided_size从max改成一个固定值,或者改成一个百分比,预留出足够的空间给四个非加密分区。比如,如果你的总磁盘是100GB,加密LVM部分需要约24GB(10+2+10+2),那可以设置:d-i partman-auto-lvm/guided_size string 24GB或者用百分比:
d-i partman-auto-lvm/guided_size string 24%非加密分区的尺寸定义问题
当前配方里四个非加密分区的尺寸是5000 1000000000 1000000000 ext4,这表示最小5000MB,最大1000000000MB,默认取最大值。但如果LVM已经占了所有空间,这些分区自然无法创建。调整建议:把这四个分区的尺寸逻辑改成按剩余空间均分。partman配方里可以通过设置
1 1000000000 -1来让每个分区尽可能占用剩余空间的1/4,修改后的单分区配置如下:1 1000000000 -1 ext4 $defaultignore{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /opt/space/1 } label{ 1 } .另外三个分区做同样的修改即可。
不必要的
$primary{ }标记
你的配方里给四个非加密分区都加了$primary{ },虽然GPT分区表没有主分区数量限制,但这个标记可能会干扰分区分配逻辑,建议去掉,避免不必要的冲突。
额外注意事项
- 确保你的磁盘已经被正确擦除或有足够的未分配空间,安装程序不会自动覆盖已有的分区(你的配置里设置了
confirm_nooverwrite boolean true,所以要提前准备好未分配空间)。 - 可以先在虚拟机里测试调整后的配置,确认分区方案符合预期后再在物理机上操作,避免数据丢失。
备注:内容来源于stack exchange,提问作者Thomas B

