發新話題

Linux 指令:觀察硬碟的資訊與測試讀寫速度

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 的選項,減少次目錄的加總喔!

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。