咱们在平时工做中,偶尔会遇到须要扩大swap分区的状况,基本的命令mkswap和swapon你们确定都很是熟练了,这里不是要讲这些命令的使用,而是要说在经过dd生成块设备后将这个生成的块设备作成swap交换分区时会遇到的坑,一个让你有点懵逼的坑:bash
做者在实际使用中的步骤以下: ide
第一步经过dd生成块设备: 测试
[root@oldboyedu-39 ~]# dd if=/dev/zero of=/dev/swap bs=1M count=100spa
100+0 records in3d
100+0 records outit
104857600 bytes (105 MB) copied, 0.207787 s, 505 MB/sio
第二步制做swap:class
[root@oldboyedu-39 ~]# mkswap /dev/swapawk
mkswap: /dev/swap: warning: don't erase bootbits sectorssed
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 102396 KiB
no label, UUID=40d402b8-b379-4d6a-bb46-44a930bd27d7
第三步增长swap:
[root@oldboyedu-39 ~]# swapon /dev/swap
swapon: /dev/swap: swapon failed: Invalid argument
为何不行了呢,还提示无效的参数?!是命令不对?其实不是的,是由于这个块设备的存放路径不对,不能存放在/dev下。
若是放在其余目录呢?
做者又测试了下:
[root@oldboyedu-39 ~]# dd if=/dev/zeroof=/home/oldboy/100M bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 2.57431 s, 40.7MB/s
[root@oldboyedu-39 ~]# mkswap /home/oldboy/100M
mkswap: /home/oldboy/100M: warning: don't erasebootbits sectors
onwhole disk. Use -f to force.
Setting up swapspace version 1, size = 102396 KiB
no label, UUID=850e6e62-0198-4516-a899-32bd042a3dcb
[root@oldboyedu-39 ~]# swapon /home/oldboy/100M
最后经过swapon -s查看下:
[root@oldboyedu-39 ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 786428 0 -1
/home/oldboy/100M file 102396 0 -2
能够了!
总结:Linux对于初学者来讲真实坑无处不在啊,同窗共勉!
补充一个脚本判断swap分区若是小于500M就自动将磁盘的空间划100M给swap:
#!/bin/bash
size=$(free -h|awk -F "[ A-Z]+" 'NR==4{print $(NF-1)}')
Time=$(date +%S)
if [ $size -le 500 ]; then
dd if=/dev/zero of=/tmp/100_$Time bs=1M count=100 >/dev/null 2>&1 &&\
mkswap /tmp/100_$Time >/dev/null 2>&1 &&\
swapon /tmp/100_$Time >/dev/null 2>&1 &&\
#echo swap is on
#else echo "swap size is ${size}M"
fi
脚本写好后,测试没有问题能够放到定时任务里面,定时检查下