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 -B4k
4KBのブロックサイズを補償できます。
~のためオープン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仕様~のためdf
df
Wikipediaに記載されているように、ブロックやinodeに結果を表示するために必要なスイッチがないようです。
答え3
POSIXdf
1024 または 512 バイト単位しか使用できないため、回答はシステムごとに異なり、ファイルシステムごとにも同様である可能性が高いです (次のようなものは無視します)。ブロック再割り当てそしてインラインデータ.)
最初に考慮すべき概念は予約済みブロック、仕様によると、出力空きブロック数にはdf
予約されたブロックは含まれません(通常はルート用に予約されていますが、必ずしもそうではありません)。
(ほとんど)移植可能で未使用の検索方法は、選択した出力形式を使用してdf
Gnuを使用することです。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
ファイルシステムではなくファイルにのみ適用できます。stat
POSIX以外(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」ディスク使用量はほとんど変わりませんでしたが、ディスクがいっぱいです。