添加一个新的交换文件。如何编辑fstab以在重启后启用交换?

我因为一些分区问题删除了现有的交换分区。现在我没有交换空间,所以我创建了一个交换文件:
dd if=/dev/zero of=/root/myswapfile bs=1M count=1024

这是执行了swapon -s之后的结果:
/root/myswapfile    file    1048572    1320    -1

现在我想编辑我的/etc/fstab 文件,以便在重新启动后启用交换文件。

2在SSD上进行交换是危险的,因为SSD驱动器在高强度写操作下的寿命较低。这意味着你可能会消耗掉你珍贵而昂贵的SSD驱动器。 - user109611
3请注意,bs=1G count=1 将得到相同的结果,请参考 dd manpage 以获取其他单位的信息。 - LiveWireBT
1个回答

这是创建文件交换的步骤:
1. 创建一个大文件,例如:
sudo mkdir -p /var/cache/swap/   # create a directory that holds the swap file
sudo dd if=/dev/zero of=/var/cache/swap/myswap bs=1M count=4096 # for 4 GByte

当然,使用任何其他方法创建一个指定大小的文件也可以。
向系统宣布交换。
sudo chmod 0600 /var/cache/swap/myswap # only root should have access
sudo mkswap /var/cache/swap/myswap # format as swap
sudo swapon /var/cache/swap/myswap # announce to system

将以下行插入到/etc/fstab中,以便在下次启动时进行交换:
/var/cache/swap/myswap    none    swap    sw    0   0

注意:如果您的系统文件存储在SSD上,您可能希望考虑将交换文件保存在硬盘位置。
另外请注意:您不能将交换文件用于休眠(参见Ubuntu SwapFaq)。
对于Ubuntu >= 17.04的附加说明:默认情况下,在新安装中会创建一个名为/swapfile的交换文件(如果没有交换分区)。如果我们愿意,我们可以稍后手动创建交换分区
如果我们想要用另一个交换(例如文件)替换现有的交换(例如分区),我们需要使用以下命令删除旧的交换。
sudo swapoff -a  # for all

然后从/etc/fstab中删除交换条目,或者分别用新的交换条目替换它。

2为什么你不希望将交换文件也放在SSD上呢? - Joseph Garvin
1@JosephGarvin:尽管磨损可能不是一个问题,但使用SSD作为交换空间仍会浪费大量(昂贵的)磁盘空间。根据您的系统内存大小,您可能不经常需要交换空间。http://askubuntu.com/questions/178661/do-i-need-swap-with-new-ssd - Takkat
2谢谢,你怎么在不重启的情况下检查/etc/fstab是否正确挂载交换文件呢?如果我执行mount -a && mount命令,我看不到交换文件。 - Don Giulio
2@user72464 要显示所有已使用的交换空间,我们可以输入 swapon -s。可用的交换空间也会在 free -h 中显示。 - Takkat
是的,谢谢,但我怎样才能确保交换分区在启动时真正加载,并且我的fstab文件没有损坏? - Don Giulio
1@user72464 简单,执行 mount -a 命令即可。 - heemayl
似乎我们可以为休眠使用交换文件(https://askubuntu.com/questions/768136/how-can-i-hibernate-on-ubuntu-16-04/821122#821122),尽管我在使用它时遇到了一些问题(但我的机器是个烂摊子,对任何事情都有问题)。 - Zanna
@Zanna:是的,将休眠开启到交换文件上可能是在17.04引入的,但我从未测试过。我坚信休眠是邪恶的(我曾经有一台机器苏醒所需时间比重启所需时间长十倍)。 - Takkat
哈哈,毫无疑问,这绝对不是没有危险的。 - Zanna
@Takkat "当在SSD上使用交换空间时,你仍然会浪费大量(昂贵的)磁盘空间。" 为什么会这样呢?一个字节就是一个字节,在HDD和SSD上占用的空间是一样的。 - Melab