如何在 Linux 上创建交换文件如何在 Linux 上创建交换文件如何在 Linux 上创建交换文件如何在 Linux 上创建交换文件
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上创建交换文件

将交换空间添加到 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 上的工作原理)。有一个方便的表格显示了建议的交换空间量,用于您的系统具有的 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) may 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 来创建交换文件。用于研究本文的机器有 2 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 可以使用交换文件。使用 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

这些字段是:

  • 文件系统:交换文件的路径和名称。
  • 挂载点:文件没有像文件系统那样挂载,因此条目为“无”。
  • 类型:这是“交换”。
  • 选项:在启动时 swapon -a(启动所有标记为交换的设备)将从一个启动脚本调用。此选项告诉 Linux 将此条目视为交换资源,该交换资源应受该 swapon -a 命令的控制。在这里看到“默认值”是很常见的,因为一些 Linux 用户错误地认为这个字段被忽略了。正如我们将要看到的,事实并非如此。因此使用正确的选项是有意义的。
  • Dump:这可以设置为零。在这种情况下无关紧要。
  • 通过:这可以设置为零。在这种情况下无关紧要。

保存更改并关闭编辑器。

检查交换使用情况

要查看交换空间是否正在使用,请使用带有 --show 选项的 swapon 命令:

swapon --show

这些列是:

  • 名称:交换分区或交换文件的名称。
  • 类型:交换设备的类型。
  • 大小:交换资源的大小。
  • 已用:已用交换空间量。
  • Prio:此交换空间的优先级。

交换空间优先级

每个交换空间都分配了一个优先级。如果您不提供,系统会自动分配一个。自动分配的优先级始终为负。可以手动分配的优先级范围是0到32767。优先级高的swap资源优先使用。

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

要设置优先级,请将 pri=(优先级)选项添加到 /etc/fstab 条目。编辑您添加到 /etc/fstab 的行,如下所示:

/swapfile    none    swap    sw,pri=10    0    0

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

swapon -- show

此交换空间的优先级已提升到 10。这证明 /etc/fstab 条目中的选项字段未被忽略。

轻松交换空间

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

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 文件中。

繁荣。任务完成。

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

©2015-2025 艾丽卡 support@alaica.com