Disk-Usage

在命令行上檢索磁碟統計資訊

  • December 9, 2016

我怎樣才能最便攜地從 bash 腳本中獲取磁碟統計資訊?

我已經在使用

cat /sys/block/*/stat

按磁碟/分區計算總體頻寬,但是我也試圖確定磁碟的總體大小,以及使用/空閒的扇區數。

df我知道這些統計資訊/sys/class/可以使用/sys/block/.

這可能嗎?還是我需要使用df | awktop 來獲取我正在尋找的統計數據?

編輯

案例:

這用於度量報告腳本,該腳本將從系統收集各種資訊並將其報告給圖形系統。

即抓取扇區讀/寫統計資訊

for device in /sys/block/*
do

   stats=$( cat $device/stat )

   sectorsRead=$( echo $stats | awk '{print $3}' )
   sectorsWrite=$( echo $stats | awk '{print $7}' )

   doSomethingWith sectorsRead
   doSomethingWith sectorsWrite
done

我想做類似的事情,但要獲取扇區總數,而不是使用/免費的扇區。

您嘗試做的最便攜的工具是df. 不要擺弄/sys哪個不能保證在任何非 Linux 系統上。並且不要重新發明輪子。這正是POSIX指定df的目的和原因。

當然,事情並沒有那麼簡單,並且有多種df實現方式,其中一些具有不同的格式。然而,編寫 POSIX 規範的好人,在他們無限的智慧中,在規範中包含了以下選項df

-P
   Produce output in the format described in the STDOUT section.

所以,如果你總是使用df -P它,它應該盡可能便攜。使用該標誌時,任何符合 POSIX 的df版本(應該是所有版本或盡可能接近沒有區別)將產生遵循以下規範的輸出(取自POSIXdf頁面):

當同時指定 -k 和 -P 選項時,應寫入以下標題行(在 POSIX 語言環境中):

“文件系統 1024 塊已用可用容量已安裝在\n”

如果指定了 -P 選項而沒有指定 -k 選項,則應寫入以下標題行(在 POSIX 語言環境中):

“文件系統 512 塊已使用可用容量已安裝在\n”

該實現可以調整標題行和各個數據行的間距,以便資訊以有序的列呈現。

帶有 -P 的剩餘輸出應包含每個指定文件系統的一行資訊。這些行的格式如下:

“%s %d %d %d %d%% %s\n”, , , , , ,

在下面的列表中,所有以 512 字節為單位(指定 -k 時為 1024 字節)表示的數量應向上舍入到下一個更高的單位。這些欄位是:

文件系統的名稱,採用實現定義的格式。文件系統的總大小,以 512 字節為單位。該圖的確切含義是實現定義的,但應包括 , , 以及系統保留的任何通常不提供給使用者的空間。分配給文件系統中現有文件的總空間量,以 512 字節為單位。文件系統中可供非特權使用者創建新文件的可用空間總量,以 512 字節為單位。當這個數字小於或等於 0 時,除非程序具有適當的權限,否則在不先刪除其他文件的情況下,不能在文件系統上創建任何新文件。寫入的數字可能小於零。目前分配給文件系統上所有文件的正常可用空間的百分比。這應使用分數計算:/( + )

以百分比表示。如果小於零,此百分比可能大於 100。百分比值應表示為正整數,任何小數結果都會導致它四捨五入到下一個最高整數。

文件系統層次結構出現在其下的目錄。

您可能還應該使用該-k標誌來始終將結果列印為 1024 字節單位而不是 512。您還可以設置LC_ALL=POSIX以確保語言環境不會影響輸出。將所有這些放在一起給出:

將其與超便攜的 相結合awk,您可以:

totalSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $2}')
usedSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $3}')
availableSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $4}')

引用自:https://unix.stackexchange.com/questions/329032