介绍

swap 就是 Linux 下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是 swap 交换分区,需要提前创建)虚拟成内存来使用。

具体步骤

查看当前的 swap 分区大小

[root@xxx /]# free -h
              total        used        free      shared  buff/cache   available
Mem:           991M        276M        620M        5.7M         93M        586M
Swap:            0B          0B          0B

swap 分区是可以当做内存使用的,所以用查看内存的指令就可以。在未配置的情况下,swap 一般为 0。

创建交换分区文件

[root@xxx /]# dd if=/dev/zero of=/home/swap bs=1024 count=2048000
2048000+0 records in
2048000+0 records out
4145152000 bytes (4.1 GB) copied, 36.7877 s, 113 MB/s

以上指令增加 2G 大小的交换分区,其中的 if 表示读取数据的来源是哪,而/dev/zero是一个特殊的设备它可以产生无限的数据;of 表示将数据写入到哪里去,可以是其他设备,也可以是指定路径下的一个文件名;bs 表示缓存大小,每次读取和写入数据的大小为 1K;count 为读取和写入的次数为 2048000 次。所以创建文件的大小等于 bs count,就是 1K 2048000 ≈ 2G。所以 bs=1M count=2048 同样可以创建 2G 大小的交换分区文件。

可以使用 df -h 指令查看创建 swap 交换文件前后的磁盘使用情况。

整个创建交换分区文件的过程可能会持续几秒,也可能几十秒,这要看你服务器本身的读写能力了。

设置交换文件

[root@xxx /]# mkswap /home/swap
Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=ccbda6bf-4c42-4222-a209-f17b9254e90f

也可以给分区文件加一个名称

[root@xxx /]# mkswap /home/swap -L swaper
mkswap: /home/swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2047996 KiB
LABEL=swaper, UUID=e944c62f-16c3-4e9c-938b-e67c91e989dc

启用交换分区

[root@xxx /]# swapon /home/swap
swapon: /home/swap: insecure permissions 0644, 0600 suggested.

我的服务器提示了一句权限安全问题,其他服务器或者文件位置也可能没有提示。

这步之后,swap 分区就创建好了,可以用 free -h 查看分区大小

[root@xxx /]# free -h
              total        used        free      shared  buff/cache   available
Mem:           991M        278M         76M        5.7M        636M        541M
Swap:          2.0G          0B        2.0G

关闭交换分区

[root@xxx /]# swapoff /home/swap

关闭之后,swap 分区文件还在,但是 由 /home/swap 创建的 swap 分区在可使用的内存列表中不存在了。

删除交换分区,恢复磁盘大小

在删除交换分区之前要先关闭交换分区,之后执行删除操作。

因为交换分区本身以文件形式存在,所以可以直接用 rm /home/swap 删除。

删除之后再通过 df -h 可以看到磁盘空间又恢复到原来的大小。

开机自启动

开机引导时自动启用,则需要编辑 # vim /etc/fstab ,添加如下代码,保存并退出:

/home/swap swap swap defaults 0 0

亲自测试了一下,是 OK 的。可以直接查看内存,或者通过 swapon -s 查看 swap 列表

扩展阅读:修改 swap 机制使系统使用 swap 创建的虚拟内存