为什么我只能拥有有限数量的交换文件

为什么我只能拥有有限数量的交换文件

这是一个理论问题。

为什么我只能有 29 个交换文件/分区?

如果我想生成 10k 1MB 交换文件并交换它们,则在 30 交换文件处失败,并显示 swapon: /tmp/swap29: swapon failed: 不允许操作

实现此目的的脚本

#!/bin/bash
i=0
SWAP=/tmp/swap

while [ "$i" -lt 10000 ];do
    dd if=/dev/urandom of=$SWAP$i bs=1M count=1
    mkswap "${SWAP}${i}"
    swapon "${SWAP}${i}"
    i=$((i+1))
done

有人可以解释一下吗?

答案1

用简单的英语来说:

内核必须跟踪交换文件/分区,并且它在表中执行此操作。每个条目占用少量内存,这些内存是预先分配的。因此选择了一个超过合理的默认限制(最大交换表大小)。

任何真正需要更多功能的人都可以修改并重新编译内核。

答案2

答案可以在这里找到:https://www.kernel.org/doc/gorman/html/understand/understand014.html

它说“...声明的名为 swap_info 的数组,其中包含 MAX_SWAPFILES,该数组静态定义为 32 个条目。这意味着正在运行的系统上最多可以存在 32 个交换区域。”

这个链接的第 11.2 章中有更多信息,远远超出了我想知道的范围

相关内容