オペレーティングシステムはDebianです。新しい8TBディスクがあります。フォーマット後の容量は7.3TBです。ファイルシステムはXFSです。ブロックサイズは4096です。
一度使用して最近その中のファイルをすべて削除しましたが、dfにはまだ52 GBが使用されていると表示されます。
find . | wc -l
0
原因は何ですか? AFAIK XFSはextのようにrootのパーセンテージを予約しません。これはOS以外のデータストレージドライブであるため、とにかくrootに予約されているパーセンテージは望ましくありません。
この余分なスペースを占めるものは何ですか?ドライブを再フォーマットせずにスペースを解放できますか?
答え1
注:デフォルト設定を使用してクリーンな73TB XFSファイルシステムを作成すると、約4.1MBのファイルシステムが作成されます。
img=largesparse.img
dd if=/dev/null "of=${img}" obs=1024 seek=$((73*2**30))
mkfs.xfs "${img}"
loopdev="$(udisksctl loop-setup -r -f "${img}" | sed 's/.* \([^ ]*\)\.$/\1/')"
udisksctl mount -b "${loopdev}"
df "${loopdev}"
生産する
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 78381065948 4120 78381061828 1% /run/media/…
したがって、実行中の作業はファイルを作成して削除することです。これは、inodeが73個の割り当てグループすべてに割り当てられ、inode B +ツリーがそのinodeが使用する範囲を指すという意味である可能性が高いです。
少し意外かもしれませんが、削除しても完全に削除されるわけではありません。みんな文書化には妥当な理由があるかもしれません。必要これはこれが新しいファイルを生成するためです。次に、すでに割り当てられているツリー構造に直接フィットします。今すぐ割り当てを解除するにはコストがかかります。そうすると、まったく同じ構造を再割り当てする可能性が高くなります。とにかくこの空間を活用しなければなりません。
別の問題は、削除順序が断片化された利用可能なリストを意味することです。デフォルトでは、すべての割り当てグループ(上記のinode bツリーを除く)は連続した利用可能なブロックを制御しますが、現在利用可能なブロックを格納する構造は連続的ではないかもしれません。 。以下を使用して、空き領域ツリーのエントリを確認できます。
xfs_db -r -c "freesp -d" /dev/{your 73 TB block device}
# ^ ^-----------^
# | |
# readonly |
# |
# command "freesp"ace with the "dump each free block" option
(空き領域が連続している場合は、73個の割り当てグループのそれぞれに1〜5行だけ表示できます。)
この時点で、ファイルシステムは空き領域ツリー構造とブロックデバイスに格納されている場所を最適化する動機がほとんどありません。十分連続した領域が大きいため、ファイルスペースを割り当てることは容易ではありません。