Linux 指令:觀察硬碟的資訊與測試讀寫速度
磁碟與目錄的容量:
現在我們知道磁碟的整體資料是在 superblock 區塊中,但是每個各別檔案的容量則在 inode 當中記載的。 那在文字介面底下該如何叫出這幾個資料呢?底下就讓我們來談一談這兩個指令:
* df:列出檔案系統的整體磁碟使用量;
* du:評估檔案系統的磁碟使用量(常用在推估目錄所佔容量)
* df
[root@www ~]# df [-ahikHTm] [目錄或檔名]
選項與參數:
-a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統;
-k :以 KBytes 的容量顯示各檔案系統;
-m :以 MBytes 的容量顯示各檔案系統;
-h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
-H :以 M=1000K 取代 M=1024K 的進位方式;
-T :連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
-i :不用硬碟容量,而以 inode 的數量來顯示
範例一:將系統內所有的 filesystem 列出來!
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823112 5585444 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
# 在 Linux 底下如果 df 沒有加任何選項,那麼預設會將系統內所有的
# (不含特殊記憶體內的檔案系統與 swap) 都以 1 Kbytes 的容量來列出來!
# 至於那個 /dev/shm 是與記憶體有關的掛載,先不要理他!
範例二:將容量結果以易讀的容量格式顯示出來
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm
# 不同於範例一,這裡會以 G/M 等容量格式顯示出來,比較容易看啦!
範例三:將系統內的所有特殊檔案格式及名稱都列出來
[root@www ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hdc2 ext3 9920624 3823112 5585444 41% /
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
devpts devpts 0 0 0 - /dev/pts
/dev/hdc3 ext3 4956316 141376 4559108 4% /home
/dev/hdc1 ext3 101086 11126 84741 12% /boot
tmpfs tmpfs 371332 0 371332 0% /dev/shm
none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
# 系統裡面其實還有很多特殊的檔案系統存在的。那些比較特殊的檔案系統幾乎
# 都是在記憶體當中,例如 /proc 這個掛載點。因此,這些特殊的檔案系統
# 都不會佔據硬碟空間喔! ^_^
範例四:將 /etc 底下的可用的磁碟容量以易讀的容量格式顯示
[root@www ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
# 這個範例比較有趣一點啦,在 df 後面加上目錄或者是檔案時, df
# 會自動的分析該目錄或檔案所在的 partition ,並將該 partition 的容量顯示出來,
# 所以,您就可以知道某個目錄底下還有多少容量可以使用了! ^_^
範例五:將目前各個 partition 當中可用的 inode 數量列出
[root@www ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hdc2 2.5M 147K 2.3M 6% /
/dev/hdc3 1.3M 46 1.3M 1% /home
/dev/hdc1 26K 34 26K 1% /boot
tmpfs 91K 1 91K 1% /dev/shm
# 這個範例則主要列出可用的 inode 剩餘量與總容量。分析一下與範例一的關係,
# 你可以清楚的發現到,通常 inode 的數量剩餘都比 block 還要多呢
先來說明一下範例一所輸出的結果訊息為:
* Filesystem:代表該檔案系統是在哪個 partition ,所以列出裝置名稱;
* 1k-blocks:說明底下的數字單位是 1KB 呦!可利用 -h 或 -m 來改變容量;
* Used:顧名思義,就是使用掉的硬碟空間啦!
* Available:也就是剩下的磁碟空間大小;
* Use%:就是磁碟的使用率啦!如果使用率高達 90% 以上時, 最好需要注意一下了,免得容量不足造成系統問題喔!(例如最容易被灌爆的 /var/spool/mail 這個放置郵件的磁碟)
* Mounted on:就是磁碟掛載的目錄所在啦!(掛載點啦!)
由於 df 主要讀取的資料幾乎都是針對一整個檔案系統,因此讀取的範圍主要是在 Superblock 內的資訊, 所以這個指令顯示結果的速度非常的快速!在顯示的結果中你需要特別留意的是那個根目錄的剩餘容量! 因為我們所有的資料都是由根目錄衍生出來的,因此當根目錄的剩餘容量剩下 0 時,那你的 Linux 可能就問題很大了。
Tips:
說個陳年老笑話!鳥哥還在唸書時,別的研究室有個管理 Sun 工作站的研究生發現, 他的硬碟明明還有好幾 GB ,但是就是沒有辦法將光碟內幾 MB 的資料 copy 進去, 他就去跟老闆講說機器壞了!嘿!明明才來維護過幾天而已為何會壞了! 結果他老闆就將維護商叫來罵了 2 小時左右吧!
後來,維護商發現原來硬碟的『總空間』還有很多, 只是某個分割槽填滿了,偏偏該研究生就是要將資料 copy 去那個分割槽!呵呵! 後來那個研究生就被命令『再也不許碰 Sun 主機』了~~ 鳥哥的圖示
另外需要注意的是,如果使用 -a 這個參數時,系統會出現 /proc 這個掛載點,但是裡面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要載入的系統資料,而且是掛載在『記憶體當中』的, 所以當然沒有佔任何的硬碟空間囉!
至於那個 /dev/shm/ 目錄,其實是利用記憶體虛擬出來的磁碟空間! 由於是透過記憶體模擬出來的磁碟,因此你在這個目錄底下建立任何資料檔案時,存取速度是非常快速的!(在記憶體內工作) 不過,也由於他是記憶體模擬出來的,因此這個檔案系統的大小在每部主機上都不一樣,而且建立的東西在下次開機時就消失了! 因為是在記憶體中嘛!
* du
[root@www ~]# du [-ahskm] 檔案或目錄名稱
選項與參數:
-a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。
-h :以人們較易讀的容量格式 (G/M) 顯示;
-s :列出總量而已,而不列出每個各別的目錄佔用容量;
-S :不包括子目錄下的總計,與 -s 有點差別。
-k :以 KBytes 列出容量顯示;
-m :以 MBytes 列出容量顯示;
範例一:列出目前目錄下的所有檔案容量
[root@www ~]# du
8 ./test4 <==每個目錄都會列出來
8 ./test2
....中間省略....
12 ./.gconfd <==包括隱藏檔的目錄
220 . <==這個目錄(.)所佔用的總量
# 直接輸入 du 沒有加任何選項時,則 du 會分析『目前所在目錄』
# 的檔案與目錄所佔用的硬碟空間。但是,實際顯示時,僅會顯示目錄容量(不含檔案),
# 因此 . 目錄有很多檔案沒有被列出來,所以全部的目錄相加不會等於 . 的容量喔!
# 此外,輸出的數值資料為 1K 大小的容量單位。
範例二:同範例一,但是將檔案的容量也列出來
[root@www ~]# du -a
12 ./install.log.syslog <==有檔案的列表了
8 ./.bash_logout
8 ./test4
8 ./test2
....中間省略....
12 ./.gconfd
220 .
範例三:檢查根目錄底下每個目錄所佔用的容量
[root@www ~]# du -sm /*
7 /bin
6 /boot
.....中間省略....
0 /proc
.....中間省略....
1 /tmp
3859 /usr <==系統初期最大就是他了啦!
77 /var
# 這是個很常被使用的功能~利用萬用字元 * 來代表每個目錄,
# 如果想要檢查某個目錄下,哪個次目錄佔用最大的容量,可以用這個方法找出來
# 值得注意的是,如果剛剛安裝好 Linux 時,那麼整個系統容量最大的應該是 /usr
# 而 /proc 雖然有列出容量,但是那個容量是在記憶體中,不佔硬碟空間。
與 df 不一樣的是,du 這個指令其實會直接到檔案系統內去搜尋所有的檔案資料, 所以上述第三個範例指令的運作會執行一小段時間!此外,在預設的情況下,容量的輸出是以 KB 來設計的, 如果你想要知道目錄佔了多少 MB ,那麼就使用 -m 這個參數即可囉!而, 如果你只想要知道該目錄佔了多少容量的話,使用 -s 就可以啦!
至於 -S 這個選項部分,由於 du 預設會將所有檔案的大小均列出,因此假設你在 /etc 底下使用 du 時, 所有的檔案大小,包括 /etc 底下的次目錄容量也會被計算一次。然後最終的容量 (/etc) 也會加總一次, 因此很多朋友都會誤會 du 分析的結果不太對勁。所以囉,如果想要列出某目錄下的全部資料, 或許也可以加上 -S 的選項,減少次目錄的加總喔!