Ubuntu扩展Swap交换空间

dd if=/dev/zero of=swap bs=1G count=61

Posted by Rpl on June 17, 2019

交换空间swap,打个比方就是你的内存爆满了,系统就会临时把内存里一些暂时不用的数据放到硬盘上,这样内存就会空出来一部分放新的数据。如果需要用之前旧的数据,可以再把它从硬盘上搬回来。本质上交换空间就是硬盘上开辟的一块专门供内存交换数据使用的空间

当初服务器装机是默认只有1G的交换空间,结果跑起数据来,内存,交换都直接撑爆了。唯一的办法就是扩展交换空间了。

一 查看当前系统的swap大小

1
free -m

-m 是以兆为单位, -g是以GB为单位, 默认是kb

如下图:


二 创建一个swap文件

swap交换空间其实就是硬盘上一个特定的文件,只不过这个文件只有内存在读写,只不过这个文件比较大些。

1. 创建swap文件
1
2
3
4
5
mkdir /home/roo/swapfile

cd /home/roo/swapfile

sudo dd if=/dev/zero of=swap bs=1G count=64

mkdir /home/roo/swapfile 是先在/home/roo目录下创建了一个名为swapfile的文件夹 cd 进入swapfile文件夹, 然后创建一个大小为61G的,名为swap的空文件。

dd 命令解释(以下加粗的是本次使用到的参数):

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2

参数注释: 1 if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2 of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

3 ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4 cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。 注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8 conv=conversion:用指定的参数转换文件。      ascii:转换ebcdic为ascii      ebcdic:转换ascii为ebcdic      ibm:转换ascii为alternate ebcdic      block:把每一行转换为长度为cbs,不足部分用空格填充      unblock:使每一行的长度都为cbs,不足部分用空格填充      lcase:把大写字符转换为小写字符      ucase:把小写字符转换为大写字符      swab:交换输入的每对字节      noerror:出错时不停止      notrunc:不截短输出文件      sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。


2. 转换swp文件

将生成的文件转换成swap类型的文件

1
sudo mkswap -f swap

如下图:


三 激活swap文件

1
sudo swapon swap

卸载的话使用 swapoff

1
sudo swapoff swap

再次使用free查看,如下图:


四 永久生效

虽然交换空间到此已经扩展成功了,但是电脑重启的话,还是会恢复默认的swap大小。 如果要一直使用这个swap,要把它写入/etc/fstab文件中.

1
/home/roo/swapfile/swap none swap defaults 0 0

如下图:

重启后 查看 free