Avi*_*vio 4 linux ramdisk network-shares swap swap-file
我想使用另一台机器未使用的 RAM 作为我的主要 Linux 安装的交换空间。与本地(慢速)机械硬盘相比,我只是对网络 ramdisk 的性能感到好奇。
交换文件位于tmpfs挂载点上并通过samba. 但是,每次我尝试发出:
swapon /mnt/ramswap/swapfile
Run Code Online (Sandbox Code Playgroud)
我得到:
swapon: /mnt/ramswap/swapfile: swapon failed: Invalid argument
Run Code Online (Sandbox Code Playgroud)
在dmesg我读到:
[ 9569.806483] swapon: swapfile has holes
Run Code Online (Sandbox Code Playgroud)
我试图用dd if=/dev/zero of=swapfile bs=1024 (but also =4096 and =1048576)和分配交换文件truncate -s 2G(都后跟mkswap swapfile),但结果总是一样的。
在这篇文章(可追溯到 2002 年)中,有人说在 Linux 中无法通过 NFS/SMB 使用交换文件。这个说法还有效吗?如果是的话,这个选择的原因是什么,有什么解决方法可以让这个工作?
小智 8
我知道现在这是一个旧线程,但我刚刚遇到了这个问题,发现可以通过使用内核环回设备来使用 NFS 交换分区:
创建一个空文件(用 /dev/zero 中的零填充):
root@machine:/# dd if=/dev/zero of=/swap bs=1024 count=1048576
Run Code Online (Sandbox Code Playgroud)
制作一个循环设备:
root@machine:/# losetup /dev/loop0 /swap
Run Code Online (Sandbox Code Playgroud)
使其适合交换:
root@machine:/# mkswap /dev/loop0
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=931d6e04-78ec-41fd-ab2c-22522ac2711d
Run Code Online (Sandbox Code Playgroud)
现在使用它:
root@machine:/# swapon /dev/loop0
Run Code Online (Sandbox Code Playgroud)
使更改永久化
编写一个脚本来使这个交换永久化。/etc/init.d/swap 可能是这样的:
#!/bin/sh
set -e
case "$1" in
start)
losetup /dev/loop0 /swap
swapon /dev/loop0
;;
stop)
swapoff /dev/loop0
losetup -d /dev/loop0
;;
restart)
swapoff /dev/loop0
swapon /dev/loop0
;;
*)
echo "Usage: swap { start | stop | restart }" >&2
exit 1
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
使文件可执行:
root@machine:/# chmod +x /etc/init.d/swap
Run Code Online (Sandbox Code Playgroud)
启用它:
root@machine:/# update-rc.d swap defaults
Run Code Online (Sandbox Code Playgroud)
资料来源:http : //www.emanuelis.eu/2010/06/21/how-to-swap-to-nfs-mount/