У меня много небольших файлов (20 миллионов) с xattr на дисках XFS. Средний размер файлов составляет около 20 КБ, а средний размер xattr - около 512 байт.
Поскольку я хотел бы переместить их в ext4, я попытался скопировать часть этих файлов в ext4 (с размером индекса 512 и 1024) и диски XFS.
Я отформатировал 3 диска со следующими параметрами соответственно:
# mkfs.ext4 -i 8192 -I 512 /dev/sde1
# mkfs.ext4 -i 8192 -I 1024 /dev/sdf1
# mkfs.xfs -f -i size=1024 /dev/sdg1
И скопировал около 30 ГБ небольших файлов с помощью cp -r --preserve = mode, owner, timestamps, xattr
Результат такой:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sde1 133654640 37164884 89360916 30% /srv/node/sde1 # ext4 -I 512
/dev/sdf1 124741744 36645652 80967252 32% /srv/node/sdf1 # ext4 -I 1024
/dev/sdg1 142507224 31020968 111486256 22% /srv/node/sdg1 # XFS
ext4 использует гораздо больше блоков, чем XFS в обоих случаях. В чем разница? Как я могу использовать ext4, не тратя зря дисковое пространство?
Одно дело в том, что XFS плохо работает на миллионах небольших размеров. XFS не является файловой системой на основе inode. Размеры ваших блоков будут отличаться, поскольку у вас много маленьких файлов, ext4 содержит группу блоков данных, а также косвенные карты блоков, блоки дерева экстентов и расширенные атрибуты, списки inode и т. Д. которые увеличивают общий размер блока для того же количества файлов. Также требуется немного времени для ведения дневника. Для ext4 вы можете удалить ведение журнала, если хотите, но время восстановления fs значительно увеличится, также вы можете выделить меньше% для суперпользователя, используя параметр -m (по умолчанию 5%), вы можете добавить 1%.