SWAP空间的类型

在Linux中,通常会遇到两种类型的SWAP空间:

  • SWAP分区:通常在安装系统的阶段创建专用的SWAP分区,该分区只能用于交换,不能存储其他文件。当然也可以后期修改分区表增加SWAP分区。
  • SWAP文件:这些文件可以放置在文件系统的任何位置。这种方式相对灵活,通常用于后期内存不足的时候临时增加交换空间。

查看SWAP空间

在Ubuntu中可以使用如下命令查看SWAP空间情况(其实大部分Linux发行版本命令类似):

sudo swapon --show

该命令会列出所有的SWAP空间,包括SWAP分区SWAP文件。如果输出为空,则表示当前系统尚未启用 SWAP 空间。

当然,也可以使用内存查看命令:

sudo free -h

该命令会列出当前内存使用情况,包括物理内存和虚拟内存(SWAP空间)信息。

创建SWAP文件

本文主要关注于使用文件来调整SWAP空间。关于创建SWAP分区其实整体步骤和方法基本一致,毕竟Linux的基本思想就是一切设备皆文件。

只需要创建一个专用分区并将其mount挂载,然后将其当作本文创建的SWAP文件进行格式化并加入交换池就可以了。

在本节中,我们将创建一个新的SWAP文件,并将其添加到当前的交换池中。

1. 创建一个空白文件

在「终端」中使用以下命令创建一个空白文件:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

部分说明:

  • dd命令是用指定大小的块拷贝文件并进行转换的工具,可以用于备份、恢复、压缩、测试磁盘等操作
  • if - Input File - 输入文件名; of - Output File - 输出文件名
  • /dev/zero是Linux系统中的一个特殊块设备,在每次读取时输出字节零
  • /swapfile是希望创建的SWAP文件位置,这里直接创建在根目录下命名为swapfile
  • bs是读入/输出的块的大小,单位为bytes字节
  • count是拷贝blocks块的数量
  • 上面创建的文件大小计算为 1M × 2048 = 2G,要创建不同大小的文件,请更改相应的bscount参数值。
  • 可以使用其他工具(例如 fallocate)来创建文件,但在某些情况下,可能会引起问题。更详细的讨论可以在这篇 AskUbuntu 帖子中找到。

2. 设置文件权限

使用以下命令设置正确的文件权限:

sudo chmod 600 /swapfile

3. 格式化文件为SWAP空间

使用使用mkswap实用程序将文件格式化为SWAP空间:

sudo mkswap /swapfile

4. 将文件加入到SWAP交换池中

使用以下命令激活swap文件并将其添加到交换池中:

sudo swapon /swapfile

至此,SWAP文件就创建完毕。可以使用swapon --showfree -h命令检查

另外,使用swapon命令将文件加入交换池是临时操作,在系统重启后会失效,需要再次手动添加。

如果希望让创建的SWAP文件永久生效,可以将该记录写入系统的文件系统信息fstab

将相关记录添加到fstab文件

编辑/etc/fatab文件,例如使用vim进行编辑:

sudo vim /etc/fatab

添加如下内容:

/swapfile swap swap defaults 0 0

其中/swapfile是前面创建的SWAP文件


调整Swappiness值

Swappiness是Linux内核的一个属性,用于定义Linux系统使用SWAP空间的频率。swappiness值的范围是0100,较低的值会尽量减少内核对SWAP空间的使用,而较高的值会使Linux内核更积极地使用SWAP空间。

swappiness的数值记录在/proc/sys/vm/swappiness文件中

Ubuntu 系统的默认swappiness值为60,可以使用以下命令进行查看:

cat /proc/sys/vm/swappiness

如果需要修改,可以直接编辑该文件,也可以使用如下命令(例如将其修改为40):

sudo sysctl vm.swappiness=40

如果要让设置在系统重启后依然有效,需要在/etc/sysctl.conf文件中添加以下内容:

vm.swappiness=40

最佳的swappiness值取决于Ubuntu系统的工作负载、物理内存的大小和内存的使用方式,应该逐渐调整这个参数,以找到最佳取值。


删除SWAP文件

要停用并删除SWAP文件,请按照下列步骤操作:

1. 停用SWAP文件

在「终端」中运行以下命令停用 SWAP 文件:

sudo swapoff -v /swapfile
  • -v | --verbose:执行的时候显示详细信息

2. 修改fstab文件,删除相关记录

如果创建的时候在fatab文件中添加了有关记录使其永久生效,删除的时候也应该相应的在/etc/fstab文件中删除swap相关的行

3. 删除SWAP文件

最后,直接删除SWAP文件就可以了:

sudo rm /swapfile

调整SWAP文件大小

方法一:创建新的SWAP文件

如果是要增加SWAP空间的大小,可以直接按照前面所述的方法再创建一个新的空白文件并添加到交换池中

添加后使用swapon --show查看会显示出每个文件的具体信息,而使用free -h查看则会发现其将两个文件合并显示为一条信息

方法二:重新创建SWAP文件

如果要减小SWAP空间或者不希望分成两个文件,可以先将当前的文件删除,然后重新创建

具体过程不在赘述

方法三:使用dd命令追加内容

如果是希望增加SWAP空间,又不想分成多个文件,可以直接使用dd命令追加空间

注意要操作SWAP文件,先运行以下命令将其从交换池中移除:

sudo swapoff /swapfile

重新运行dd命令来增加文件的大小:

sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc
  • 默认情况下,dd会覆盖输出文件(如果of已经存在)。如果希望将其改为附加文本模式,请将oflag设置为appendconv设置为notrunc
  • conv=:转换列表
    • 指定数据转换方式。常见的转换选项包括:
      • notrunc:不截断输出文件
      • noerror:遇到读取错误时继续
      • sync:使用零填充不足的块
      • swab:交换每对字节
      • ascii:转换为ASCII
      • ebcdic:转换为EBCDIC
      • ibm:转换为IBM EBCDIC
      • lcase:转换为小写
      • ucase:转换为大写
      • block:转换为块格式
      • unblock:转换为非块模式

修改后重新将文件格式化:

sudo mkswap /swapfile

并将其作为交换文件启用:

sudo swapon /swapfile

参考:


TianziWeb From 2011.02.15