这是一个理论问题。
为什么我只能有 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 章中有更多信息,远远超出了我想知道的范围