У меня есть жесткий диск на 5 ТБ с 3,3 ТиБ (как сообщает du
) мультимедийных файлов в файлах и каталогах 119 КБ; средний размер файла был около 28 МБ. Я конвертировал раздел ext4 в btrfs с помощью btrfs-convert
. Процесс занял 10,4 часа и был связан с процессором. Сразу после конвертации:
# btrfs fi df /mnt/btrfs/
Data, single: total=3.03TiB, used=2.21TiB
System, single: total=32.00MiB, used=236.00KiB
Metadata, single: total=1.52TiB, used=1.10TiB
btrfs выделил все пространство на жестком диске (3,03 + 1,52 ТиБ ≈ 5 ТБ) и, по-видимому, поместил ~ 1 ТиБ содержимого файла в фрагменты метаданных (использовался 1,10 ТиБ). Это неожиданно, потому что очень немногие из моих файлов поместились бы в конечные узлы.
Стандартным решением для огромного распределения метаданных является перебалансировка метаданных. btrfs balance start -m
занял 8.0 часов и был связан с вводом / выводом. Впоследствии кажется, что btrfs не только выпустил неиспользуемые фрагменты метаданных, но и переместил содержимое файла из фрагментов метаданных в фрагменты данных.
# btrfs fi df /mnt/btrfs/
Data, single: total=3.32TiB, used=3.31TiB
System, single: total=32.00MiB, used=104.00KiB
Metadata, single: total=3.00GiB, used=2.18GiB
Может ли кто-нибудь объяснить, что происходит? Почему "метаданные" изначально потребляют 1,10 ТиБ, и почему балансирование уменьшит их до 2,18 ГиБ? Перемещает ли btrfs balance
содержимое файла из фрагментов метаданных в фрагменты данных?
Я использовал ядро Linux 3.13.0-46. Мои файлы не имеют жестких ссылок, xattrs, контекстов SELinux и ACL. Я не включил сжатие и не удалил откат изображения ext4.