本教程讨论了 Linux 中交换文件的概念、为什么使用它以及它相对于传统交换分区的优势。 您将学习如何创建交换文件或调整其大小。
Linux 中的交换文件是什么?
交换文件允许 Linux 将磁盘空间模拟为 RAM。 当您的系统开始耗尽 RAM 时,它会使用交换空间并将 RAM 的一些内容交换到磁盘空间。 这可以释放 RAM 以服务于更重要的进程。 当 RAM 再次空闲时,它会从磁盘交换回数据。 我建议阅读这篇文章以了解有关 Linux 上交换的更多信息。
传统上,交换空间用作磁盘上的单独分区。 安装 Linux 时,您会创建一个单独的分区,仅用于交换。 但这种趋势近年来发生了变化。
使用交换文件,您不再需要单独的分区。 您在根目录下创建一个文件并告诉您的系统将其用作交换空间。
使用专用交换分区,在许多情况下调整交换空间的大小是一场噩梦,也是一项不可能完成的任务。 但是使用交换文件,您可以根据需要调整它们的大小。
最新版本的 Ubuntu 和其他一些 Linux 发行版已经启动 默认使用交换文件. 即使您不创建交换分区,Ubuntu 也会自己创建一个大约 1 GB 的交换文件。
让我们看更多关于交换文件的内容。
检查 Linux 中的交换空间
在开始添加交换空间之前,最好检查一下系统中是否已有可用的交换空间。
你可以用 Linux 中的自由命令. 就我而言,我的戴尔 XPS 有 14GB 的交换空间。
free -h total used free shared buff/cache available Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G Swap: 14G 0B 14G
free 命令为您提供交换空间的大小,但它不会告诉您它是真正的交换分区还是交换文件。 swapon 命令在这方面更好。
swapon --show NAME TYPE SIZE USED PRIO /dev/nvme0n1p4 partition 14.9G 0B -2
如您所见,我有 14.9 GB 的交换空间,它位于一个单独的分区上。 如果它是交换文件,则类型将是文件而不是分区。
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
如果您的系统上没有交换空间,它应该显示如下内容:
free -h total used free shared buff/cache available Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G Swap: 0B 0B 0B
swapon 命令不会显示任何输出。
在 Linux 上创建交换文件
如果您的系统没有交换空间,或者您认为交换空间不够,您可以在 Linux 上创建交换文件。 您也可以创建多个交换文件。
让我们看看如何在 Linux 上创建交换文件。 我在本教程中使用的是 Ubuntu 18.04,但它也应该适用于其他 Linux 发行版。
步骤 1:制作新的交换文件
首先,创建一个具有所需交换空间大小的文件。 假设我想为我的系统添加 1 GB 的交换空间。 使用 fallocate 命令创建大小为 1 GB 的文件。
sudo fallocate -l 1G /swapfile
建议只允许 root 读写交换文件。 当您尝试将此文件用于交换区域时,您甚至会看到诸如“建议不安全权限 0644、0600”之类的警告。
sudo chmod 600 /swapfile
请注意,交换文件的名称可以是任何名称。 如果你需要多个交换空间,你可以给它任何合适的名字,比如 swap_file_1、swap_file_2 等。它只是一个具有预定义大小的文件。
第 2 步:将新文件标记为交换空间
您需要告诉 Linux 系统该文件将用作交换空间。 你可以这样做 交换 工具。
sudo mkswap /swapfile
你应该看到这样的输出:
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a
步骤 3:启用交换文件
现在您的系统知道文件交换文件可以用作交换空间。 但它还没有完成。 您需要启用交换文件,以便您的系统可以开始将此文件用作交换。
sudo swapon /swapfile
现在,如果您检查交换空间,您应该会看到您的 Linux 系统识别并使用它作为交换区域:
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
第 4 步:使更改永久生效
到目前为止,您所做的一切都是暂时的。 重新启动系统,所有更改都将消失。
您可以通过将新创建的交换文件添加到 /etc/fstab 文件来使更改永久化。
在对 /etc/fstab 文件进行任何更改之前进行备份总是一个好主意。
sudo cp /etc/fstab /etc/fstab.back
现在您可以将以下行添加到 /etc/fstab 文件的末尾:
/swapfile none swap sw 0 0
您可以使用命令行文本编辑器手动完成,也可以使用以下命令:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
现在你已经准备好了一切。 即使在您重新启动 Linux 系统后,您的交换文件也将被使用。
调整交换性
swappiness 参数确定应使用交换空间的频率。 swappiness 的取值范围是 0 到 100。值越大,表示交换空间的使用频率越高。
Ubuntu 桌面中的默认交换量为 60,而在服务器中为 1。您可以使用以下命令检查交换量:
cat /proc/sys/vm/swappiness
为什么服务器应该使用低swappiness? 因为交换比 RAM 慢并且为了获得更好的性能,应该尽可能多地利用 RAM。 在服务器上,性能因素至关重要,因此交换性尽可能低。
您可以使用以下 systemd 命令即时更改 swappiness:
sudo sysctl vm.swappiness=25
不过,这只是暂时的。 如果要使其永久化,可以编辑 /etc/sysctl.conf 文件并在文件末尾添加 swappiness 值:
vm.swappiness=25
在 Linux 上调整交换空间的大小
有几种方法可以在 Linux 上调整交换空间的大小。 但在你看到它之前,你应该学习一些关于它的东西。
当您要求系统停止使用交换文件作为交换区域时,它会将所有数据(准确地说是页面)传输回 RAM。 因此,在您换掉之前,您应该有足够的空闲 RAM。
这就是为什么一个好的做法是创建并启用另一个临时交换文件。 这样,当您交换掉原始交换区时,您的系统将使用临时交换文件。 现在您可以调整原始交换空间的大小。 您可以手动删除临时交换文件或保持原样,它将在下次启动时自动删除。
如果您有足够的可用 RAM 或创建了临时交换空间,请交换原始文件。
sudo swapoff /swapfile
现在您可以使用 fallocate 命令来更改文件的大小。 假设您将其更改为 2 GB:
sudo fallocate -l 2G /swapfile
现在再次将文件标记为交换空间:
sudo mkswap /swapfile
并再次打开交换:
sudo swapon /swapfile
您也可以选择同时拥有多个交换文件。
在 Linux 中删除交换文件
您可能有自己的理由不在 Linux 上使用交换文件。 如果要删除它,该过程类似于您刚刚在调整交换大小时看到的过程。
首先,确保您有足够的可用 RAM。 现在交换文件:
sudo swapoff /swapfile
下一步是从 /etc/fstab 文件中删除相应的条目。
最后,您可以删除文件以释放空间:
sudo rm /swapfile
你换吗?
我想你现在对 Linux 中的交换文件概念有了很好的理解。 您现在可以轻松创建交换文件或根据需要调整它们的大小。
如果您对此主题有任何补充或有任何疑问,请在下面发表评论。