如何在Linux上创建交换文件

时间:2020-01-09 10:39:03  来源:igfitidea点击:

将交换空间添加到Linux计算机,或者增加已经存在的交换空间,而无需弄乱分区。我们向我们展示了定制交换空间的简便方法。

交换文件与交换分区

在几种情况下,我们可能希望增加现有空间或者向Linux计算机添加新的交换空间。

  • 也许交换空间经常以最大或者接近最大的速度运行。

  • 很容易在安装过程中单击错误的选项,并拒绝无意中将交换添加到系统中。

  • 也许我们先前认为我们有这么多的随机存取存储器(RAM),不需要进行任何交换,但是我们改变了主意。

  • 有时,由于永远无法发现的原因,我们继承了没有交换的系统的管理。

所有这些的简单解决方案是将交换文件添加到计算机。这是一个特殊文件,已预先分配并保留用作交换空间。交换文件将与我们可能拥有的任何现有交换(包括交换文件或者交换分区)协同工作。

一次,与交换分区相比,使用交换文件会降低性能。机械(旋转)硬盘性能的提高和Linux操作系统中交换功能的更高效率不再是这种情况。实际上,某些Linux发行版现在默认创建交换文件,而不是交换分区。

交换不只是在内存不足时释放RAM的一种手段。这是运作良好的系统的重要组成部分。如果不进行任何交换,则对于内核而言,健全的内存管理将变得非常困难。让我们看一下添加一些交换空间的简单方法。

在我们深入之前:Btrfs和SSD

Btrfs文件系统对交换文件有一些警告。曾经有一段时间,Btrfs的写时复制特性想以一种方式运行,而交换需要以另一种方式运行的文件之间存在冲突。关于交换文件中的块编号的问题在Btrfs中并不适用。

从内核5.0版开始,如果Btrfs文件系统中的交换文件符合以下要求,则可以其中进行交换:

  • 没有写时复制(NOCOW)文件。

  • 他们没有被压缩。

  • 它们不会跨在不同的硬盘上。

大多数读者将使用默认的ext4文件系统,因此他们不必担心。

首次使用固态驱动器(SSD)时,存在着在频繁写入文件系统的情况下使用它们的担忧。人们被警告不要在SSD上放置交换空间,甚至避免将系统记录到SSD。

如今,这已不再是一个令人担忧的问题,而且许多正在销售的SSD的预期寿命将超过大多数PC。 SSD上的交换文件将比机械硬盘上的交换分区具有更好的性能。

检查现有交换空间

三思而后行。让我们检查一下计算机上可用的交换空间。我们可以通过两种方式执行此操作,我们将同时使用这两种方式。 free命令将显示已用和可用的内存。当显示内存值时,-h(人类可读)选项将导致free使用明智的单位。

free -h

free的输出表明该机器上没有配置交换空间。

如果没有RAM和可用RAM,则永远不会讨论交换。因此,值得注意的是,可用RAM为237 MB。不要误以为可用的RAM总量。该值由可用数字提供,为881 MB。

Linux将空闲RAM用于其自身的目的,例如文件缓存和内核缓冲区。专用于此的RAM量是buff / cache数字,即871 MB。但是该内存仍被认为是可用的。 buf / cache RAM的内容可以立即丢弃,并可由需要内存的任何应用程序使用。

检查交换空间是否可用的另一种方法是使用swapon命令。 --show选项不会对计算机上的交换进行任何更改。它仅提供统计信息。

swapon --show

如果此命令没有输出,则没有配置交换。

如果这些命令表明已经配置了一些交换空间,则应在决定要创建的交换文件大小时考虑现有交换空间的大小。

我需要多少交换空间?

传统的响应是我们拥有的RAM数量的两倍。但这是在计算机过去具有非常有限的RAM时创造出来的。随着RAM变得越来越便宜,程序和游戏对内存的要求越来越高,PC规格也相应地进行了调整。如今,具有32 GB RAM的家用PC并不少见。如果我们有32 GB的RAM,则不会分配64 GB的硬盘驱动器空间来交换空间。显然太过分了。

我们需要的交换数量是一个燃烧的主题,堪与最佳编辑相媲美。我们在该主题上看到的最明智的讨论之一是Ubuntu交换常见问题解答。这是一个简短而常识的方法(尽管像许多人一样,他们误解了Linux上的swappiness的工作方式)。有一个方便的表格显示了建议的交换空间,以表示系统所拥有的RAM数量,以及是否使计算机休眠或者休眠。不。

好消息是,选择什么值并不重要。我们总是可以删除交换文件,并用一个较大的文件代替它,或者用较小的那个替换它。或者,我们可以仅添加另一个交换文件。

从表中选择一个交换文件大小,然后运行一段时间。监视系统对交换空间的使用。如果需要微调,则很容易进行更改。使用交换文件,这是两分钟的工作。将其与调整实时Linux计算机上的分区进行比较。

