3

У меня есть жесткий диск на 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.

1 ответ1

1

Во-первых, процесс преобразования сохраняет копию всех предыдущих системных метаданных в новых метаданных, которые могут занимать значительное количество места на больших дисках.

Во-вторых, процесс преобразования является запутанным, что приводит к чрезвычайно большим экстентам, поскольку экстенты в EXT4 также велики, и BTRFS будет присущ их размер.

Выделенный размер становится примерно в 1,5 раза больше размера используемых метаданных. Процесс дефрагментации уменьшит размер используемых метаданных, но не изменит распределение. Существует также опция скиновых экстентов для дальнейшего сокращения метаданных, но это более полезно в системах с большим количеством небольших файлов; Ваше распределение метаданных составляет менее 10%, что очень мало.

Предполагается, что команда balance позволяет уменьшить размер выделения до нового значения на основе текущего использования метаданных, что, по-видимому, было сделано правильно. Предполагается, что команда balance не должна переходить от метаданных к данным, но это может иметь какое-то отношение к исходной копии изображения метаданных EXT4, находящейся в исходном расположении метаданных, и теперь перемещенной в данные (подобъем ext2_saved). Проверьте размер изображения EXT4, чтобы увидеть, если оно 1,1 ТБ. В любом случае, я бы дефрагментировал файловую систему.

Следует отметить, что выполнение баланса без дефрагментации может привести к ошибкам. Для предотвращения проблем с файловой системой рекомендуется использовать более новые версии ядра, в частности 3.17 и более поздние.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .