Ubuntu 预置专家配方优先级/最大大小无法转化为正确结果

Ubuntu 预置专家配方优先级/最大大小无法转化为正确结果

尽管阅读了网上的各种帖子和答案,但我仍然不清楚这些<minimal size> <priority> <maximal size>参数partman-auto/expert_recipe实际上是如何转化为确定最终分配的磁盘空间的。

在下面的示例中,底层磁盘有 64G 空间,其中分配应该是:

  • 1G 至/boot
  • 8G 至/home
  • 10G 至/usr
  • 等等(请参阅下面 MiB 中的完整规范preseed/ubuntu-server-unattended.seed

实际结果始终相差几百 MB:

在此处输入图片描述

我已经看到并阅读了以下内容,但在我看来,它们似乎都没有用简单的措辞同意或澄清该priority领域实际如何表现并转化为最终尺寸。

在这个例子中,值的总和<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

也可以看看

相关内容