Answers:
实际上,dphys-swapfile
默认的Ubuntu安装CD上没有程序,它也不用于计算交换大小。
发生的是ubiquity
安装程序使用partman-auto
脚本和配置文件(称为“ 配方”)来确定所有分区的大小。它是这样的:
/proc/meminfo
)。细节:
一个配方文件可以是这样的:
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;
}
}
}
有关更多信息,请参见:
这将是相当技术性的,但是很有趣,因此可以找到...
dphys-swapfile
,这是源代码。Option setup
用于设置:设置-告诉dphys-swapfile计算最佳交换文件大小,并 (重新)生成合适的交换文件。默认值是RAM大小的2倍。 可以在启动时调用它,因此文件始终保持 当前RAM的正确大小,或者在RAM大小达到最大值时手动运行 改变了。
dphys-swapfile
是一个conf_swapsize
预定义大小的设置(在Natty中为空):我们要强制使用的大小,默认(空)为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'{print $ 5}'`” #使向下舍入的兆字节正好为1个太少,因此加1 MEMSIZE =“`expr” $ {KCORESIZE}“ / 1048576 + 1`” #默认值,不覆盖配置文件,swap = 2 * RAM CONF_SWAPSIZE =“`expr” $ {MEMSIZE}“'*'” $ {SWAPFACTOR}“`” 科幻
如您所见,他们在此程序包中计算它的方式取决于的大小/proc/kcore
,然后除以1048576,再将+1舍入,然后乘以swapfactor。从我的机器上:
因此,此系统的默认值为1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes。