香港云服務器Linux硬盤資源包括[容量]及[文件數量(i節點)]兩種,接下來,我們來模擬一下這兩種資源分別被耗盡的故障。
環境搭建:
添加一塊硬盤sdb,并在其中劃分一塊15M大小的分區/dev/sdb1,并將分區掛載至/mnt/111下。最后的掛載情況:
[root@localhost ~]# df -m #查看容量
Filesystem 1M-blocks Used Available Use% Mounted on
……省略內容
/dev/sdb1 16 2 14 8% /mnt/111
[root@localhost ~]# df -i #查看文件數量
Filesystem Inodes IUsed IFree IUse% Mounted on
……省略內容
/dev/sdb1 4016 11 4005 1% /mnt/111
1,模擬文件數量(i節點)耗盡故障
首先寫一段bash腳本1.sh,不停地向分區系統里寫入空文件。腳本內容如下:
#! /bin/bash
i=124918
while [ $i -le 129000 ]
do
touch /mnt/111/file$i
let i++
done
然后賦予該腳本可執行權限,并且執行之。
[root@localhost ~]# chmod u+x 1.sh
[root@localhost ~]# ./1.sh
touch: cannot touch `/mnt/111/file128923′: No space left on device
#提示容量不夠,注意此時可能彈出來大量重復提示容量不夠的語句,需要按Ctrl+c取消。
此時我們再看一下分區情況:
[root@localhost ~]# df -i #查看文件數量
Filesystem Inodes IUsed IFree IUse% Mounted on
……省略內容
/dev/sdb1 4016 4016 0 100% /mnt/111
[root@localhost ~]# df -m #查看容量
Filesystem 1M-blocks Used Available Use% Mounted on
……省略內容
/dev/sdb1 16 2 14 9% /mnt/111
可以看見,分區容量尚未占滿,但文件數量已占用100%,因此不能創建新的文件了。也說明我們實驗的目的達到了。
實驗完成后,/mnt/111目錄下產生了大量的file*文件,在用rm -rf /mnt/111/file*批量刪除時,可能會出現如下錯誤,下面也給出了解決方案:
[root@localhost ~]# rm -rf /mnt/111/file*
bash: /bin/rm: Argument list too long #刪除時產生錯誤
#執行下面的刪除語句就可以了
[root@localhost ~]# find /mnt/111 -type f -name ‘file*’ –print0 | xargs -0 rm
[root@localhost ~]# #刪除成功
2,模擬容量耗盡故障
我們劃分的分區只有15M,因為一條簡單的語句就可以把容量占滿了:
[root@localhost ~]# dd if=/dev/zero of=/mnt/111/test bs=1M count=16
dd: writing `/mnt/111/test’: No space left on device #提示容量不夠
14+0 records in
13+0 records out
14516224 bytes (15 MB) copied, 7.54486 seconds, 1.9 MB/s
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
……省略內容
/dev/sdb1 4016 12 4004 1% /mnt/111
[root@localhost ~]# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
……省略內容
/dev/sdb1 16 16 0 100% /mnt/111
注意第一條dd語句,if表示從哪個設備(或文件)讀取,of表示寫到哪個設備(或文件),bs表示每次讀取的文件塊體積,count表示文件塊的數量,執行完成以后,相當于在/mnt/111/目錄下創建了一個16M大小的文件test。
執行完dd語句以后,馬上提示“No space left on device”,此時再看一下分區的情況,可以看見,容量已經耗盡,但文件數量才使用了1%。說明我們的測試目的也達到了。