inodes, comparação de espaço consumido para muitos arquivos pequenos (xfs, btrfs, ext4)

9

Eu tenho uma partição ext4 (LVM em uma VM) com uma grande quantidade de arquivos pequenos , que tenho que estender a cada 3-4 meses.

Em relação à quantidade de espaço usado pelos inodes.

Um dos sistemas de arquivos xfs, btrfs ou ext4 usa menos espaço?

Em outras palavras, mudar para btrfs ou xfs fará com que uma partição seja preenchida com inodes mais lentos que com ext4?

abadys
fonte
se você usa ext4 e espera armazenar tipos principalmente pequenos, deve criá-lo mkfs.ext4 -t newspara obter melhores resultados. Além disso, eu sugiro que você teste - crie (no lvm, ou dispositivo de loopback, por exemplo) cada um dos itens de arquivo, por sua vez, e comece a copiar seus arquivos reais para ele até que eles sejam preenchidos. Quando for preenchido, faça df -i(ou find | wc -l) para descobrir qual deles conseguiu armazenar a maioria dos seus arquivos - dessa forma, você saberá com certeza.
Matija Nalis 7/08
1
@MatijaNalis, -Tcom um T. maiúscula O arquivo de configuração tem algumas outras opções úteis para o futuro também
ilkkachu
@ilkkachu correto, obrigado. Deveria sermkfs.ext4 -T news
Matija Nalis 08/08/16
Quão pequenos são os arquivos?
precisa saber é

Respostas:

6

Para começar com sua primeira pergunta: sim, um desses sistemas de arquivos usa menos espaço. Mesmo sem mais detalhes, seria improvável que todos usassem exatamente a mesma quantidade de espaço, uma vez que possuem implementações diferentes. Portanto, um é obrigado a usar menos espaço do que todos os outros.

O Btrfs possui alocação dinâmica de inode, portanto, não há preenchimento como as tabelas de inode para ext4 (cujo tamanho é definido no momento da criação do sistema de arquivos ext4).

O XFS é dinâmico de maneira semelhante, mas possui um limite (porcentagem do sistema de arquivos que pode ser usado para inodes); portanto, se você preenche sua permissão de inode, depende da porcentagem definida e da contagem / tamanho dos arquivos

Anthon
fonte
Obrigado pela resposta rápida! Parece que o XFS é a escolha mais segura no momento. Essa porcentagem de uso do inode pode ser alterada dinamicamente? e se não, existe uma maneira de prever quanto será necessário?
abadys
1
Você deve ser capaz de fazer isso comxfs_growfs -m XX
Anthon
3

Sim, e esteja ciente de que tudo depende de suas necessidades:

Btrfs (pronunciado como Butter FS, Better FS ou B-Tree FS)

Considerando que o btrfs será capaz de se estender por vários discos rígidos, é uma boa idéia que ele possa suportar 16 vezes mais espaço em disco do que o ext4 . O tamanho máximo da partição do sistema de arquivos btrfs é de 16 exbibytes, e o tamanho máximo do arquivo também é de 16 exbibytes.

Número máximo de arquivos: 2 ** 64

XFS

O XFS é um sistema de arquivos de registro em diário de 64 bits e alto desempenho. O XFS suporta o tamanho máximo do sistema de arquivos de 8 exbibytes para o sistema de arquivos de 64 bits. Agora, o RHEL 7.0 usa o XFS como o sistema de arquivos padrão, incluindo suporte para o uso do XFS para a /bootpartição.

Número máximo de arquivos: 2 ** 64

EXT4

O ext4 é bem conhecido por trazer melhorias de velocidade sobre o ext3. O ext4 tem alguns limites. O tamanho máximo do arquivo é de 16 tebibytes (aproximadamente 17,6 terabytes). O maior volume / partição que você pode ter com o ext4 é 1 exbibyte. Como nos sistemas de arquivos mais modernos, é um sistema de arquivos com registro em diário que significa que manterá um diário em que os arquivos estão localizados principalmente no disco e de quaisquer outras alterações que ocorram no disco. Independentemente de todos os seus recursos, ele não suporta compactação transparente, criptografia transparente ou desduplicação de dados. Os instantâneos são suportados tecnicamente, mas esse recurso é experimental, na melhor das hipóteses.

