Sam*_*org 262
您始终可以创建交换文件以添加更多交换空间。这在每个方面都与交换分区不同,但它会很容易和动态。
在以下步骤中,更改/media/fasthdd/swapfile.img为您喜欢的任何内容。例如,它也可以/swap.img。/media/fasthdd/swapfile.img只是一个示例文件名。如果您正在使用这个,那么当然必须有一个目录/media/fasthdd/有足够的可用空间来存放您的新交换文件。
使用任何终端应用程序运行以下步骤的命令。所有命令都应该以 root 权限运行。为此,您可以添加sudo到每个命令的开头或sudo bash在运行命令之前运行。
创建一个空文件:
此文件将包含虚拟内存内容,因此请使文件足够大以满足您的需要。这将创建一个 1GiB 文件,这意味着您的系统为 +1GiB 交换空间:
dd if=/dev/zero of=/media/fasthdd/swapfile.img bs=1024 count=1M
Run Code Online (Sandbox Code Playgroud)
如果要制作 3GiB 文件,请将计数值更改为count=3M. 有关man dd更多信息,请参阅。
烘焙交换文件:
以下命令将在您的新交换文件中创建一个“交换文件系统”。
mkswap /media/fasthdd/swapfile.img
Run Code Online (Sandbox Code Playgroud)
开机启动:
为了确保在启动计算机时激活新的交换空间,您应该将其添加到文件系统配置文件中/etc/fstab。将其添加到文件末尾。这是推荐的,因为在我们可以访问任何文件之前,必须以读写模式挂载其他文件系统(至少一个包含交换文件的文件系统)。
# Add this line to /etc/fstab
/media/fasthdd/swapfile.img swap swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
激活:
您可以重新启动计算机或使用以下命令手动激活新的交换文件:
swapon /media/fasthdd/swapfile.img
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,您应该会看到更多的交换空间可供使用。您可以使用以下命令来检查您的新交换并确认它处于活动状态:
$ 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
Run Code Online (Sandbox Code Playgroud)
Avi*_*Raj 56
另一种增加交换大小的方法是使用GParted 分区编辑器。简而言之,您调整交换分区的大小,然后右键单击它并选择“Swapon”。
引导 gparted-live-disk 或 Ubuntu live 磁盘更容易(这样所有/dev/sda分区都将被卸载)。如果您在 18.04 之前的某些版本中运行 Ubuntu live disk,您可能需要通过运行以下命令来安装gparted:
sudo apt-get update
sudo apt-get install gparted && sudo gparted
Run Code Online (Sandbox Code Playgroud)
只有在交换分区之前或之后存在未分配的空间时,您才能增加交换分区的大小。如果交换分区下方或上方没有未分配的空间(我们尝试添加交换分区的空间),那么我们必须调整分区大小并获得未分配的空间。

在上面的屏幕截图中,我在 linux-swap 之前有 11.4 GB 的未分配空间,在交换分区之后有 12.8 GB。
要调整大小,请右键单击交换分区(此处为 /dev/sda9),然后单击调整大小/移动选项。它看起来像这样:

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

在上面的截图中,我们想要添加到交换分区的未分配空间在dev/sda7和之间/dev/sda8。要将未分配的空间从那个移动到交换分区的正上方,我们必须按照下面给出的简单步骤,
右键单击 /dev/sda8 分区,然后单击调整大小/移动选项。

单击并将滑块移动到最左侧,以便/dev/sda8分区正上方的未分配空间将位于下方/dev/sda8。然后单击调整大小/移动按钮。
现在未分配的空间就在交换分区的正上方,就像案例 1 一样。现在遵循案例 1。

我在扩展分区的正下方有一个 18 GB 的未分配空间。要将这个空间添加到 linux-swap 分区(存在于扩展分区内),我们必须按照以下步骤操作,
右键单击扩展分区并选择调整大小/移动选项,如下图所示

