ディスク上の BTRFS サイズは実際のサイズの 200 倍です

ディスク上の BTRFS サイズは実際のサイズの 200 倍です

BTRFS がファイルシステム上の小さなファイルのサイズを大幅に誤って引用するのはなぜですか?

[pi@rpi scipy]% cat __init__.py | wc -c            # literal byte count
4729
[pi@rpi scipy]% du --apparent-size -h __init__.py  # size on filesystem (same)
4.7K    __init__.py
[pi@rpi scipy]% du -h __init__.py                  # reported size to ls
1.0M    __init__.py
  • 完全ストックオプション(defaults、プレーンmkfs.btrfs
  • Linuxカーネル3.18
  • 1.RAID1 とは

さて、BTRFSは何らかのしきい値でファイルを1MBに切り上げているようです。その1MBはその通り1048576(または2²⁰)バイト。

さらに驚くべきことに、cat __init__.py > __init__2.py正しいサイズの新しいファイルが作成されます。これは、これらのファイルを samba 経由で作成したという事実と関係があるのでしょうか?

新しく作成されたファイルのサイズも正しいです。

答え1

結局、すべてのファイルをその場で書き換えるだけになりました。

find . -type f -exec /usr/bin/echo {} \; -exec sed -i '' {} \;

ファイルを正しく縮小しました。それ以降、同様の現象は発生していません。

関連情報