如何在不删除终端的情况下增加交换文件的大小?


59

有没有办法增加我现有的“交换文件”而不必销毁并重新创建它?我想将交换空间从1GB增加到2GB。当前它是这样设置的:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        1048572 736640  -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov  9  2016 /swapfile

我正在使用Ubuntu 14.04。


你有多少RAM?2G够吗?我认为您必须swapoff创建一个新的/ swapfile mkswap,以及swapon -a
heynnema

1
添加一个新的交换文件,请按照上述问题的说明进行操作。您可以拥有2个交换文件;)
Ravexina

1
@Ravexina,也许是一个新手问题,但是为什么我要添加一个新的交换文件而不是增加现有文件的大小?还是无法增加现有的交换文件?
戴夫

@戴夫这也是有可能的,因为你可能知道,我们可以swapoffddmkswap最后swapon。我以为你不想碰你的文件。
Ravexina

2
@Ravexina发布答案作为答案
Sergiy Kolodyazhnyy

Answers:


66

首先禁用交换文件:

sudo swapoff /swapfile

现在让我们增加交换文件的大小:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

上面的命令将在交换文件的末尾附加零字节的1GiB。

将文件设置为“交换文件”:

sudo mkswap /swapfile

启用交换:

sudo swapon /swapfile

3
sudo fallocate -l 2G /swapfile可能比dd安全(尽管它不会保留原始的swapfile),而且还需要一个sudo chmod 600 /swapfile
heynnema

7
@heynnema不fallocate制作稀疏文件吗?该swapon手册页说稀疏交换文件有问题(特别要说fallocate)。
muru

3
@heynnema不,该mkswap联机帮助页还说这些文件不应包含任何孔。
muru

1
@muru 猜猜我错了:-)每当我读到如何创建以17.04开始的/ swapfile时,他们都会使用fallocate。我猜我们只需要使用“磁盘破坏器”即可!
heynnema

1
@heynnema:您可以使用的方法fallocate是预先分配磁盘空间,然后使用dd零填充孔。
David Foerster

39

您应该添加一个新的交换文件,而不要调整现有交换文件的大小,因为这样做没有任何花费。要调整交换文件的大小,必须首先禁用它,这会将交换内容逐出到RAM,这会增加RAM的压力,甚至可能会召唤OOM杀手(更不用说您可能会在数分钟内破坏磁盘)。多个交换文件不是问题,设置另一个交换文件非常容易。与添加另一个文件相比,调整交换文件的大小实际上没有任何好处。

dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file

sudo chmod 600 /some/file必需的,还是没有?
heynnema

1
count=1K给出一个1G文件吗?计数是块大小,是吗?那可以是512/4096?还是我的数学错了?
heynnema

3
+1如果您以后决定需要回磁盘空间,此方法还可以轻松断开其中一个交换文件。
joeytwiddle

2
这确实需要标记为正确答案。哇,好棒!
Beshoy Girgis

1
@muru应该是永久解决方案吗?我在4月30日执行了这些命令,但是在5月的某个时候,我的第二个交换文件消失了。我没有删除,但它不见了
Christopher Rucinski

13

您可以像我一样创建另一个交换文件:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. 验证它是否正常使用sudo swapon --show
    要使其永久存在,请在fstab文件中输入以下内容:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

请注意,fallocate应该使用bit来创建文件,因为它会创建一个稀疏文件。参见man mkswap
Charles Green

@CharlesGreen就像我写的那样对我有用,所以它应该对任何人都适用。
Borkon 17:23

我建议阅读man mkswap,特别是“环境”之前的最后一段
查尔斯·格林

1
使用Armbian v 5.65开发NanoPi Neo
BiTinerary

5

遵循博客文章 Arian Acosta的建议,我在Ubuntu 17.04上取得了不错的结果。您可以在这里sudo fallocate -l 4G /swapfile用任意数量的千兆字节代替4G 。sudo fallocate -l 2G /swapfile以TS 为例。

一般来说,交换文件的建议大小是RAM大小的2倍,但是您可以根据需要将其增大。请记住,这不能替代内存,因为由于将内容存储在磁盘中,因此性能会大大降低。

我创建了一个简单的bash脚本,它将交换文件增加到4GB,并在Ubuntu 16.04上对其进行了测试。

这可以逐行或bash脚本运行,但是我使用它来进行无头安装。

#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only  ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"

3
您应该在脚本中添加一个参数,即要添加的SWAP数量,最后将其添加到fstab。但我仍然喜欢
LnxSlck

0

关于“如何调整交换文件大小”的一般答案:

从Bogdan Cornianu,在这里:https://bogdancornianu.com/change-swap-size-in-ubuntu/

[QUOTE(ALMOST VERBATIM,仅添加了一些我的评论)START]

在下面的示例中,我们将/ swapfile中可用的交换空间从4 GiB扩展到8 GiB。

  1. 关闭所有交换过程

    sudo swapoff -a
    
  2. 调整交换大小

    sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    

    if=输入文件
    of=输出文件
    bs=块大小;这里,1G代表1 Gibibyte,或吉布,其中,根据man ddG = 1024个* 1024个* 1024个字节
    count=块的乘法器

  3. 使文件可用作交换

    sudo mkswap /swapfile
    
  4. 激活交换文件

    sudo swapon /swapfile
    
  5. 检查可用的交换量

    grep SwapTotal /proc/meminfo
    

[QUOTE END]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.