Linux 下使用 swap file

Linux 下至少有两种方法可以配置系统的 swap. 一种是直接格式化一个分区, 用这个分区作为swap区. 另一种是创建一个文件, swap 的内容都丢到文件里面去.

直接格式化的写分区这种操作一般在装机的时候系统安装引导程序就帮忙做了, 我只在装arch的时候被教育了下.

大致方法是分区, 对这个分区 mkswap, 然后将这个分区的位置写到 /etc/fstab 中.

内容类似下面这样.

/dev/mapper/sae-swap swap swap defaults 0 0

它会在启动的时候自动挂载本分区到swap,不用操心任何事情.

对于比较稳定的,长期使用的swap设置而言,这应当是最好的选择.

但有时候需求有点复杂,比如远程的时候腾出个分区格式化然后挂载虽然不困难,但若有更简单的方法,那个人还是倾向于用简单的.

Linux 支持使用文件作为 swap, 然后在线启用或者取消 swap. 流程很简单. 进入 root 后几步操作就可以搞定.

首先你需要准备一个你想要的大小的文件. 比如 512MB (也就是 1024 * 512MB = 524288k )

# dd if=/dev/zero of=/swapfile1 bs=1024 count=524288

上面这条命令会在 /swapfile1 这个文件中写上 512MB 大小的 0. 它有个很严重的问题–效率.

若我只是开上上面命令的 512MB 的话, 速度还是可以忍受的, 但若我要开上 700G 的文件, 等得花儿都谢了.

我们的目标就是开个足够大的空文件而已, 另一个可用的命令是 fallocate.

命令如下:

# fallocate -l 700G /swapfile1

虽然仍然需要等几秒, 但速度还是非常快的.

此时文件的读写还是比较开放的, 但这样就不安全了. 设置文件权限如下:

# chown root:root /swapfile1
# chmod 0600 /swapfile1

然后, 把这个文件格式化一下. 命令如下:

# mkswap /swapfile1

这样 swapfile1 就是 swap 可以接受的格式了.

最后, 启用 swap.

# swapon /swapfile1

这样我们就很容易的得到了一些新的 swap 空间.

如果我们不想要这个 swap, 解除也很容易

# swapoff /swapfile1

然后我们就可以安全的删除 /swapfile1 这个文件了.

如果我们需要让它每次开机自动挂载 swap 的话, 我们需要编辑 /etc/fstab, 添加一行内容如下:

/swapfile1 none swap sw 0 0

/etc/fstab 会在启动的时候执行. 若文件有误那么会启动失败. 因此建议修改完后参考这篇内容测试一下.

References:

http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

http://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system