创建交换文件

我们不应该使用fallocate命令来创建交换文件。这来自swapon的手册页:

The swap file implementation in the kernel expects to be able to write to
the file directly, without the assistance of the file system. 

This is a problem on files with holes or on copy-on-write files on file 
systems like Btrfs. Commands like cp(1) or truncate(1) create files with 
holes. These files will be rejected by swapon. 

Preallocated files created by fallocate(1) Jan be interpreted as files 
with holes too depending of the filesystem. Preallocated swap files are 
supported on XFS since Linux 4.18. 

The most portable solution to create a swap file is to use dd(1) and 
/dev/zero.

因此,尽管fallocate更快,但我们将使用dd创建交换文件。用于研究本文的计算机具有两个GB的RAM。我们将创建一个1 GB的交换文件。

选项包括:

  • if:输入文件。在这个例子中,我们使用/ dev / zero将提供零字节流。

  • of:输出文件。我们将在根目录中创建一个名为" swapfile"的文件。

  • bs:块大小(以字节为单位)。这指定一次从输入文件读取并写入输出文件的字节数。

  • count:读取和写入多少块。将此数字乘以bs值即可得到文件大小。

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

创建文件时会提供一些统计信息。

我们可以看到写入文件的块(记录)数,文件大小,创建文件所花费的时间以及有效数据传输率。

使用ls命令查看根目录中的文件:

ls /

准备交换文件

在使用交换文件之前,我们需要先使用mkswap命令准备交换文件。除了文件的路径和名称之外,我们不需要向mkswap提供任何参数:

sudo mkswap /swapfile

该文件已准备好用作交换文件。请注意有关文件权限的警告。我们需要更改这些设置,以便root用户是唯一可以读写交换文件的用户。

使用交换文件

默认权限太宽松,我们需要限制它们,以便只有root才能使用swapfile。使用chmod更改文件权限:

sudo chmod 600 /swapfile

这会从文件组成员和其他成员中删除所有权限,但允许文件所有者(root)读取和写入文件。

我们需要使用" swapon"命令让Linux知道有一个新的交换文件可供使用。我们只需要提供路径和文件名:

sudo swapon /swapfile

交换文件现在处于活动状态。

将交换文件添加到fstab

为了确保交换文件在重启后仍然可用,请将其添加到/ etc / fstab文件中。我们可以使用任何喜欢的文本编辑器,但是我们将使用图形化的Gedit文本编辑器显示该过程。

sudo gedit /etc/fstab

我们需要添加到文件底部的行是:

/swapfile    none    swap    sw    0    0

字段是:

  • 文件系统:交换文件的路径和名称。

  • 挂载点:文件没有像文件系统那样挂载,因此该条目为none。

  • 类型:这是交换。

  • 选项:在启动时,将从一个启动脚本中调用" swapon -a"(启动所有标记为swap的设备)。这个选项告诉Linux将该条目视为交换资源,应在该swapon -a命令的控制之下。通常会在此处看到默认值,因为一些Linux用户错误地认为此字段会被忽略。我们将看到,事实并非如此。因此,使用正确的选项很有意义。

  • 转储:可以设置为零。在这种情况下无关紧要。

  • 合格:可以设置为零。在这种情况下无关紧要。

保存更改并关闭编辑器。

检查交换使用情况

要查看是否正在使用交换空间,请将swapon命令与--show方法一起使用:

swapon --show

这些列是:

  • 名称:交换分区或者交换文件的名称。

  • 类型:交换设备的类型。

  • 大小:交换资源的大小。

  • 已用:已使用的交换空间量。

  • Prio:此交换空间的优先级。

交换空间优先级

每个交换空间都分配有一个优先级。如果我们不提供,则会自动分配一个。自动分配的优先级始终为负。可以手动分配的优先级范围是0到32767. 优先级高的交换资源将首先使用。

如果多个交换空间具有相同的优先级,它们会交替使用,直到它们都已满,然后系统会寻找具有最低优先级的交换空间。如果我们只有一个交换空间,那么优先级当然是无关紧要的。但是,我们将更改为演示如何创建交换文件而设置的优先级。

要设置优先级,请在/ etc / fstab条目中添加pri =(优先级)选项。编辑添加到/ etc / fstab中的行,使其看起来像这样:

/swapfile    none    swap    sw,pri=10    0    0

也就是说,将" pri = 10"添加到选项字段,并用逗号将其与sw分开。在sw,逗号和pri = 10之间不要留任何空格。重新启动计算机并使用swapon --show命令:

swapon -- show

这个交换空间的优先级已经提高到10. 这证明了/ etc / fstab条目中的options字段没有被忽略。

交换空间变得简单

通过阐述和解释,我们可以像这样轻松而快速地创建一个新的交换文件:

sudo dd if=/dev/zero /of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

让我们检查一下它是否有效:

swapon --show

如果要永久删除,请将其放入/ etc / fstab文件中。