swap 是物理RAM内存已满时使用的磁盘空间:当Linux系统用完RAM时,非活动页面将从RAM移动到交换空间。
Table of contents
Open Table of contents
创建交换空间文件
使用dd命令创建swap交换空间文件
以下fallocate
和dd
命令将会在你 Ubuntu 20.04 的根目录中创建交换空间文件/swapfile
,大小是2G
。
sudo fallocate -l 2G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
当然也可以指定单位,bs=1M count=2048
同样是 2G 的大小:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
默认交换空间文件的权限只有root
用户才能写入和读取交换文件的数据。因此我们需要修改交换空间文件的权限为600
。
在Linux中可使用chmod
修改文件权限,除此之外你还需要格式化交换空间的文件。
交换空间文件所使用的文件系统与普通文件系统不一样,
交换空间它有自己的文件系统格式和专用个格式化工具mkswap
。
以下命令将修改交换空间文件的权限为600,并使用mkswap
格式化文件。
sudo chmod 600 /swapfile
sudo mkswap /swapfile
启用交换空间
当你格式化完成后,为了让系统识别交换空间文件,因此还需要手动启用交换空间文件。
在 Ubuntu 中你可以使用swapon
命令启用交换空间文件,
它将会在自动挂载到系统中。运行命令sudo swapon /swapfile
。
sudo swapon /swapfile
swapon
命令启用交换空间仅当前会话可用,重启后将不会自动挂载。
为了让交换空间永久启用,并在开机启动时自动挂载。
要在Linux系统启动时自动挂载分区,你需要在/etc/fstab
文件中定义挂载配置选项。
/etc/fstab
文件存储着文件系统的静态挂载信息,
可用于定义磁盘分区,各种其他块设备或远程文件系统,
告知Linux内核如何在挂载这些设备文件。
以下命令使用echo
,tee
命令以及管道追加行/swapfile swap swap defaults 0 0
到/etc/fstab
文件。
当计算机在重启时,交换空间将会自动启用。
可以运行命令swapon
或free
命令验证交换空间是否处于活动状态。
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
sudo swapon --show
sudo free -h
Swappiness
Swappiness
是一个Linux内核属性,用于定义系统使用交换空间的频率。
Swappiness
可以是0
到100
之间的值。
swappiness=0
的时候表示最大限度使用物理内存,然后才是交换空间,
swappiness=100
的时候表示积极的使用交换空间。
Linux的初始默认设置为60
,
你可以运行命令cat /proc/sys/vm/swappiness
命令查看当前swappiness
值的大小。
cat /proc/sys/vm/swappiness
如果你需要对swappiness
的值作出更改,
请运行sudo sysctl -w vm.swappiness=10
命令。
sudo sysctl -w vm.swappiness=10
sysctl
命令用于在运行时配置Linux内核的参数,更改仅在当前会话中可用,即重启会恢复为默认值。
为让swappiness
的值持久化,
则需要将值写入到/etc/sysctl.conf
文件中。
sysctl.conf
是Linux内核的配置文件。在Linux内核启动是将会次配置文件的参数。
运行以下命令持久化Linux内核参数swappiness
的值。
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/sysctl.conf
删除交换空间
如果你因某些原因需要关闭并且删除交换文件。你必须首先运行命令swapoff
关闭交换空间。
如果你的交换空间文件还启用fstab
方式的自动挂载,
你还需要删除/etc/fstab
文件中定义的自动挂载配置。
使用你喜欢的编辑器打开文件/etc/fstab
,并移除行定义交换空间自动挂载的行。
sudo swapoff -v /swapfile
sudo vim /etc/fstab
# 移出对应行
sudo rm /swapfile