默认的交换空间大小是多少?

安装程序如何计算要创建多大的交换分区?可能是基于已安装的RAM大小,但这是否取决于RAM的数量?

这没有默认值,它取决于你拥有多少内存。 - Uri Herrera
3是的,但我希望得到比“这取决于”更详细的信息。它是否总是RAM大小的固定倍数,还是取决于RAM的大小?例如,大容量的RAM永远不需要超过足够启用休眠所需的交换空间,但非常小的RAM容量可能会受益于比1:1更大的交换空间。 - Seret
2个回答

这可能会有点技术性,但是发现它很有趣,所以让我们开始吧...
  • 我找到了一个包 dphys-swapfile,这里是源代码。选项 setup 用于设置它:
setup - 告诉 dphys-swapfile 计算最佳的交换文件大小并生成一个合适的交换文件。默认为内存大小的2倍。
可以在启动时调用此命令,以便文件始终保持适合当前内存的正确大小,或者在内存大小发生变化时手动运行。
  • dphys-swapfile 内部有一个名为 conf_swapsize 的设置,用于预定义大小(在 Natty 中为空):
我们想要强制设置的大小,默认情况下(空)为2倍内存
CONF_SWAPSIZE=

还有一个名为 swapfactor 的设置...

this is what we want, 2 times RAM size
SWAPFACTOR=2

实际大小稍后计算: 如果 [ "${CONF_SWAPSIZE}" = "" ] ; then # 计算自动最佳大小 echo -n "计算大小, " # 这似乎是最接近物理RAM大小的值,缺少约60k KCORESIZE="`ls -l /proc/kcore | awk '{ print $5 }'`" # 以MB为单位,向下取整会少1个,所以加1 MEMSIZE="`expr "${KCORESIZE}" / 1048576 + 1`" # 默认情况下,如果没有配置文件覆盖,交换空间=2*RAM CONF_SWAPSIZE="`expr "${MEMSIZE}" '*' "${SWAPFACTOR}"`" fi
如您所见,此软件包中计算的方式取决于/proc/kcore的大小,然后除以1048576,+1四舍五入,然后乘以swapfactor。从我的机器上看:

enter image description here

所以这个系统的默认值将是 1065349120 / 1048576 = 1015+1 = 1016 * 2 = 2032 兆字节。

请考虑更新"源代码"链接,该链接已经不存在了。 - Manuel Jordan

实际上,在默认的Ubuntu安装CD中没有dphys-swapfile程序,并且它不用于计算交换空间的大小。
发生的情况是,ubiquity安装程序使用partman-auto脚本和配置文件(称为recipes)来确定所有分区的大小。工作原理如下:
- Partman根据计算机类型和用户选择的选项找到正确的recipe文件。 - 在那里,它找到分区的最小和最大大小以及其优先级。对于交换空间,最小值可以是96(以MB为单位),优先级为512,最大值为300%。 - 然后,它获取RAM大小(通过/proc/meminfo)。 - 它使用自己的算法来计算大小。
细节:
一个recipe文件可能如下所示:
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;
      }
   }
}

更多信息请参见:


有趣的辩论:比奇怪的Debian网站更好的参考资料是什么? - enzotib
当我搜索时,我也发现了这个问题,但是包上有一个警告:“此软件包仅用于构建debian-installer映像。请勿在普通的Ubuntu系统上安装。”我认为这个软件包不适用,所以我继续搜索,并找到了dphys-swapfile的代码。嗯,确实很有趣。 - Rinzwind
@enzotib: 为什么觉得奇怪? - arrange
@arrange: 很奇怪,因为它不是官方的Ubuntu网站,而且作为一个Debian网站也并不像是官方的。 - enzotib
我在计算交换空间大小方面找到了另外两种方法。第一种方法是使用命令 grep ^Mem: /proc/meminfo,如果结果为0,则使用命令 grep ^MemTotal: /proc/meminfo,然后乘以2(默认值)或3(大多数设置为300%),并且每个架构都有一个最小值。mipsel-sb1-bcm91250a 使用固定的512。i386-efi 使用200%。 - Rinzwind
@enzotib:除了源代码和原始文档文件,我找不到比“奇怪的网站”更好的参考资料了,抱歉 :) - arrange
@arrange:我在虚拟机中查看了安装的软件包和安装程序:没有dphys-swapfile,但在各种partman文件中找到了与交换和配方相关的引用,所以现在我倾向于给你点赞,尽管我无法完全理解其背后的机制。你得到了我的支持。 - enzotib