我正在尝试让 Preseed 文件在 119GB 硬盘上运行,但似乎空间不足。基本上我想做的是:
/dev/sda1 ext4 mountpoint /boot size 512MB
/dev/sda2 lvm into vg1 size 40GB
/dev/sda3 lvm into vg2 size 70GB
每个卷组中的一些逻辑卷。
我遇到的问题如下:
preseed 在创建物理分区、VG 和 LV 时到底如何工作?
它告诉我,我需要147930 MB
专家食谱,但我只有可用的119453 MB
。请注意,如果我手动分区,则磁盘空间绰绰有余,甚至还会剩余可用空间!
当它创建逻辑卷时,它不知道这些逻辑卷的空间将从已创建的卷组中分配?它直接从 /dev/sda 为 LV 分配可用空间吗?如果是这样,我怎样才能告诉它从每个 VG 中分配它?
这是专家的食谱:
d-i partman-auto/expert_recipe recipe1 :: \
511 512 512 ext4 \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
device{ /dev/sda1 } \
mountpoint{ /boot } . \
39999 40000 40000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda2 } \
vg_name{ rootvg } . \
69999 70000 70000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda3 } \
vg_name{ infravg } . \
100 1 100000 ext4 \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ /part1 } . \
5999 1 6000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ var_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var } . \
3999 1 4000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ usr_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /usr } . \
4999 1 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ root_lv } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ / } . \
1999 1 2000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ home_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /home } . \
4999 1 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ tmp_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /tmp } . \
8000 1 8000 linux-swap \
$lvmok{ } in_vg{ rootvg } \
lv_name{ swap } \
method{ swap } format{ } . \
999 1 1000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ opt_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt } . \
128 1 128 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ system_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /system } . \
100 1 100000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ free1_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part2 } . \
1000 1 1024 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ chef_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt/chef } . \
4999 1 5000 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ images_lv } 5000 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /images } . \
100 1 1000000 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ free2_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part3 } \
.
答案1
因此,经过一些研究(谷歌搜索的第 4、5 页!)我读到(而且我也很确定这是真的)partman/preseed 会将总大小计算为所有分区大小的总和,但事实并非如此。 LV 分区是否属于 VG 的一部分并不重要。
如果我添加最大大小数字,确实,我会得到 ~147000 MB。那么,我做了什么来解决这个问题呢?好吧,对于初学者来说,我将预置文件中分区的最小大小减小到最大大小的 1/4 或 1/2,然后将所有优先级设置为高于或等于最大大小(您可以找到这里和这里一些与此相关的附加信息)
这使得partman/preseed能够成功创建所有分区,即使它们的大小不正确。
为了达到正确的大小,我添加了一个 Late_command 脚本,它将所有逻辑卷的大小调整为正确的大小。
另外,为了保留手动完成分区时剩余的所有可用空间,我创建了虚拟分区,后来在同一个 Late_command 脚本中将其删除。
我知道这是非正统的,但这是与 preseed/partman 合作的唯一方法。
这也是分区方法:
d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string rootvg
d-i partman-auto-lvm/guided_size string 34%
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string infravg
d-i partman-auto-lvm/guided_size string 60%
d-i partman-auto/choose_recipe select diod
d-i partman-auto/expert_recipe diod :: \
511 512 512 ext4 \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
device{ /dev/sda1 } \
mountpoint{ /boot } . \
39999 40000 40000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda2 } \
vg_name{ rootvg } . \
69999 70000 70000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda3 } \
vg_name{ infravg } . \
100 1000 -1 ext4 \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ /part1 } . \
128 1000 128 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ system_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /system } . \
100 1500 1000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ opt_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt } . \
100 2500 2000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ home_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /home } . \
100 4500 4000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ usr_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /usr } . \
100 6000 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ root_lv } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ / } . \
100 5500 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ tmp_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /tmp } . \
100 6500 6000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ var_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var } . \
100 7500 8000 linux-swap \
$lvmok{ } in_vg{ rootvg } \
lv_name{ swap } \
method{ swap } format{ } . \
100 1000 -1 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ free1_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part2 } . \
100 2000 1024 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ chef_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt/chef } . \
100 4000 5000 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ images_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /images } . \
100 1000 -1 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ free2_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part3 } \
.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish
d-i partman/confirm_nooverwrite boolean true
d-i partman/confirm boolean true