UNIX系統(tǒng)下監(jiān)視磁盤空間和使用情況

通常,UNIX® 管理員都擁有一套常用的輔助進程管理的實用工具、技巧和系統(tǒng)。本文提供了各種用于簡化各個過程的關(guān)鍵實用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統(tǒng),而大部分的技巧則來源于長期的經(jīng)驗積累和減輕系統(tǒng)管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環(huán)境中可用的工具,包括簡化異類環(huán)境中的管理任務(wù)的方法。
入門:使用 df
監(jiān)視磁盤空間是 UNIX 管理員的工作中很重要的一部分。本文向您介紹一些完成管理工作所需的工具,包括 df、du、find 的使用,甚至配額的使用。讓我們先來看看 df 的強大功能。
對于許多管理員來說,使用 df 工具可能有點像斷續(xù)的神經(jīng)運動,因為它通過一個命令提供了所有文件系統(tǒng)中已使用的和可用的存儲空間的快照視圖。根據(jù)您的 UNIX 環(huán)境的不同,df 的缺省輸出可能包含各種不同的信息。
大部分現(xiàn)代的 df 變種都可以顯示磁盤空間、使用情況和可用性,通常還包括裝入點(有時包括設(shè)備)。例如,基于 BSD 的 Mac OS X 顯示如清單 1 所示的信息。
清單 1. Mac OS X 的缺省磁盤空間信息
Filesystem 512-blocks Used Avail Capacity Mounted on
有些變種可能還支持可選的塊大小,如兆字節(jié)(使用 清單 3. 使用帶 -g 選項的 df 命令
很顯然,在增大顯示的塊大小的同時,信息中的詳細級別也開始降低,但使用可選的大小是一種快速監(jiān)視磁盤,特別是超大容量磁盤的很有用的方法。其他版本的 df 工具(特別是 Solaris),缺省情況下將報告空塊和文件可用性信息。大部分文件系統(tǒng)都具有能夠存儲文件的上限數(shù)值(該數(shù)值很大,以至于通常不會達到該上限),所以有可能整個系統(tǒng)填滿了文件,還有可用磁盤容量但卻不能再存儲任何文件了。 您可以在清單 4 中看到 Solaris 的缺省輸出示例。 清單 4. Solaris 的缺省輸出
使用 清單 5. 使用 -k 選項
所有的 df 變種都接受一個目錄或路徑,然后顯示包含該路徑的文件系統(tǒng)的磁盤空間信息。例如,下面顯示了應(yīng)該如何獲得根文件系統(tǒng)的空間信息:
或者,下面使用 df 顯示了一個用戶的 home 目錄的空間信息:
|
使用 df 的輸出
df 工具實際上是 disk free 的縮寫,并且這也正是該工具所顯示的內(nèi)容。如果再次查看某個示例輸出,您可以從中提取一些特別重要的元素:
Filesystem kbytes used avail capacity Mounted on |
第一列通常具有與塊大小數(shù)據(jù)相對應(yīng)的標題,它顯示了磁盤的總大小。used 列顯示了該文件系統(tǒng)或設(shè)備上已使用的塊數(shù)。avail 列顯示了該文件系統(tǒng)上尚未使用的(可用的)塊數(shù)。
capacity 列提供了總大小中已使用的磁盤空間所占的百分比。這個信息本身可以提供關(guān)于可用空間的直觀指示。
缺省情況下,UNIX 所創(chuàng)建的文件系統(tǒng)中百分之九十的容量可用于存放用戶數(shù)據(jù)。剩下的百分之十由系統(tǒng)保留,以便 root 用戶執(zhí)行緊急維護工作。如果用戶試圖添加或創(chuàng)建超出該限制的文件,那么將返回一個錯誤(超出文件系統(tǒng)空間)。
有了這個緊急維護空間,就可以利用它對一塊已滿的磁盤進行恢復。例如,作為管理員,您可以使用這個空間來創(chuàng)建快速備份,或?qū)ΜF(xiàn)有的數(shù)據(jù)進行壓縮而無需為達到該目的使用輔助文件系統(tǒng)。您可以使用 tunefs 工具或在創(chuàng)建文件系統(tǒng)時,調(diào)整保留的空閑空間的大小。對于大容量磁盤來說,這是至關(guān)重要的,因為其中百分之十的緩沖區(qū)可能等于許多個 GB 的潛在空間。通常好的做法是至少保留百分之一的空間,以便在完全用盡存儲空間之前,提供最低限度的緩沖區(qū)空間。在深入研究這個問題之前,特別是如果已經(jīng)使用了大量的磁盤空間,您需要確定到底是誰使用了所有的這些空間。
使用 du
du
命令并不是顯示磁盤的空閑空間,而是顯示磁盤使用情況的信息。du 工具用于確定文件和目錄的磁盤使用情況。要使用這個工具,改變到一個目錄,然后運行該工具(請參見清單 6)。
清單 6. du 命令
$ cd /var |
上面的清單 6 中顯示的輸出,經(jīng)過了適當?shù)恼{(diào)整。缺省情況下,du 將顯示當前或指定的目錄下每個文件和目錄的文件使用情況。得到的值是文件的大小,單位為該系統(tǒng)中的缺省塊大小,與 df 所使用的單位相同??赡苁且部赡懿皇?1K,而使用 -k
命令行選項,您可以強制以 1K 塊為單位進行顯示。
您可能需要根據(jù)所查看的頂級文件或目錄對信息進行摘要。使用 -s
選項以打開摘要視圖。下面是 Solaris 安裝中的一個摘要版本在 /var 目錄中的顯示:
$ du -sk |
請注意,它顯示了當前目錄 (.) 的摘要信息。要獲得所有文件和目錄的摘要信息,可以使用 * 通配符(請參見清單 7)。
清單 7. 使用 * 通配符獲得摘要信息
$ du -sk * |
使用該工具時,特別是在用戶目錄中使用該工具時,請?zhí)貏e小心,因為所顯示的信息中不包含隱藏 文件,換句話說,具有單點號前綴的那些文件和目錄。您可能希望使用下面的代碼行,在用戶目錄中獲得所有的摘要信息:
$ du -sk * .[a-zA-Z0-9]* |
du 命令的最后一個非常有用的選項是 -d
,該選項可以防止 du 命令超過文件系統(tǒng)邊界。例如,要確定根文件系統(tǒng)而不是任何其他的文件系統(tǒng)的磁盤使用情況,您可以使用 -d
選項:
$ du -dsk / |
有些系統(tǒng)沒有這個選項,但是有 -x
命令行選項,該選項僅包含與您所指定的路徑相同的設(shè)備或文件系統(tǒng)中的文件使用情況。
查找一個特定用戶的磁盤使用情況
要查找某個用戶所使用的磁盤空間,在使用 find
命令的同時,您需要結(jié)合使用 du 命令以僅報告特定用戶的磁盤使用情況。
$ find . -user mc -type f -exec du -k {} \; |
-user
選項允許您指定 find 將僅報告屬于特定用戶的文件。-type
選項強制 find 僅返回特定類型(在本示例中是文件)項目的路徑,這樣可以防止 du 包含目錄,因為這些目錄可能屬于某個用戶,但其中卻包含了許多用戶的文件。然后,對于查找到的每個路徑,執(zhí)行 du
命令以報告磁盤使用情況。
要獲得摘要信息,換句話說,即某個特定用戶所使用的總空間,您可以使用 awk 對該信息進行總計,并打印出最后的值:
$ find . -user mc -type f -exec du -k {} \;|awk '{ s = |
對于組,您可以根據(jù)相同的原則對 find 使用 -group
選項:
$ find . -group mcslp -type f -exec du -k {} \;|awk '{ s = s+$1 } END { print |
然而,如果啟用了磁盤配額,那么就有一種更簡單的方法。
使用配額
配額系統(tǒng)以文件系統(tǒng)為單位,自動監(jiān)視該文件系統(tǒng)中各個用戶的磁盤使用情況。配額環(huán)境不僅允許您監(jiān)視磁盤的使用情況,而且還允許設(shè)置相應(yīng)的使用限制,在超過使用限制時提供警告或者更直接地禁止用戶使用超過所分配的配額值的磁盤空間。下限(發(fā)出警告)稱為軟限制,而上限(禁止創(chuàng)建超過該限制的文件)稱為硬限制。有些系統(tǒng)可能還允許您控制每個用戶所擁有的文件的數(shù)目。
在您的計算機上啟動配額的確切方法取決于您所使用的操作系統(tǒng)。大多數(shù) UNIX 系統(tǒng)在缺省情況下都包含配額的支持。Linux® 系統(tǒng)可能需要構(gòu)建新的包含配額支持的內(nèi)核。然而,通常大多數(shù)操作系統(tǒng)為每個文件系統(tǒng)使用一個稱為 quotas 的文件,其中包含了對每個用戶的空間使用限制。
要啟用配額,您首先需要創(chuàng)建該文件,并確保僅有 root 用戶可以編輯該配額文件:
$ touch /export/home/quotas |
然后,使用 quotaon
命令啟用配額功能:
$ quotaon /export/home |
最后,您必須為每個用戶編輯適當?shù)呐漕~??梢允褂?edquota
命令并指定相應(yīng)的用戶來完成這項任務(wù):
$ edquota mc |
這將打開缺省的編輯器(或者 vi,如果您沒有設(shè)置可選的編輯器),其中包含一個用來設(shè)置配額值的簡單表格。在下面您可以看到,已為用戶 home 目錄文件系統(tǒng)啟用了配額,并且軟限制為 200,000KB,硬限制為 400,000KB。文件限制的設(shè)置為零,這表示沒有設(shè)置限制,用戶可以設(shè)置并創(chuàng)建任意數(shù)目的文件。
fs /export/home blocks (soft = 200000, hard = 400000) inodes (soft = 0, |
如果有更多的文件系統(tǒng)具有配額,那么您需要為這些文件系統(tǒng)配置更多的行。
如果您需要對多個用戶配置配額,那么可以首先為一個用戶設(shè)置配額,然后對 edquota
使用 -p
命令行選項。這將使用指定的用戶作為基礎(chǔ)來創(chuàng)建新的用戶。例如,要使用 mc 的設(shè)置為用戶名 slp、tw 和 sh 設(shè)置配額,請執(zhí)行下面的命令:
$ edquota -p mc slp tw sh |
使用配額進行文件限制警告
當用戶創(chuàng)建一個超過其軟限制的文件時,他們將會得到下面的警告:
quota_ufs: Warning: over disk limit (pid 1738, uid 101, inum 94, fs /export/home) |
請注意,留給用戶 7 天的時間更正該問題,您可以使用 edquota -t
來更改這個期限。
如果用戶試圖創(chuàng)建超過硬限制的文件,那么系統(tǒng)將終止寫進程并根據(jù)相應(yīng)的限制來截斷該文件:
$ mkfile 210000k overlimit |
通過運行 quota
命令,任何用戶都可以檢查他們自己的配額限制和磁盤使用情況:
$ quota |
配額管理
使用 quota
命令,系統(tǒng)管理員可以檢查任何用戶的配額,您應(yīng)該使用 -v
命令行選項以提供關(guān)于文件系統(tǒng)、使用情況和限制信息的完整報告(請參見清單 8)。
清單 8. 使用 -v 選項
$ quota -v mc |
要獲得某個文件系統(tǒng)中詳細描述所有用戶的磁盤和配額使用情況的報告,可以使用 repquota
命令,并指定要報告的文件系統(tǒng)(請參見清單 9)。
清單 9. 使用 repquote 命令
$ repquota -v /export/home |
要確保配額信息保持最新,您應(yīng)該使用 quotacheck
命令。這將利用用來報告配額信息的配額信息對文件存儲數(shù)據(jù)進行驗證。您應(yīng)該使用 cron 來自動地運行這項任務(wù),每天一次比較合適(因為這個過程是比較耗時的)。
配額的技巧和陷井
配額系統(tǒng)提供了監(jiān)視和自動管理的最佳組合,但是您應(yīng)該注意啟用了配額的文件系統(tǒng)以及您所設(shè)置的限制,因為它們可能會妨礙用戶的工作,而不是控制他們的磁盤使用情況。
例如,與您進行的使用配置相比,程序員可能需要更多的空間來構(gòu)建一個應(yīng)用程序。通過提供一個不受限制的編譯區(qū)域(通過設(shè)置一個可選的臨時目錄),您可以在維持他們的 home 目錄配額的同時避開這個問題,或者在設(shè)置很高的硬限制(甚至可能是該文件系統(tǒng)的最大容量)的同時,設(shè)置合適的軟限制。
其結(jié)果應(yīng)該是當達到軟限制時給出一個警告,而不會真正地實施硬限制。用戶應(yīng)該仍然可以構(gòu)建和創(chuàng)建臨時文件,但是因為在構(gòu)建的過程中會刪除這些文件,所以不應(yīng)該禁止用戶創(chuàng)建他們所需的文件。
配額還可以用來幫助完成監(jiān)視任務(wù),并提醒您關(guān)于特殊用戶帳戶的空間使用情況。我過去曾使用配額來監(jiān)視 Web 用戶帳戶,即所謂的 nobody 帳戶和其他帳戶,以確保它們無法向不應(yīng)具有訪問權(quán)限的文件系統(tǒng)中寫入文件。要完成這項任務(wù),可以將您需要保護的文件系統(tǒng)和用戶的硬限制設(shè)置為 1KB。
自動監(jiān)視
手動監(jiān)視磁盤空間使用情況是可行的,但是您并不希望不停地運行 df(甚至 du)來確定已使用的或可用的磁盤空間。您可以使這個過程自動化,并且當可用空間降低到一定的級別時,自動地向管理員(或者管理員組)發(fā)送電子郵件。清單 10 中的腳本用來監(jiān)視磁盤空間,您可以設(shè)置警告 (warninglimit) 和緊急情況 (lowlimit) 限制,以及進行檢查的文件系統(tǒng)的列表。
清單 10. 監(jiān)視磁盤空間
#!/bin/sh |
其中關(guān)鍵的一行是提取每個文件系統(tǒng)中空閑磁盤空間的大?。?/p>
size=`df -k $fs|grep $fs|awk '{ print $4; }'` |
該腳本使用 df 僅提取了要進行 grep 的行,然后使用 awk 提取數(shù)據(jù)的第 4 列,該列是空閑空間的大小。
然后,您可以根據(jù) warninglimit/lowlimit 來檢查空閑空間,并生成合適的錯誤。要避免系統(tǒng)同時發(fā)生下限和警告錯誤,該腳本首先檢查下限,并在嘗試測試警告之前使用 break 跳到循環(huán)中的下一個文件系統(tǒng)。
結(jié)束語
監(jiān)視磁盤空間是管理員的一項重要工作,耗盡磁盤空間將可能嚴重地影響用戶的工作,并且在嚴重的情況下,可能會丟失數(shù)據(jù),或者使得系統(tǒng)崩潰,因為系統(tǒng)無法獲得運行所需的磁盤空間。
使用 df,您可以確定整個文件系統(tǒng)的空閑空間和空間使用情況,但這只是描述了部分信息。要確定磁盤空間用于何處,您需要使用 du 工具對不同的目錄進行研究。通過使用 find,您甚至可以使用 du 來查找指定用戶所使用的空間。對于更加自動化的用戶級磁盤使用情況和控制,配額是一個更好的選擇。
相關(guān)文章
- UNIX操作系統(tǒng)是目前網(wǎng)絡(luò)上用得最多的操作系統(tǒng)之一,使用UNIX系統(tǒng),機器的關(guān)機要比使用DOS單用戶機器的關(guān)機過程復雜得多,在UNIX下如不使用正確的關(guān)機命令和關(guān)機方法,將損 壞2008-09-08
- 使用文件名自動完成功能 (file name completion)。 使用歷史擴展。 重用以前的參數(shù)。 使用 pushd 和 popd 管理目錄導航。 查找大型文件。 不使用2008-09-08
- SCO UNIX系統(tǒng)因其穩(wěn)定可靠的特點而在金融、保險等行業(yè)得到廣泛應(yīng)用,但它的安裝與維護對于專業(yè)技術(shù)人員來說也不是一件輕松的事。筆者工作所維護的系統(tǒng),安裝有SCO UNIX操作2008-09-08
- 本篇文章小編將為大家介紹,Unix系統(tǒng)常見十大故障詳細分析。需要的朋友可以參考一下2013-04-17