咱們在平時工做中,偶爾會遇到須要擴大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
腳本寫好後,測試沒有問題能夠放到定時任務裏面,定時檢查下