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

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