当前位置: 首页>>技术问答>>正文


如何增加交换空间?

,

问题描述

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

最佳解决办法

您始终可以创建交换文件

增加更多的交换空间。这与交换分区不一样(在每个方面),但它会很容易和动态。

/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.烘焙交换文件:以下命令将在您的新交换文件中创建”swap filesystem”。

mkswap /media/fasthdd/swapfile.img

3.启动启动:为了确保新的交换空间在引导计算机时被激活,您应该将其添加到文件系统配置文件/etc/fstab。将其添加到文件末尾,建议这样做,因为在我们可以访问任何文件之前,必须以read-write模式挂载其他文件系统(至少包含一个包含交换文件的文件系统)。

# 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

次佳解决办法

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

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

启动gparted-live-disk或Ubuntu live磁盘比较容易(因此所有的/dev/sda分区都将被卸载)。如果您运行Ubuntu live disk,那么您必须通过运行以下命令来安装gparted:

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

只有在交换分区之前或之后存在未分配的空间时,您才能够增加交换分区的大小。如果在swap分区的下面或上面没有未分配的空间(我们试图添加swap分区的空间),那么我们必须调整分区大小并获取未分配的空间。

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

swap,ubuntu

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

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

    swap,ubuntu

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


情况2 – 未分配的空间位于分区之间

swap,ubuntu

在上面的屏幕截图中,我们想要添加到交换分区的未分配空间位于dev/sda7/dev/sda8之间。要将未分配的空间从交换分区移到交换分区正上方,我们必须遵循以下简单步骤,

  • /dev /sda8分区上的Right-click,然后单击调整大小/移动选项。

    swap,ubuntu

  • 单击并将滑块移到最左端,以便位于/dev/sda8分区正上方的未分配空间位于/dev/sda8下方。然后单击调整大小/移动按钮。

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


情况3 – 如果未分配空间出现在扩展分区之外)

swap,ubuntu

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

  • Right-click在扩展分区上并选择Resize /Move选项,它会像下面的屏幕截图

    swap,ubuntu

  • 单击并拖动箭头到最右端,然后单击调整大小/移动,以便未分配的18 GB空间将位于扩展分区的底部。我的底部已经存在14.80 GB的未分配空间,现在已经存在18.34 GB结合使用,在扩展分区的底部创建(18.34 + 14.80 GB)未分配空间。

  • 现在在swap分区的下面有一个未分配的空间,它将像案例1一样,然后是案例1。

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

第三种解决办法

如果要为交换文件保留空间,则也可以使用fallocate,而不需要通过dd将文件填充到0。

来自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优先级甚至更好)。这可能是有用的,以防您想在不同设备之间传输交换,驱动器(根据其速度或其他自定义需求,请参阅What is the purpose of multiple swap files on 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文件中添加一行,以便在下一次重新启动时初始化交换(我们还在此处更新新创建的交换空间的优先级,并且我们更新旧交换文件的优先级

# in your /ets/fstab file
/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

资源:

第四种办法

在我的情况下,我已经有一个交换文件,我认为它是1GB,但是当我更仔细地查看它时,它只有256 MB大,当pre-compiling我的轨道资产服务器将用尽内存

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像预期的那样:

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/669.html,未经允许,请勿转载。