Por padrão, o btrfs coloca arquivos menores que 4 KiB em blocos de metadados (para evitar buscas extras que ocorreriam se os dados fossem colocados longe dos metadados); isso é controlado pela max_inline
mount option . Além disso, o btrfs duplicará os metadados por padrão, a menos que mkfs.btrfs
detecte que o dispositivo selecionado não é rotacional ao criar o sistema de arquivos; isso é controlado pela --metadata
opção em mkfs.btrfs
. Em conjunto, isso significa que o tamanho do disco de cada arquivo menor que 4 KiB é pelo menos duas vezes o tamanho real dos dados.
Com 1,2 milhões de arquivos e 18 GB, o tamanho médio de seus arquivos é de 16 KB, e eu suspeito que muitos deles são menores que 4 KiB. Isso pode explicar o aumento significativo no uso do espaço em disco sobre o ext4.
No entanto, essa explicação é suspeita porque o ext4 - como a maioria dos sistemas de arquivos - também é ineficiente para armazenar arquivos com menos de 4 KiB, já que o tamanho padrão é 4 KiB, o que significa que cada arquivo ocupa pelo menos esse espaço no disco . O Btrfs é diferente aqui, pois empacota os dados embutidos em seus blocos de metadados. Espero que o btrfs se torne mais eficiente em termos de espaço que o ext4 (sob as opções padrão atuais) para arquivos menores que 2 KiB.Assim, acho que minha explicação aqui está errada a menos que você tenha muitos arquivos entre 2 KiB e 4 KiB, ou você está usando opções não-padrão para ext4 ou btrfs.
Mas se essa explicação estiver correta, você poderá reduzir o uso de espaço em disco no btrfs não duplicando metadados: basta especificar a opção --metadata single
ao invocar mkfs.btrfs
(obviamente, isso reduz a redundância, portanto o sistema de arquivos será menos resiliente contra a corrupção de metadados). Para um sistema de arquivos btrfs existente, você pode converter metadados duplicados em metadados únicos usando filtros de equilíbrio .
É possível desabilitar inlining de dados usando a opção max_inline=0
mount, mas eu não recomendo isso porque ele se depara com o problema de eficiência de espaço para arquivos pequenos que o ext4 e outros sistemas de arquivos enfrentam.