磁盘上的 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
  • RAID1

好的,看起来 BTRFS 在某个阈值上将文件四舍五入到 1MB。1MB 是确切地1048576(或 2²⁰)字节。

更令人惊讶的是,cat __init__.py > __init__2.py生成了一个正确大小的新文件。这是否与我通过 samba 创建这些文件有关?

新创建的文件也具有正确的大小。

答案1

事实证明只需就地重写所有文件即可:

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

正确地缩小了文件。我没再看到过这种情况。

相关内容