0x01 前言

swap分区对于一个小内存的虚拟机是十分重要的,但绝大部分服务商在默认情况下都没有这个分区,因为swap可能会使得磁盘IO急剧升高。但对于用户的我们,拥有一个swap分区是十分重要的,这可以避免在小内存虚拟机中的程序崩溃。

我用过阿里云、腾讯云、AWS和OVH等等的服务商,他们在默认情况下都没有swap分区。导致在1G内存或更小的情况下编译和运行软件出现失败的情况,这时候得借助swap分区,提高可用性。

我在更接触Linux文件系统的时候遇到一个BUG,网上大多数的文章都相互抄袭,建立swap分区的流程可能在某些主机或系统上不可用而出现错误。

0x02 BUG

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

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

以下是错误提示:

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

0x03 DEBUG

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

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

接下来再进行其他步骤:

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

至此,完成所有工作。

最后还得进行检查:

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

0x04 结语

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