单击并将箭头拖到最右边,然后单击“调整大小/移动”,这样 18 GB 的未分配空间将出现在扩展分区的底部。我在底部已经存在 14.80 GB 的未分配空间,现在是 18.34 GB 与它相结合,在扩展分区的底部创建 (18.34+14.80 GB) 的未分配空间。
现在交换分区的正下方有一个未分配的空间,它将类似于案例 1,然后遵循案例 1。
注意:在进行上述操作之前,不要忘记备份所有重要数据。
Mar*_*oma 53
# 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
# Set the correct permissions
sudo chmod 0600 /swapfile
sudo mkswap /swapfile # Set up a Linux swap area
sudo swapon /swapfile # Turn the swap on
Run Code Online (Sandbox Code Playgroud)
grep Swap /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
Jea*_*aud 42
fallocate如果您想为交换文件保留空间,也可以使用,而无需用 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.
Run Code Online (Sandbox Code Playgroud)
如果你已经有一个swap定义,你可以删除它或保留它,你的 *nix 将管理它(通过定义swapon优先级更好)。如果您想在不同的设备、驱动器之间传播交换,这可能很有用(根据它们的速度或其他自定义需求,请参阅StackExchange 上多个交换文件的目的是什么)。
fallocate添加第二个交换文件的简单用法$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 262140 246276 -1
Run Code Online (Sandbox Code Playgroud)
创建和激活交换文件的标准方法:
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
Run Code Online (Sandbox Code Playgroud)
单线:
$ 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
Run Code Online (Sandbox Code Playgroud)
在您的/etc/fstab文件中添加一行,以便在下次重新启动时初始化交换(我们还在此处更新新创建的交换空间的优先级,并更新旧交换文件的优先级)。
在您的 /etc/fstab 文件中,注意 prev 交换的优先级现在是 10。
/swapfile none swap sw,pri=10 0 0
/swapfile_4G.img none swap sw,pri=20 0 0
Run Code Online (Sandbox Code Playgroud)
$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 262140 0 10
/swapfile_4G.img file 4194300 0 20
Run Code Online (Sandbox Code Playgroud)
/etc/fstab删除与要删除的交换相关的行。
删除并移除交换文件。
sudo swapoff /mnt/swapfile && sudo rm /mnt/swapfile
Run Code Online (Sandbox Code Playgroud)
haf*_*031 26
我发现以下视频非常有趣,并且是增加交换文件大小的直接方法。查看这个简短的视频教程:如何在 Ubuntu Linux 上增加交换 | Linux手册
(摘自该视频)以下是增加交换空间的方法(如果您的系统使用交换文件):
首先检查你的linux系统的交换空间大小:
swapon --show
Run Code Online (Sandbox Code Playgroud)
示例输出:
NAME TYPE SIZE USED PRIO
/swapfile file 797.2M 0B -2
Run Code Online (Sandbox Code Playgroud)
此输出显示正在使用的交换大小以及交换类型。这里的交换类型是“文件”类型(也可以是分区类型)。Ubuntuswapfile默认使用,增加和减少它的大小相当容易。
由于我们要修改,swapfile所以首先将其关闭。您可能会注意到该进程被多次终止。发生这种情况是因为在关闭交换之前,系统将其内容移动到主内存,这可能会溢出主内存。因此,如果以下命令被终止,请多次运行它,直到成功完成。您还可能面临突然注销和/或其他进程可能会被自动终止。:
sudo swapoff /swapfile
Run Code Online (Sandbox Code Playgroud)
现在,如果您运行swapon --show它,它不会显示任何内容,因为它已关闭。
现在更改交换大小(我将其设为 4GB,将 n GB 设为 nG):
sudo fallocate -l 4G /swapfile
Run Code Online (Sandbox Code Playgroud)
现在,如果您检查文件,您会发现大小增加了。看见了:
ls -lh /swapfile
Run Code Online (Sandbox Code Playgroud)
现在告诉 Linux 系统使用这个文件作为交换系统:
sudo mkswap /swapfile
Run Code Online (Sandbox Code Playgroud)
这将擦除旧的交换签名并使用新的交换签名。
现在打开交换空间(正如我们最初关闭交换空间一样):
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
完毕!
现在使用swapon --show或free -h查看更改。
就我而言,我已经有一个我认为是 1GB 的交换文件,但是当我仔细查看它时,它只有 256 MB 大,并且在预编译我的 Rails 资产时,服务器会耗尽内存
Errno::ENOMEM: Cannot allocate memory - nodejs
Run Code Online (Sandbox Code Playgroud)
我按照此处所述创建了我的交换文件:https : //stackoverflow.com/a/34885004/784318
现在,创建一个名为空文件的行/swapfile如下:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
Run Code Online (Sandbox Code Playgroud)
现在要调整交换文件的大小,我必须执行以下简单步骤:
# 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
Run Code Online (Sandbox Code Playgroud)
文件已创建 (536870912 / 1024 / 1024 = 512 MB):
ls -lia /swapfile
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)768 -rw------- 1 root root 536870912 Apr 27 07:54 /swapfile
使用free -m命令我可以看到文件现在是 512 MB,如预期: