ファイルシステムで利用可能なブロック数を確認するには?

ファイルシステムで利用可能なブロック数を確認するには?

dfはこの情報を提供する必要があることを知っていますが、dfを実行すると利用可能な1kブロックの数が表示されますが、私のファイルシステムは4kブロックを使用しています。

もちろん簡単に4に分けることもできますが、粒度が違うので必ずしも正しいとは限りません。たとえば、4つの1kファイルは1kブロックを使用するファイルシステムでは4つの1kブロックを使用しますが、4つの1kファイルは4kブロックを使用するファイルシステムで4つの4kブロックを使用します。 (したがって、4で割ると誤った答えが出ます。)

答え1

4Kファイルシステムブロックを占める1Kファイルがある場合、df出力に4Kが貢献します。

dfこの数は、カーネルに使用可能なブロック数を要求し(statfs/使用statvfs)、それをブロックサイズ/ 1024で乗算することによって計算されます。

4で割ります。時には状況が思ったより簡単なこともあります。

一方、各バージョンがレポートdf単位で1024バイトのブロックを使用していると仮定してはいけません。時には512です。

答え2

興味深いことに、さまざまなバージョンで設定されたオプションはdf非常に多様です。

GNUを使用している場合df(例:Linux
df -B4K
)、(または)と言うと、df -B4k4KBのブロックサイズを補償できます。

~のためオープンBSDdfそしてMacOSXdf、環境変数を4096に設定して、4 KBのブロックサイズを使用するようにBLOCKSIZE指示します。df

~のためソラリス/usr/bin/dfこの-vスイッチを使用すると、「ファイルシステムに割り当てられたブロックの総数、既存のファイルに割り当てられたブロックの数、[および]権限のないユーザーが新しいファイルを作成するために使用できるブロックの数」などの情報を見つけることができます。の場合、-v「サイズは、指定された各ファイルシステムでサポートされている最小のブロックサイズの倍数で表されます。」

~のためAIXdfスイッチを使用して、-I「総ブロック数、使用済みスペース、空きスペース、使用済みスペースの割合、およびファイルシステムのマウントポイント」を確認します。 (使用されているスペースと空きスペースの単位が実際にどの単位であるのかわからず、使用されているinodeの数とinodeの比率を表示する-I以外に、関連するスイッチも表示されません。AIXでは、「Report Used」の比率がブロックと使用されたブロックと使用可能なブロックの数は、Solarisの動作と似ています。-i/usr/sysv/bin/df -v/usr/bin/df -v

これ単一のUNIX仕様~のためdfdfWikipediaに記載されているように、ブロックやinodeに結果を表示するために必要なスイッチがないようです。

答え3

POSIXdf1024 または 512 バイト単位しか使用できないため、回答はシステムごとに異なり、ファイルシステムごとにも同様である可能性が高いです (次のようなものは無視します)。ブロック再割り当てそしてインラインデータ.)

最初に考慮すべき概念は予約済みブロック、仕様によると、出力空きブロック数にはdf予約されたブロックは含まれません(通常はルート用に予約されていますが、必ずしもそうではありません)。

(ほとんど)移植可能で未使用の検索方法は、選択した出力形式を使用してdfGnuを使用することです。stat

$ stat -fc "%n type=%T freeblk=%f totalblk=%b blksz=%S" /tmp
/tmp type=ext2/ext3 freeblk=99136 totalblk=494123 blksz=4096

計算に使用されているように%a(代わりに%f)を使用して、有効な空きブロック数(つまり予約済みブロックを除く)を出力できます。df

他のシステム(* BSD)の書式設定フラグと機能はさまざまであり、statファイルシステムではなくファイルにのみ適用できます。statPOSIX以外(stat()POSIX関数とのラッパーstatvfs())、GNUバージョン(コアツールバッグ) 携帯性がとても良いです。

ext2/3/4ベースのファイルシステムを使用すると、次のコマンドをrootとして(またはより正確にはブロックデバイスノードへの読み取りアクセス権で)この情報をダンプできますtune2fs

# tune2fs -l /dev/sda3                              
tune2fs 1.42.8 (20-Jun-2013)                                                    
Filesystem volume name:   <none>                                                
Last mounted on:          /var/spool                                     
Filesystem UUID:          7b9d93dd-1322-4f54-a302-a0799f4518fb
Filesystem magic number:  0xEF53                                                
[...]
Filesystem state:         clean                                                 
Errors behavior:          Continue                                              
Filesystem OS type:       Linux                                                 
Inode count:              7651328                                               
Block count:              30588854                                              
Reserved block count:     305888                                                
Free blocks:              30060629                                              
Free inodes:              7651317                                               
First block:              0                                                     
Block size:               4096                         
Fragment size:            4096                  
[...]

この方法は、ファイルシステムがマウントされているかどうかに関係なく機能します。

答え4

ディスクブロックサイズより小さい(またははるかに小さい)ファイルが多い場合は、df関数の動作に関する有用な情報です。

問題が発生しました。 df関数は次のことを知らせます。

Filesystem     1K-blocks    Used Available Use% Mounted on
udev               89212       0     89212   0% /dev
tmpfs              24396    3236     21160  14% /run
/dev/mmcblk0p1   3583944 1926248   1593516  55% /
tmpfs             121980       0    121980   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             121980       0    121980   0% /sys/fs/cgroup
tmpfs             121980       4    121976   1% /tmp
/dev/zram1         49584   17836     28164  39% /var/log
tmpfs              24396       0     24396   0% /run/user/0

ただし、新しいファイルの作成中にエラーが発生した場合、スペースはなくなります。解決策は "df -i"であり、これはディスクに占有されているブロックを返します。

Filesystem     Inodes  IUsed IFree IUse% Mounted on
udev            22303    338 21965    2% /dev
tmpfs           30495    523 29972    2% /run
/dev/mmcblk0p1 230144 230144     0  100% /
tmpfs           30495      1 30494    1% /dev/shm
tmpfs           30495      2 30493    1% /run/lock
tmpfs           30495     17 30478    1% /sys/fs/cgroup
tmpfs           30495     15 30480    1% /tmp
/dev/zram1      12800     34 12766    1% /var/log
tmpfs           30495     21 30474    1% /run/user/0

したがって、これはディスクの空き容量/空き容量が多く表示されます。テスト用に4096バイトサイズのブロックを埋めるために約180,000個の409バイトサイズのファイルを作成したので、単純な「df」ディスク使用量はほとんど変わりませんでしたが、ディスクがいっぱいです。

関連情報