我希望我的电脑在 UPS 切换到电池供电时自动休眠,因此我随时都需要足够的可用交换空间。但是如果我激活交换分区,即使在休眠之前,它也会被内存页面占用。
我发现的唯一解决方案是设置/proc/sys/vm/swappiness
为0
并完全禁用分页。但这不是最好的选择。
是否可以以字节为单位指定最大交换使用量?
答案1
cat /proc/sys/vm/swappiness
0
表示除非绝对必要(RAM 已满),否则将避免交换。Swappiness 取介于 之间的值0-100
。
要使更改永久更新/etc/sysctl.conf
并重新启动机器:
vm.swappiness = 10
您无法以字节为单位配置交换量,但 swappines10
表示当 RAM 已满 90% 时将使用交换。交换区域的大小在系统安装期间给出,您需要调整分区大小才能更改。交换中占用的量取决于您正在运行的软件的 RAM 分配要求。
答案2
我发现的唯一解决方案是使用交换文件您可以创建任意大小的空间,比如说几 GB,然后将其安装为交换区域。
head -c 2G /dev/urandom > your.filename
您可以修改下面的代码,它将使用随机密钥创建加密交换文件。当然,您需要将变量设置$filename
为交换文件所在的位置。
filename="????"
head -c 4k /dev/urandom | sha512sum | cryptsetup open --type plain $filename /dev/mapper/swap
cryptsetup status /dev/mapper/swap
mkswap /dev/mapper/swap
swapon /dev/mapper/swap
sysctl vm.swappiness=0
编辑:如果您希望在重启后可以访问交换,只需用已知密钥替换随机密钥。