尽管阅读了网上的各种帖子和答案,但我仍然不清楚这些<minimal size> <priority> <maximal size>
参数partman-auto/expert_recipe
实际上是如何转化为确定最终分配的磁盘空间的。
在下面的示例中,底层磁盘有 64G 空间,其中分配应该是:
- 1G 至
/boot
- 8G 至
/home
- 10G 至
/usr
- 等等(请参阅下面 MiB 中的完整规范
preseed/ubuntu-server-unattended.seed
)
实际结果始终相差几百 MB:
我已经看到并阅读了以下内容,但在我看来,它们似乎都没有用简单的措辞同意或澄清该priority
领域实际如何表现并转化为最终尺寸。
- https://secopsmonkey.com/custom-partioning-using-preseed.html
- https://cptyesterday.wordpress.com/2012/06/17/notes-on-using-expert_recipe-in-debianubuntu-preseed-files/
- https://serverfault.com/questions/953322/preseed-automatic-partitioning
- https://serverfault.com/questions/722021/preseeding-debian-install-efi?noredirect=1&lq=1
- https://serverfault.com/questions/550072/preseeding-ubuntu-partman-recipe-using-lvm-and-raid?rq=1
- https://salsa.debian.org/installer-team/debian-installer/-/blob/buster/doc/devel/partman-auto-recipe.txt
在这个例子中,值的总和<max>
甚至远未达到 64GB 的限制。因此<priority>
为了使实际大小与字段对齐,我需要具体设置每个值为何<max>
?
准确规格preseed/ubuntu-server-unattended.seed
:
d-i partman-auto/method string lvm
d-i partman/default_filesystem string ext4
d-i partman-auto/choose_recipe select boot-root
d-i partman-auto/expert_recipe string \
boot-root :: \
500 1000 1000 ext2 \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext2 } \
label{ boot } \
mountpoint{ /boot } \
. \
4096 8192 8192 $default_filesystem \
$lvmok{ } \
lv_name{ RootVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ / } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/discard{ discard } \
options/iversion{ iversion } \
. \
1024 4096 4096 $default_filesystem \
$lvmok{ } \
lv_name{ HomeVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ /home } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/nosuid{ nosuid } \
options/nodev{ nodev } \
. \
8192 10240 10240 $default_filesystem \
$lvmok{ } \
lv_name{ UsrVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ /usr } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/nodev{ nodev } \
. \
2048 4096 4096 $default_filesystem \
$lvmok{ } \
lv_name{ VarLogAuditVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ /var/log/audit } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/nodev{ nodev } \
options/nosuid{ nosuid } \
. \
2048 4096 4096 $default_filesystem \
$lvmok{ } \
lv_name{ VarLogVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ /var/log } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/nodev{ nodev } \
options/nosuid{ nosuid } \
. \
2048 8192 -1 $default_filesystem \
$lvmok{ } \
lv_name{ VarVol } \
method{ format } \
format{ } \
use_filesystem{ } \
mountpoint{ /var } \
$default_filesystem{ } \
options/defaults{ defaults } \
options/nodev{ nodev } \
options/nosuid{ nosuid } \
.
来自规格:
<limits>::=<minimal size>_<priority>_<maximal size>_<parted fs>
<minimal size>
是分区允许的最小大小(以兆字节为单位)。它四舍五入为磁柱大小,因此如果您将其设置<minimal size>
为 20 MB,而磁柱大小为 12 MB,那么分区可能只有 12 MB。这些大小也可以以百分比形式给出,这使得大小为系统总 RAM 的百分比,或者(从 partman-auto 87 开始)以数字加百分比形式给出(例如“2000+50%”),这使得大小为该数字加系统总 RAM 的百分比。
<priority>
大小通常在<minimal size>
和之间<maximal size>
。它决定了此分区在与其他分区争夺大小时的优先级。请注意,如果 太小(相对于其他分区的优先级而言),则此分区的大小将接近 。这就是为什么建议为小分区分配<priority>
大于 的大小<maximal size>
。
<maximal size>
是分区的最大大小,即没有理由将此分区扩大到更大的极限大小。特殊值“-1”用于表示无限的分区大小。
规范似乎不成立的部分是这里:
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
这意味着如果磁盘空间允许,每个磁盘都x
应该有一个上限max[i]
。在本例中,这应该成立,因为即使所有磁盘空间加起来,剩余空间也绰绰有余max
。那么,到底是怎么回事呢?
答案1
为了使实际大小与字段对齐,我需要具体设置每个值为何?
您的分区与字段对齐<max>
。这些工具只是使用不同的单位。Partman 使用 MB。 lsblk
使用 MiB 和 GiB。例如,您的/boot
分区定义为最大值1000
。这是1000 MB
,等于953 MiB
。
其他人也都一致
- 1000 MB == 953.674 MiB
- 8192 MB == 7.629395 GiB
- 4096 MB == 3.814697 GiB
- 10240 MB == 9.5367432 GiB
也可以看看