你需要知道的关于 Linux 上的交换分区

当您安装 Linux 时,安装过程可能会向硬盘添加一个交换分区以及 Linux 本身的分区。 但是这个交换分区是做什么用的,真的有必要吗?

什么是交换?

当多任务操作系统耗尽物理内存时,它无法启动新进程或为现有进程分配更多内存。 为了解决这个问题,在本地存储(通常是硬盘驱动器)上留出一块特殊的空间,作为当前未运行的进程的临时保存区域。 操作系统将非活动进程从内存中“交换​​”到硬盘上。 这为新工作释放了内存。 当非活动进程再次变为活动状态时,它将从本地存储交换回内存。 此过程称为交换。

交换空间真的有必要吗?

交换空间在技术上是否必要? 不。Linux 可以在没有它的情况下工作,并且在某些情况下,例如嵌入式解决方案,Linux 可以在没有交换的情况下运行。 如果操作系统进入没有足够内存的情况,它会恐慌并停止。 如果有足够的物理 RAM,机器将毫无问题地运行。

交换空间实际上是必要的吗? 是的。 尽管交换会减慢计算机的速度(因为读取和写入硬盘比访问 RAM 慢得多)并且拥有尽可能多的物理内存是避免交换的最佳解决方案,但在某些合法情况下需要交换。 为了 example,在系统启动期间,可能会有进程运行(因此消耗系统内存)但随后有效地休眠很长时间。 或者分配、写入然后不再使用的内存。 在这些情况下,交换算法将开始将此内存迁移到硬盘,从而释放宝贵的系统内存。 这实际上确保了最大数量的 RAM 始终可用,从而提高性能。

在没有足够的物理 RAM 将所有内容都驻留在内存中的机器上,交换空间的使用是必不可少的!

为完整起见,值得一提的是,Linux 还具有一个称为 Out-Of-Memory Killer (OOM) 的子系统,它不会在内存不足时停止内核,而是开始杀死进程以释放资源。 它的操作是可配置的。

我应该分配多少交换空间?

没有绝对的规则,因为硬盘空间很便宜(每千兆字节一美元),所以分配太多空间总比分配太少空间要好。 根据经验,您的交换空间量应该是物理内存的两到三倍。

在不扩展交换分区的情况下添加交换

有两种方法可以在不改变现有交换分区的情况下向系统添加交换空间。 一种方法是使用另一个驱动器上的交换分区,另一种方法是使用交换文件。

要使用另一个硬盘驱动器,请创建一个类型为“Linux swap”(代码 82)的分区,然后运行“mkswap”命令准备交换空间:

在哪里 /dev/sdb2 是您创建的分区的名称。 要立即使用交换空间,请使用“swapon“ 命令:

用 ”swapon -s”以获取当前使用的交换空间的列表。 要将交换空间永久添加到系统中,您需要编辑 /etc/fstab 文件并添加类似于此的行:

如果您的系统使用唯一标识符来命名磁盘,请使用 blkid 命令以获取设备的 ID 列表。 挂载交换空间的行 /etc/fstab 然后看起来像这样:

要使用文件进行交换,请创建一个大的空白文件(使用 dd) 在要用于交换的文件系统上。 为了 example, 要创建一个 1GB 的文件,请键入:

在哪里 /store/swapfile 是所需文件系统上交换文件的路径。

与额外的交换分区一样,现在需要准备文件 mkswap 然后与 swapon. 它还需要添加到 /etc/fstab 文件。 过程和上面完全一样,但是你需要使用 /store/swapfile 而不是 /dev/sdb2 作为交换空间参数。

互换性

可以调整 Linux 内核以定义它应该尝试将进程交换出内存的积极程度。 这种趋势是由称为内核变量控制 swappiness. 一种 swappiness 0 表示内核将尽可能避免交换,而 100 表示内核将积极使用交换空间。 许多 Linux 发行版的默认设置是 60。可以使用以下命令动态更改数字:

要永久设置一个值,您需要更改(或添加,如果它不存在) vm.swappiness 变量在 /etc/sysctl.conf 文件。

如果您对 Linux 中的交换有任何疑问,请告诉我们。

本文于 2013 年 12 月首次发表,并于 2020 年 8 月更新。

图片来源: 交换

永远不会错过

接收我们最新教程的更新。

注册所有时事通讯。 我想通过电子邮件接收时事通讯。 我们不会共享您的数据,您可以随时取消订阅。 订阅

相关阅读:

Posted in: Linux