如何为Linux新增swap交换空间

如何为Linux新增swap交换空间

在Linux上增加swap空间的方法有两种:

在安装时手动分配swap,对于这种方式,空间大小是事先规划好的,每次系统启动时会自动进行挂载,但这种方法只能在安装OS时设定,一旦设定好不容易改变,除非重装系统。
使用swapfile: 新建临时swapfile或者是空闲分区,在需要的时候设定为交换空间,最多可以增加8个swapfile。
Redhat6.4官方推荐的系统交换空间:

系统中的RAM大小 建议交换空间 如果允许休眠建议使用交换空间
⩽2GB RAM的2倍 RAM数量的3倍

2GB - 8GB 等于RAM的数量 RAM的2倍
8GB - 64GB 至少4 GB RAM的1.5倍
64GB 至少4 GB 不建议休眠
因为有些系统会允许休眠状态,如果不设置swap会无法启动,就像windows系统使用休眠设置虚拟内存一样。使用这种方法比较灵活,也比较方便,缺点是启动系统后需要手工设置。

还有其他一些博客中有下面一个推荐设置,我也不清楚是怎么得到这个标准的,是否合理也无从考证,可以作为一个参考:

系统中的RAM大小 建议交换空间
⩽ 4G SWAP 设置为内存的2倍
4G-8G SWAP 等于内存大小
8G-64G SWAP 设置为8G
64G-256G SWAP 设置为16G
如何选择可以考虑以下几个情况:

物理内存空间是否在峰值也可以满足要求,不满足建议设置swap防止内存溢出导致主机宕机,当然设置不宜过大,占用磁盘空间。
磁盘I/O是否足够,使用磁盘I/O值过低或者其他业务要求高,不建议设置swap。由于使用swap需要频繁写入磁盘,使用固态硬盘不建议设置(固态硬盘PE写入次数有限,因此寿命要比机械硬盘更低,考虑到使用寿命当然就尽量减少写入次数)
服务器安装的具体的应用,比如Mysql等不推荐设置,可以不设置或者修改参数swappiness来控制的,默认值为 60意思是说在内存使用40%的情况下就使用swap空间,可以将值设置为10 或者设置0,优先使用物理内存。
对于我使用manjaor linux作为日常操作系统用的就没有上述的考虑了,根据自己的使用情况,8G内存我设置8G或者2G其实都够用

分配swapfile作为交换空间步骤如下:

步骤
首先运行
free -h
查看一下物理内存大小和swap

         总计         已用        空闲       共享    	   缓冲/缓存    可用

内存: 7.7Gi 2.3Gi 2.3Gi 612Mi 3.1Gi 4.5Gi
交换: 0Gi 0B 0Gi
我的显示8G并没有分配swap空间所以为0

创建swapfile文件

切换到根路径

$ cd /

这里只需要改count的大小即可比如分配8G就是8,bs是单位

swapfile的位置是/var/swapfile也可以自己修改,名称也可以不叫swapfile,自己指定

$ sudo dd if=/dev/zero of=/var/swapfile bs=1G count=8
8+0 的读入
8+0 的写出
8589934592 bytes (8.1 GB) copied, 40.55445 s, 202 MB/s
mkswap创建交换文件

$ sudo mkswap /var/swapfile
swapon激活

$ swapon /var/swapfile
查看增加后swap空间

$ free -h
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 7.7Gi 2.3Gi 2.3Gi 612Mi 3.1Gi 4.5Gi
交换: 8Gi 0B 8Gi
设置开机自动挂载

$ sudo vim /etc/fstab
在其中添加一行

/var/swapfile swap swap defaults 0 0
添加之后我的完整fstab文件如下,自行参考:

/etc/fstab: static file system information.

Use 'blkid' to print the universally unique identifier for a device; this may

be used with UUID= as a more robust way to name devices that works even if

disks are added and removed. See fstab(5).

/var/swapfile swap swap defaults 0 0
/dev/sdb3 /home/guqing/guqing ext4 defaults 0 0
UUID=A402-DC5E /boot/efi vfat umask=0077 0 2
UUID=21d03dc0-948a-4adc-969c-3160a29aeef2 / ext4 defaults,noatime 0 1
其中/dev/sdb3一行是因为我挂载了磁盘的缘故

然后执行,自动挂载所有在fstab中的文件系统

$ mount -a
到此就可以使用swapfile了

去掉swap
如果不想使用swap空间了,可以使用如下方法删除swapfile

停用

$ sudo swapoff /var/swapfile

删除swapfile,路径为创建时制定的,/var/swapfile

$ sudo rm -f /var/swapfile

确认

$ free -h

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://heigemen.cn/archives/ru-he-wei-l-i-n-u-x-xin-zeng-s-w-a-p-jiao-huan-kong-jian