我們在平時工作中,偶爾會遇到需要擴大swap分區的情況,基本的命令mkswap和swapon大家肯定都非常熟練了,這裏不是要講這些命令的使用,而是要說在通過dd生成塊設備後將這個生成的塊設備做成swap交換分區時會遇到的坑,一個讓你有點懵逼的坑:
作者在實際使用中的步驟如下:
第一步通過dd生成塊設備:
[root@oldboyedu-39 ~]# dd if=/dev/zero of=/dev/swap bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.207787 s, 505 MB/s
第二步製作swap:
[root@oldboyedu-39 ~]# mkswap /dev/swap
mkswap: /dev/swap: warning: don't erase bootbits sectors
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
腳本寫好後,測試沒有問題可以放到定時任務裏面,定時檢查下