Número máximo de arquivos: 4 bilhões

XFS vs Btrfs

O XFS não possui nenhum RAID, enquanto o Btrfs RAID ainda não está completamente estável e está nos seus primeiros dias. O XFS é cada vez mais maduro que o Btrfs , mas não podemos negar que o Btrfs é poderoso e um bom sistema de arquivos em crescimento.

Por enquanto, o XFS é a minha escolha - especialmente porque é o FS padrão no RHEL 7 -, a menos que eu realmente precise de Btrfs.

FarazX
fonte
1
Isso tem algumas boas informações gerais sobre os sistemas de arquivos em geral, mas não vejo a questão específica dos arquivos pequenos sendo mencionados aqui.
Ilkkachu
@ilkkachu "grande quantidade de arquivos pequenos", o que isso significa? É tudo sobre inodes, pois os arquivos são criados via inodes e o inode é uma estrutura de dados usada para representar um objeto do sistema de arquivos. Então, eu acho que expliquei todas as necessidades do autor, além de ter mencionado o número máximo de arquivos.
FarazX 07/08/19
2

Suponho que o problema que você tem não é a partição se enchendo de inodes por si só, mas ficando sem o número de inodes no sistema de arquivos. ext4 reserva os inodes estaticamente quando o sistema de arquivos é criado, mas você pode definir o número com as opções paramkfs.ext4 :

-i bytes-por-inode
Especifique a proporção de bytes / inode. O mke2fs cria um inode para todos os bytes de bytes por espaço do disco. Quanto maior a taxa de bytes por inode, menos inodes serão criados.

-N número de inodes
Substitui o cálculo padrão do número de inodes que devem ser reservados para o sistema de arquivos (que se baseia no número de blocos e na proporção de bytes por inode). Isso permite que o usuário especifique diretamente o número de inodes desejados.

O manual declara explicitamente que a taxa de bytes por inode não pode ser alterada após a criação do FS, mas o número total será escalado para atender à taxa se o FS for redimensionado.

Você também pode definir o tamanho de cada inode. O padrão é 256 bytes em "mais" sistemas de arquivos, mas pode ser reduzido para 128 (o padrão para sistemas de arquivos "pequenos"). O espaço extra é usado para armazenar atributos estendidos (por exemplo, rótulos SELinux); portanto, se você não precisar deles, deve ser seguro reduzir o tamanho ao mínimo.

-I tamanho do inode
Especifique o tamanho de cada inode em bytes. O valor do tamanho do inode deve ser uma potência 2 maior ou igual a 128.

df -ideve mostrar o número de inodes alocados e usados. Com as opções padrão, uma partição de 30 GB que eu analisei tinha um inode para cada 16 kB, mas se os arquivos forem muito pequenos, você poderá definir, por exemplo, -i 4096um inode para cada bloco de dados no sistema.

Se seus arquivos forem menores que 4096, convém reduzir também o tamanho do bloco do sistema de arquivos, pois todos os arquivos regulares exigirão um bloco de dados completo de qualquer maneira. (Ou seja, no ext4. Não sei se outros sistemas de arquivos atuais compilam arquivos pequenos.)

-b tamanho do bloco
Especifique o tamanho dos blocos em bytes. Os valores válidos do tamanho do bloco são 1024, 2048 e 4096 bytes por bloco. Se omitido, o tamanho do bloco é heuristicamente determinado pelo tamanho do sistema de arquivos e pelo uso esperado do sistema de arquivos (consulte a opção -T).

mkfs.ext4também tem a -T <type>opção que pode ser usada como uma abreviação para alguns ou todos eles. As configurações estão dentro /etc/mke2fs.conf, o que no meu Debian faz, por exemplo, mkfs.ext4 -T smallequivalente a

mkfs.ext4 -b 1024 -I 128 -i 4096

O que pode não ser um conjunto ruim de opções para muitos arquivos pequenos (e não xattrs.)

Se seus arquivos forem ainda menores que um kB, um sistema de arquivos pode não ser a melhor maneira de salvar os dados, mas algo como um banco de dados ou um sistema específico de aplicativo talvez deva ser considerado.

ilkkachu
fonte