在20.04中增加交换空间。

我正在使用 Ubuntu 20.04,并且正尝试创建一个休眠命令。我按照这些指示进行操作。

第2步说

然后检查你分配的交换内存是否大于或至少等于物理内存(RAM)。

我已经做过了,我的 /swapfile 是 2 GB。我有 16 GB 的 RAM,所以我需要增加交换文件的大小。在 Ubuntu 中如何做到这一点?


你看过这个了吗? - KGIII
还有这个问题,涉及到在LVM下增加交换空间并使用加密驱动器:https://askubuntu.com/questions/1031275/increase-swap-in-ubuntu-18-04-under-lvm-and-encrypted-file-system - jdpipe
3个回答

在睡眠模式下,RAM的内容保持不变,计算机以非常低的功耗模式运行,以保持RAM内容完好无损(因为如果断电,RAM将丢失数据)。但是在休眠模式下,RAM的内容存储在交换空间中,因此可以完全切断电源。因此建议将交换空间大小设置为RAM大小的倍数。
首先,找到交换文件,并禁用并删除它。
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
sudo swapoff /swapfile sudo rm /swapfile 创建新的16GB交换空间(16 * 1024 = 16384)。bs是块大小。基本上bs * count = 要分配的字节数(在这种情况下为16GB)。这里bs = 1M(M代表兆字节,因此我们分配了1MB的块大小)并将16384 * 1MB(=16GB)分配给交换区。
sudo dd if=/dev/zero of=/swapfile bs=1M count=16384
为其赋予根用户读写权限。
sudo chmod 600 /swapfile 将其格式化为交换区。
sudo mkswap /swapfile 再次打开交换区。
sudo swapon /swapfile 现在重新启动计算机以使上述更改生效。

5没有必要删除文件或使用dd。使用fallocate更快、更简单。为什么要在那里写入零呢? - Pilot6
2@Pilot6 当然可以。我记得我使用了上述命令,所以我写了那个。我相信楼主只是想完成工作,而不是迅速完成。 - Abhay Patil
4这真的很有帮助...谢谢 - Christopher Kikoti
2谢谢Abhay Patil。只是一点小提示:在Ubuntu 20.04上,我不需要重新启动,并且您可以将交换文件放在任何您想要的位置(不必放在根文件夹/驱动器中)。 - Louis Gagnon
@LouisGagnon提到了位置的问题,但我记得在更改生效之前我不得不重新启动。无论如何,还是保险起见比较好。 - Abhay Patil
1@LouisGagnon 但最好将其放在根目录下,因为如果您将其放在/home/user等位置,可能会意外删除它。 - TheEagle
如果用户删除交换文件,那是否意味着交换将被关闭,并且系统将没有交换空间? - Abhay Patil
@AbhayPatil 是的 - 如果不是这样的话,就不需要手动创建SWAP文件了 - 系统会在下次重启时自动创建它。删除Swap文件可能会带来不好的后果 - 如果有任何未保存的文档被打开,你所做的更改将会丢失;此外,这也可能导致系统崩溃。在下次重启时,一切都会恢复正常 - 只是你的RAM会更快地占满! - TheEagle
1谢谢,无需重新启动。 - Ali
@Pilot6,我认为没有人应该寻找一个只需要1秒钟而不是1分钟就能完成的答案,尤其是当你只需要做一次且已经有1分钟的答案存在时。如果您在评论中附上答案,那将会更有价值。 - Sabri Özgür
@程序员 把它放在根目录是个不好的建议。我的Ubuntu停止启动,启动后,只要输入任何内容,终端就会自动关闭。它发送了一个内部错误。另外,一般来说,增加16GB的内存并不被推荐,就像增加RAM一样。 - vimal krishna

以下步骤对我来说使用fallocate方法有效:
  1. 检查交换信息

sudo swapon --show

输出将类似于以下内容,

NAME      TYPE   SIZE   USED   PRIO
/swapfile file    2G     0G    -2

2. 关闭交换空间
``` sudo swapoff /swapfile ```
3. 使用`fallocate`命令立即创建指定大小的文件。
``` sudo fallocate -l 16G /swapfile ```
4. 设置交换空间
``` sudo mkswap /swapfile ```
5. 激活交换空间
``` sudo swapon /swapfile ```
6. 现在检查交换信息
``` sudo swapon --show ```
现在输出结果将类似于以下内容,
NAME      TYPE   SIZE   USED   PRIO
/swapfile file   16G     0B    -2

干杯!

1如果第二步(sudo swapoff /swapfile)失败,并显示“Killed”错误消息以停止交换,您可能需要先停止消耗大量内存的应用程序/服务。您可以使用top命令或最近的OOM(Out of memory)通过运行grep /var/log/kern.log* -ie 'Out of memory'来识别它们。 - Sergey Vlasov
2这应该是被接受的答案。 - theabhinavdas

sudo su -
swapoff /swapfile  
rm  /swapfile
\# 32k -> 32GB swap size
dd if=/dev/zero of=/swapfile bs=1M count=32K
mkswap /swapfile
swapon /swapfile
Ctrl+D