安装程序如何计算要创建的交换分区的大小?据推测它基于已安装的 RAM 大小,但这是否取决于 RAM 的大小?
答案1
这将相当技术性,但很有趣,所以开始吧...
- 我找到了一个包裹
dphys-swapfile
,这是源代码.选项setup
用来设置:
setup - 告诉 dphys-swapfile 计算最佳交换文件大小和 (重新)生成合适的交换文件。默认为 RAM 大小的 2 倍。 这可以在启动时调用,因此该文件始终保持 适合当前 RAM 的大小,或者在 RAM 大小已满时手动运行 已改变。
- 里面是预定义尺寸的
dphys-swapfile
设置(在 Natty 中这是空的):conf_swapsize
我们希望强制的大小,默认(空)为 2*RAM CONF_SWAPSIZE=
swapfactor
以及一个...的设置
this is what we want, 2 times RAM size
SWAPFACTOR=2
实际尺寸的计算稍晚一些:
如果 [ “${CONF_SWAPSIZE}” = “” ] ; 然后 # 计算自动最佳尺寸 echo -n“计算大小,” # 这似乎是最接近物理 RAM 大小的,缺少大约 60k KCORESIZE="`ls -l /proc/kcore | awk '{打印 $5}'`" # 使得 MBytes 向下舍入后正好少 1,因此加 1 MEMSIZE="`expr "${KCORESIZE}" / 1048576 + 1`" # 默认情况下,不覆盖配置文件,交换空间 = 2 * RAM CONF_SWAPSIZE="`expr "${MEMSIZE}" '*' "${SWAPFACTOR}"`" 菲
正如您所看到的,他们在此包中计算它的方式取决于的大小/proc/kcore
,然后除以 1048576,+1 将其四舍五入,然后乘以 swapfactor。从我的机器上看:
因此该系统的默认值为 1065349120 / 1048576 = 1015+1 = 1016 * 2 = 2032 MBytes。
答案2
实际上,Ubuntu 默认安装 CD 上没有这个dphys-swapfile
程序,它不用于计算交换尺寸。
安装ubiquity
程序使用partman-auto
脚本和配置文件(称为食谱)来确定所有分区的大小。其工作原理如下:
- Partman 根据计算机的类型和用户选择的选项来找到正确的配方文件。
- 它会在那里找到分区的最小和最大大小及其优先级。对于交换它可以是 96 (最小值 - 以 MB 为单位) 512 (优先级) 300% (最大值)。
- 然后它获取 RAM 大小(通过
/proc/meminfo
)。 - 它使用自己的算法来计算尺寸。
细节:
A食谱文件看起来如下:
1 1 1 free
$iflabel{ gpt }
method{ biosgrub } .
500 10000 -1 $default_filesystem
$lvmok{ }
method{ format }
format{ }
mountpoint{ / } .
96 512 300% linux-swap
$lvmok{ }
method{ swap }
format{ } .
计算尺寸的算法:
for(i=1;i<=N;i++) {
factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
minsum = min[1] + min[2] + ... + min[N];
factsum = factor[1] + factor[2] + ... + factor[N];
ready = TRUE;
for(i=1;i<=N;i++) {
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
if (x != min[i]) {
ready = FALSE;
min[i] = x;
}
}
}
更多内容请参见: