如何增加交换空间?


127

默认情况下,我在Ubuntu中有250MB的交换空间,我想将其扩展到更大的大小。我需要800MB,我认为这足以打开多个应用程序,而不必达到当前的交换限制。我希望有一个人可以帮助我。


2
请打开Gparted,然后发布您在此处看到的屏幕截图。
亚伦·希尔

如果交换分区可以扩展到相邻的未分配空间,请使用gparted。如果这样的空间不可用,可能是因为您的活动(引导)分区正在使用所有非交换空间,gparted则将不允许您减小活动分区的大小以创建未分配的空间。在这种情况下,您可以重新安装Ubuntu以创建更大的交换空间。
H2ONaCl

Answers:


171

您可以随时创建交换文件

添加更多的交换空间。(在各个方面)这与交换分区不同(但是在每个方面),它都是容易且动态的。

更改/media/fasthdd/swapfile.img为您喜欢的任何内容,例如也可以/swap.img/media/fasthdd/swapfile.img只是示例文件名,如果您正在使用此文件名,则当然必须有目录/media/fasthdd/,该目录具有足够的可用空间来存储新的交换文件。

使用任何终端应用程序来运行命令。所有命令都应以root特权运行为此,您可以添加sudo到每个命令的开头,也可以sudo bash在运行命令之前运行。

1.创建一个空文件:
此文件将包含虚拟内存内容,因此,使文件足够大以满足您的需要。这将创建1Gb文件,这意味着系统需要+ 1Gb交换空间:

dd if=/dev/zero of=/media/fasthdd/swapfile.img bs=1024 count=1M

如果要制作3Gb文件,则将计数值更改为count=3M。请参阅man dd以获取更多信息。

2.烘焙交换文件:
以下命令将在您的新交换文件中创建“交换文件系统”。

mkswap /media/fasthdd/swapfile.img

3.启动时启动:
要确保在启动计算机时激活了新的交换空间,应将其添加到文件系统配置文件中/etc/fstab。将其添加到文件末尾,建议这样做,因为其他文件系统(至少一个包含交换文件的文件系统)必须以读写模式安装,然后才能访问任何文件。

# Add this line to /etc/fstab
/media/fasthdd/swapfile.img swap swap sw 0 0

4.激活:
您可以使用以下命令重新启动计算机或手动激活新的交换文件:

swapon /media/fasthdd/swapfile.img


如果一切顺利

您应该看到有更多交换空间可供使用。您可以使用以下命令来检查新交换并确认它是活动的:

cat /proc/swaps
  Filename                           Type       Size    Used    Priority
  /media/fasthdd/swapfile.img        file       8388604 2724    -1

grep 'Swap' /proc/meminfo
  SwapCached:         4772 kB
  SwapTotal:       8388604 kB
  SwapFree:        8355812 kB

5
编辑/etc/fstab:尝试这在命令行sudo gedit /etc/fstab

那极大地帮助了我,非常感谢先生。
微风

如何停用新创建的交换文件?
微风

1
得到它的交换!
微风

2
使用命令“ swapon -s”查看状态,而不是“ cat / proc / swaps”。然后,“免费”命令还会提供交换使用情况信息。
Paul M,

40

用于增加交换分区大小的GUI方法

增加交换大小的另一种方法是使用GParted分区编辑器。简而言之,您可以调整交换分区的大小,然后右键单击它并选择“ Swapon”。

引导gparted-live-disk或Ubuntu live磁盘更容易(以便所有/dev/sda分区都将被卸载)。如果运行Ubuntu Live磁盘,则必须通过运行以下命令来安装gparted:

sudo apt-get update
sudo apt-get install gparted && sudo gparted

仅当交换分区之前或之后存在未分配的空间时,才必须能够增加交换分区的大小。如果在交换分区的上方或下方没有未分配的空间(我们尝试通过交换分区添加的空间),那么我们必须调整分区的大小并获取该未分配的空间。

情况1-交换分区之前或之后存在未分配的空间

GParted分区

在上面的屏幕截图中,我在linux-swap之前有11.4 GB的未分配空间,在swap分区后有12.8 GB的空间。

  • 要调整大小,请右键单击交换分区(此处为/ dev / sda9),然后单击“调整大小/移动”选项。它看起来像这样:

    在此处输入图片说明

  • 向左或向右拖动滑块箭头,然后单击“调整大小/移动”按钮。您的交换分区将被调整大小。


情况2-分区之间有未分配的空间

在此处输入图片说明

在上面的屏幕快照中,我们要添加到交换分区的未分配空间在dev/sda7和之间/dev/sda8。要将未分配空间从该空间移到交换分区的正上方,我们必须按照以下简单步骤操作,

  • 右键单击/ dev / sda8分区,然后单击“ 调整大小/移动”选项。

    在此处输入图片说明

  • 单击并将滑块移到最左端,这样/dev/sda8分区上方的未分配空间就会出现在下方/dev/sda8。之后,单击“调整大小/移动”按钮。

  • 现在未分配空间就在交换分区的上方,就像案例1一样,现在跟案例1一样。


情况3-如果扩展分区外部存在未分配的空间)

在此处输入图片说明

我在扩展分区的下方有一个18 GB的未分配空间。要将此空间添加到linux-swap分区(扩展分区中存在),我们必须执行以下步骤,

  • 右键单击扩展分区,然后选择“ 调整大小/移动”选项,如下图所示

    在此处输入图片说明

  • 单击并拖动箭头到最右端,然后单击“ 调整大小/移动”,以便扩展分区的底部出现18 GB的未分配空间。底部已经有14.80 GB的未分配空间,现在是18.34 GB。 GB与之结合,在扩展分区的底部创建未分配的空间(18.34 + 14.80 GB)。

  • 现在交换分区的下面有一个未分配的空间,就像情况1,然后是情况1。

注意:在进行上述操作之前,请不要忘记备份所有重要数据。


2
GUI工具的绝佳指南,应按原样使用++。但是,也许应该对分区编辑可能涉及的风险提出一些警告。简单的MBR备份指南或指向该指南的链接将是一个很好的补充,错误的发生可能性不大,但成本可能会更高 +正确地进行MBR备份不会消耗太多的时间或空间,并且可以节省大量的工作,空间和时间
Sampo Sarrala 2013年

2
不要忘记进行swapon,右键单击交换分区上的swapon
user3752281 2016年

29

fallocate如果要为交换文件保留空间,也可以使用,而无需用0到0填充文件dd

man页面:

DESCRIPTION
   fallocate  is  used  to preallocate blocks to a file.  For filesystems which support the fallocate system call, this is done quickly by
   allocating blocks and marking them as uninitialized, requiring no IO to the data blocks.  This is much faster than creating a  file  by
   filling it with zeros.

如果已经有了swap定义,则可以将其删除或保留,然后您的* nix将对其进行管理(通过定义swapon优先级,甚至更好)。如果您想在不同设备,驱动器之间分散交换空间(根据它们的速度或其他自定义需求,请参阅StackExchange上多个交换文件的用途),这可能很有用

fallocate添加第二个交换文件的简单用法

检查交换情况:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        262140  246276  -1

创建一个4G交换文件

创建和激活交换文件的标准方法。

$ size="4G" && file_swap=/swapfile_$size.img && sudo touch $file_swap && sudo fallocate -l $size /$file_swap && sudo mkswap /$file_swap && sudo swapon -p 20 /$file_swap

永久交换

/etc/fstab文件中添加一行,以便交换将在下次重新启动时初始化(我们还将在此处更新新创建的交换空间的优先级,并更新旧交换文件的优先级)。

在/ etc / fstab文件中,请注意,上一次交换的优先级现在为10。

/swapfile    none    swap    sw,pri=10      0       0
/swapfile_4G.img     none    swap    sw,pri=20      0       0

重新启动后检查交换情况:

$ sudo swapon  -s
Filename       Type     Size        Used    Priority
/swapfile      file     262140      0       10
/swapfile_4G.img       file     4194300     0       20

删除其中一个交换空间(例如原来的256Mb)

编辑 /etc/fstab

删除与要删除的交换有关的行。

删除该交换

删除并删除交换文件。

sudo swapoff /mnt/swapfile && sudo rm /mnt/swapfile

资源:


2
1对 fallocate,比dd您的fs支持好得多。这些单行代码仍然很难阅读,如果将它们分解为实际命令,可能会更容易学习吗?
Sampo Sarrala

2
这是一个完美答案的示例,非常易于理解,易于实现。它在ubuntu 18中像魅力一样
发挥作用–DamiánRafael Lattenero

7

以我为例,我已经有一个交换文件,我认为它是1GB,但是当我仔细观察时,它只有256 MB,当预编译Rails资产时,服务器将耗尽内存

Errno::ENOMEM: Cannot allocate memory - nodejs

我创建了我的交换文件,如下所述:https : //stackoverflow.com/a/34885004/784318

现在,创建一个名为空文件的行/swapfile如下:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k

现在要调整交换文件的大小,我必须执行以下简单步骤:

# Reboot the system to be able to switch swapping off
sudo reboot

# Turn swap off
sudo swapoff -a

# Delete the `/swapfile`
rm -f /swapfile

# Recreate the swapfile but with double file size memory
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

# Turn swap back on
sudo swapon -s

# Change the permission to non-world-readable
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

# Use the swap file
sudo mkswap /swapfile
sudo swapon /swapfile

文件已创建(536870912 / 1024/1024 = 512 MB):

ls -lia /swapfile 
768 -rw------- 1 root root 536870912 Apr 27 07:54 /swapfile

使用free -m命令,我可以看到文件现在是512 MB,与预期的一样:


您不应在rm命令中使用危险的-r标志来删除单个文件。rm -f应该绰绰有余。
Sampo Sarrala'9

1
@SampoSarrala感谢您的注意,我相应地更改了脚本。
Besi 2013年

@Besi谢谢!这正是我需要在Ubuntu 18.04 LTS系统上增加交换文件大小的原因。它完全按照您编写的方式工作。出色的帮助!!!
B激进

我喜欢此解决方案,因为它是命令行的,不需要重新分区,并且说明了如果交换文件已存在该怎么办。
cxrodgers

3

如何添加交换文件

  1. 创建.img文件

    须藤dd if = / dev / zero of = / swap.img bs = 1M count = 1000

注意!:bs = 1M count = 1000 ==> 1GB

(bs *计数=大小(以兆字节为单位))

其他例子:

须藤dd if = / dev / zero of = / swap.img bs = 10M count = 100

  1. 格式.img文件

    须藤mkswap /swap.img

  2. 启用交换文件

    sudo swapon /swap.img

  3. 将交换文件添加到fstab

将此行添加到您的fstab(/ etc / fstab)

/swap.img   none            swap    sw              0       0

我通常在交换时设置一个标签,例如“ mkswap -L SWAP2”。
保罗M

注意:此答案与Sampo Sarria接受/最受好评的答案相同,但是上下文较少,并且将swap img直接添加到root而不是/ media / fasthdd
steel

0

调整为8GB

# Turn swap off
# This moves stuff in swap to the main memory and might take several minutes
sudo swapoff -a

# Create an empty swapfile
# Note that "1G" is basically just the unit and count is an integer.
# Together, they define the size. In this case 8GB.
sudo dd if=/dev/zero of=/swapfile bs=1G count=8

sudo mkswap /swapfile  # Set up a Linux swap area
sudo swapon /swapfile  # Turn the swap on

检查是否有效

grep Swap /proc/meminfo
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.