创建swap分区很简单,首先得创建一个文件,然后将这个文件设置为交换分区,最后给系统使用这个交换分区。

网络上很多文章所使用的命令,会在设置交换分区的时候出现错误,这是因为创建文件的时候使用了错误的方式。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
# 创建文件
[root@VM_171_54_centos ~]# fallocate -l 4G /swapfile
 
# 检查文件信息
[root@VM_171_54_centos ~]# ll -h /swapfile 
-rw-r--r-- 1 root root 4.0G Jan 30 23:05 /swapfile
 
# 修改文件权限
[root@VM_171_54_centos ~]# chmod 600 /swapfile
 
# 再次检查文件信息
[root@VM_171_54_centos ~]# ll -h /swapfile 
-rw------- 1 root root 4.0G Jan 30 23:05 /swapfile
 
# 将文件设置为交换分区
[root@VM_171_54_centos ~]# swapon /swapfile
swapon: /swapfile: read swap header failed: Invalid argument

从上面可以看出,在设置交换分区的时候,系统抛出了错误信息。

 

问题其实很简单,设置交换分区所使用的命令swapon需要使用物理分配的文件空间,但创建交换文件时使用的fallocate却是使用ioctls来快速划分一块区域,因为不是物理分配的空间,所以在设置交换分区的时候会出现错误。

 

此时我们可以使用dd命令创建一个文件:

 
[root@VM_171_54_centos ~]# dd  if=/dev/zero  of=/swapfile  bs=1024  count=2048k
2097152+0 records in
2097152+0 records out
2147483648 bytes (2.1 GB) copied, 6.51212 s, 330 MB/s

接下来再进行其他步骤:

# 修改文件权限
[root@VM_171_54_centos ~]# chmod 600 /swapfile
 
# 将文件设置为交换分区
[root@VM_171_54_centos ~]# mkswap /swapfile
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=27eea5f0-d60d-494c-9b37-7db855d9ea0f
 
# 使用交换分区
[root@VM_171_54_centos ~]# swapon /swapfile

最后还得将分区信息写入文件,以便下次启动系统的时候自动加挂载:

 
# 打开文件
[root@VM_171_54_centos ~]# vim /etc/fstab
 
# 将配置信息写入文件的最后一行
/swapfile   swap    swap    sw  0   0

至此,完成所有工作。

 

最后还得进行检查:

 
[root@VM_171_54_centos ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            991          55          74           0         861         782
Swap:          2047           0        2047 0      

可以看到,目前拥有2G的swap空间,还可以通过swapon进行检查:

 
[root@VM_171_54_centos ~]# swapon -s
Filename    Type    Size    Used    Priority
/swapfile                                  file    2097148    0    -1

结语:

这个是小问题,没有swap,我们可以自行创建。但我见过禁用mkswap命令的厂商,在只有512M甚至更少内存的虚拟机中,真是欲哭无泪,编译一个软件都不行。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