Ext4 (Português)

From ArchWiki
Jump to: navigation, search

De Ext4 - Linux Kernel Newbies (traduzido):

Ext4 é a evolução do sistema de arquivos mais usado no Linux, o Ext3. De diversas formas, o Ext4 é uma melhoria mais profunda sobre Ext3 do que o Ext3 foi sobre Ext2. O Ext3 foi principalmente sobre adicionar journaling ao Ext2, mas o Ext4 modifica estruturas de dados importantes do sistema de arquivos como aqueles projetados para armazenar os dados de arquivos. O resultado é um sistema de arquivos com um desenho melhorado, melhor desempenho, confiabilidade e recursos

Criar um novo sistema de arquivos ext4

Para formatar uma partição, faça:

# mkfs.ext4 /dev/partição
Dica:
  • Veja mke2fs(8) para mais opções; edite /etc/mke2fs.conf para ver/configurar as opções padrões.
  • Se houver suporte, você pode querer habilitar metadados de somas de verificação (também conhecidos como checksums).

Proporção de bytes por inode

Traduzido de mke2fs(8):

mke2fs cria um inode para todos os bytes por inode de espaço no disco. Quanto maior proporção de bytes por inode, menos inodes serão criados.

A criação de um novo arquivo, diretório, link simbólico etc. exige pelo menos um inode livre. Se a contagem de inodes for pequena demais, nenhum arquivo pode ser criado no sistema de arquivos mesmo se ainda houver espaço restante nele.

Porque não é possível alterar a proporção de bytes por inode ou a contagem de inodes após o sistema de arquivos ser criado, o mkfs.ext4 usa, por padrão, uma proporção relativamente baixa de um inode a cada 16384 bytes (16 KB) para evitar essa situação.

Porém, para partições com tamanho em centenas ou milhares de GB e tamanho de arquivo médio na faixa de megabytes, isso geralmente resulta em um número muito grande de inodes porque o número de arquivos criados nunca alcança o número de inodes.

Isso resulta em um desperdício de espaço em disco, porque todos arquivos inodes não usados ocupam até 256 bytes no sistema de arquivos (isso também é definido em /etc/mke2fs.conf, mas não deve ser alterado). 256 * vários milhões = alguns poucos gigabytes desperdiçados em inodes não usados.

Essa situação pode ser avaliada comparando as figuras {I}Uso% fornecidas pelo df e df -i:

$ df -h /home
Sist. Arq.              Tam.   Usado   Dispo.  Uso%  Montado em
/dev/mapper/lvm-home    115G    56G    59G    49%    /home
$ df -hi /home
Sist. Arq.              Inodes IUsado ILivre IUso%   Montado em
/dev/mapper/lvm-home    1.8M    1.1K   1.8M   1%     /home

Para especificar uma proporção de bytes por inode diferente, você pode usar a opção -T tipo-de-uso que sugere o uso esperado do sistema de arquivos usando tipos definidos em /etc/mke2fs.conf. Além daqueles tipos estão largefile e largefile4 maiores, que oferecem proporções mais relevantes de um inode a cada 1 MB e 4 MB, respectivamente. Pode-se usar da seguinte forma:

# mkfs.ext4 -T largefile /dev/dispositivo

A proporção de bytes por inode também pode ser definida diretamente via a opção -i: p.ex.: use -i 2097152 para uma proporção 2 MB e -i 6291456 para uma proporção 6 MB.

Dica: Por outro lado, se você está configurando uma partição dedicada a hospedar milhões de arquivos pequenos, como emails e itens de newsgroups, você pode usar valores menores de tipo-de-uso como news (um inode para cada 4096 bytes) ou small (idem, somado a tamanhos de bloco e inode menores).
Atenção: Se você faz uso intenso de links simbólicos, certifique-se de manter a contagem de inodes alta o suficiente com uma proporção baixa de bytes por inode, porque, apesar de não usar muito espaço, todo novo link simbólico consume um novo inode e, portanto, o sistema de arquivos pode esgotá-los rapidamente.

Blocos reservados

Por padrão, 5% dos blocos de sistema de arquivos serão reservados para o superusuário, para evitar fragmentação e "permitir daemons do root continuarem a funcionar corretamente após processos sem privilégios serem impedidos de escrever no sistema de arquivos" (traduzido de mke2fs(8)).

Para discos modernos de alta capacidade, isso é mais alto do que necessário se a partição for usada como um arquivo de longo prazo ou não crucial para operações do sistema (como /home). Veja esse e-mail para a opinião do desenvolvedor do ext4 Ted Ts'o sobre blocos reservados.

Geralmente é seguro reduzir a percentagem de blocos reservados para liberar espaço de disco quando a partição é:

  • Grande demais (por exemplo > 50G); ou
  • Usado como arquivo de longo prazo, isto é, onde arquivos não serão excluídos e criados com muita frequência

A opção -m de utilitários relacionados ao ext4 permitem especificar a percentagem de blocos reservados.

Para impedir totalmente de reservar blocos na criação do sistema de arquivos, use:

# mkfs.ext4 -m 0 /dev/dispositivo

Para reduzi-lo para 1% posteriormente, use:

# tune2fs -m 1 /dev/dispositivo

Você pode usar findmnt(8) para localizar o nome do dispositivo:

$ findmnt /o/ponto/de/montagem

Migrando de ext2/ext3 para ext4

Montando partições ext2/ext3 como ext4 sem conversão

Motivo

Um compromisso entre a conversão total para ext4 e simplesmente permanecer com ext2/ext3 é montar as partições como ext4.

Vantagens:

  • Compatibilidade (o sistema de arquivos pode continuar sendo montado como ext3) – Isso permite que os usuários ainda leiam o sistema de arquivos de outros sistemas operacionais sem suporte a ext4 (por exemplo, o Windows com drivers ext2/ext3)
  • Melhor desempenho (embora não tanto como uma partição ext4 totalmente convertida).[1] [2]

Desvantagens:

  • Menos recursos do ext4 são usados (apenas aqueles que não alteram o formato do disco, como a alocação de múltiplos blocos e a alocação atrasada)
Nota: Exceto pela novidade relativa do ext4 (que pode ser visto como um risco), não há nenhuma desvantagem importante para esta técnica.

Procedimento

  1. Edite /etc/fstab e altere o 'type' de ext2/ext3 para ext4 para quaisquer partições você gostaria de montar como ext4.
  2. Monte novamente as partições afetadas.

Convertendo partições ext2/ext3 para ext4

Motivo

Para experimentar os benefícios do ext4, um processo de conversão irreversível deve ser concluído.

Vantagens:

  • Desempenho melhorado e novos recursos.[3] [4]

Desvantagens:

  • As partições que contêm principalmente arquivos estáticos, como uma partição /boot, podem não se beneficiar dos novos recursos. Além disso, adicionar um diário (que está implícito ao mover uma partição ext2 para ext3/4) sempre incorre em despesas gerais de desempenho.
  • Irreversível (as partições ext4 não podem ser "rebaixadas" para ext2/ext3. No entanto, é compatível com versões anteriores até que a extensão e outras opções exclusivas estejam habilitadas)

Procedimento

Essas instruções foram adaptadas da documentação do Kernel e um tópico do BBS.

Atenção:
  • Se você converter o sistema de arquivos raiz do sistema, assegure-se de que o initramfs reserva ('fallback') está disponível na reinicialização. Alternativamente, adicione ext4 de acordo com Mkinitcpio#MODULES e gere novamente o initramfs antes de iniciar.
  • Se você decidir converter uma partição /boot separada, assegure-se que o gerenciador de boot oferece inicialização do ext4.

Nas etapas a seguir, /dev/sdxX denota o caminho para a partição a ser convertida, tal como /dev/sda1.

  1. Backup! Faça backup de todos os dados em quaisquer partições ext3 que serão convertidas para ext4. Um pacote útil, especialmente para partições raiz, é o Clonezilla.
  2. Edite /etc/fstab e altere o 'type' de ext3 para ext4 para quaisquer partições que serão convertidos para ext4.
  3. Inicialize uma mídia Live (se necessário). O processo de conversão com e2fsprogs deve ser feito quando a unidade não está montada. Se estiver convertendo uma partição raiz, a forma mais simples de alcançar isso é inicializar de alguma outra mídia Live.
  4. Certifique-se que a partição NÃO está montada.
  5. Se você quiser converter uma partição ext2, a primeira etapa de conversão é adicionar um journal executando tune2fs -j /dev/sdxX como root; fazendo dela uma partição ext3.
  6. Execute tune2fs -O extent,uninit_bg,dir_index /dev/sdxX como root. Esse comando converte o sistema de arquivos ext3 para ext4 (irreversivelmente).
  7. Execute fsck -f /dev/sdxX como root.
    • O usuário deve executar fsck no sistema de arquivos, ou ela se tornará ilegível! A execução de fsck é necessária para retornar o sistema de arquivos para um estado consistente. Ele vai encontrar erros de soma de verificação nos descritores de grupo - isso é esperado. A opção -f pede que o fsck verifique mesmo se o sistema de arquivos parecer limpo. A opção -p pode ser usada sobre a 'reparação automática' (do contrário, o usuário será solicitado inserir para cada erro).
  8. Recomendado: monte a partição e execute e4defrag -c -v /dev/sdxX como root.
    • Mesmo que o sistema de arquivos agora esteja convertido em ext4, todos os arquivos que foram escritos antes da conversão ainda não aproveitam a opção de extensão do ext4, que melhorará o desempenho de arquivos grandes e reduzirá a fragmentação e o tempo de verificação do sistema de arquivos. Para aproveitar plenamente o ext4, todos os arquivos teriam que ser reescritos no disco. Use e4defrag para cuidar desse problema.
  9. Reinicie o Arch Linux!

Usando criptografia baseada em arquivos

Nota: Ext4 proíbe criptografar o diretório raiz (/) e vai produzir um erro no kernel 4.13 e posterior [5] [6].

O ext4 oferece suporte a criptografia baseada em arquivos. Em uma árvore de diretórios marcada para criptografia, o conteúdo de arquivo, nomes de arquivos e alvos de links simbólicos são criptografados. As chaves de criptografia são armazenadas no chaveiro do kernel. Veja também a entrada do blog do Quarkslab com um registro do recurso, uma visão geral do estado de implementação e resultados de testes práticos com o kernel 4.1.

A criptografia depende da opção kernel CONFIG_EXT4_ENCRYPTION, que está habilitada por padrão, bem como o comando e4crypt do pacote e2fsprogs.

Uma condição prévia é que seu sistema de arquivos esteja usando um tamanho de bloco suportado para criptografia:

# tune2fs -l /dev/dispositivo | grep 'Block size'
Block size:               4096
# getconf PAGE_SIZE
4096

Se esses valores não forem os mesmos, o sistema de arquivos não suportará a criptografia, então não prossiga mais.

Atenção:
  • Uma vez que uma opção do recurso de criptografia está habilitado, os kernels anteriores a 4.1 não poderão montar o sistema de arquivos.
  • Se o diretório /boot/ estiver no sistema de arquivos ext4, verifique se o gerenciador de boot oferece suporte a criptografia ext4.

Em seguida, ative a opção do recurso de criptografia em seu sistema de arquivos:

# tune2fs -O encrypt /dev/dispositivo
Dica: A operação pode ser revertida com debugfs -w -R "feature -encrypt" /dev/dispositivo. Execute fsck antes e depois para garantir a integridade do sistema de arquivos.

Em seguida, faça um diretório para criptografar:

# mkdir /encrypted

Observe que a criptografia só pode ser aplicada a um diretório vazio. Novos arquivos e subdiretórios dentro de um diretório criptografado herdam sua política de criptografia. Criptografar arquivos já existentes ainda não é suportado.

Agora, gere e adicione uma nova chave ao seu chaveiro. Este passo deve ser repetido toda vez que você descarrega o seu chaveiro (ou seja, reinicie):

# e4crypt add_key
Enter passphrase (echo disabled): 
Added key with descriptor [f88747555a6115f5]
Atenção: Se você esqueceu sua senha, não haverá maneira de descriptografar seus arquivos. Também não é possível alterar uma senha depois de ter sido configurada.
Nota: Para ajudar a evitar ataques de dicionário em sua senha, um sal aleatório é gerado automaticamente e armazenado no superbloco de sistema de arquivos ext4. Tanto a senha quanto o sal são usados para derivar a chave de criptografia real. Como consequência disso, se você tiver vários sistemas de arquivos ext4 com criptografia habilitada montado, então e4crypt add_key adicionará várias chaves, uma por sistema de arquivos. Embora qualquer chave possa ser usada em qualquer sistema de arquivos, seria sábio usar apenas, em um determinado sistema de arquivos, chaves usando o sal do sistema de arquivos. Caso contrário, você corre o risco de não conseguir descriptografar arquivos no sistema de arquivos A se o sistema de arquivos B estiver desmontado. Alternativamente, você pode usar a opção -S para e4crypt add_key para especificar um sal você mesmo.

Agora, você sabe o descritor para sua chave. Certifique-se que sua chave está no seu chaveiro de sessão:

# keyctl show
Session Keyring
1021618178 --alswrv   1000  1000  keyring: _ses
 176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5

Quase pronto. Agora, defina uma política de criptografia no diretório (atribua a chave para ela):

# e4crypt set_policy f88747555a6115f5 /encrypted

Isso completa a configuração de criptografia para um diretório chamado /encrypted. Se você tentar acessar o diretório sem adicionar a chave no seu chaveiro, os nomes de arquivos e seus conteúdos serão vistos como jargão criptografado.

Atenção:
  • Alguns aplicativos não podem abrir arquivos em diretórios criptografados usando esse método. Tente mover o arquivo para fora do diretório criptografado antes de presumir que está quebrado. Nesse caso, muitas vezes você verá uma mensagem sobre uma chave ausente.
  • Fazer logon desbloqueia automaticamente os diretórios domésticos criptografados por este método ao usar o login GDM ou console.
Nota: Por motivos de segurança, arquivos não criptografados não podem existir em um diretório criptografado. Como tal, tentar mover (mv) arquivos não criptografados para um diretório criptografado vai
  • falhar, se ambos os diretórios estiverem no mesmo ponto de montagem do sistema de arquivos. Isso acontece porque mv só atualizará o índice de diretórios para apontar para o novo diretório, mas não os nós-i de dados do arquivo (que contém a referência criptográfica).
  • ter sucesso, se ambos os diretórios estiverem em diferentes pontos de montagem do sistema de arquivos (novos nós-i de dados são criados).

Em ambos os casos, é melhor copiar os arquivos (cp), porque isso deixa a opção para excluir com segurança o original não criptografado com shred ou uma ferramenta similar.

Melhorando performance

E4rat

E4rat é um aplicativo de pré-carregamento projetada para o sistema de arquivos ext4. Ele monitora os arquivos abertos durante a inicialização, otimiza seu posicionamento na partição para melhorar o tempo de acesso e os pré-carrega no começo do processo de inicialização. "E4rat" não oferece melhorias com SSDs, cujo tempo de acesso é insignificante em comparação com discos rígidos.

Desabilitando atualização de tempo de acesso

O sistema de arquivos ext4 registra informações sobre quando um arquivo foi acessado pela última vez e há um custo associado ao registro dele. Com a opção noatime, os timestamps de acesso no sistema de arquivos não são atualizados.

/etc/fstab
/dev/sda5    /    ext4    defaults,noatime    0    1

Aumentando o intervalo de commit

O intervalo de sincronização para dados e metadados pode ser aumentado, proporcionando um maior atraso de tempo para a opção commit.

O 5 segundos padrão significa que, se a energia for perdida, será perdido tanto quanto os últimos 5 segundos de trabalho.

Isso força uma sincronia completa de todos os dados/diários para mídia física a cada 5 segundos. O sistema de arquivos não será danificado, graças ao registro no journaling. O seguinte fstab ilustra o uso de commit:

/etc/fstab
/dev/sda5    /    ext4   defaults,noatime,commit=60    0    1

Desligando barreiras

Atenção: Desabilitar as barreiras para discos sem cache com respaldo de bateria não é recomendado e pode levar à corrupção severa do sistema de arquivos e perda de dados.

Ext4 permite barreiras de gravação por padrão. Isso garante que os metadados do sistema de arquivos sejam corretamente escritos e ordenados no disco, mesmo quando os caches de gravação perdem energia. Isso ocorre com um custo de desempenho especialmente para aplicativos que usam fsync intensamente ou criam e excluem muitos pequenos arquivos. Para discos que tenham um cache de gravação com respaldo de bateria de uma forma ou de outra, desabilitar as barreiras pode melhorar o desempenho com segurança.

Para desligar as barreiras, adicione a opção barrier=0 ao sistema de arquivos desejado. Por exemplo:

/etc/fstab
/dev/sda5    /    ext4    noatime,barrier=0   0    1

Desabilitando journaling

Atenção: Usar um sistema de arquivos sem o journal pode resultar em perda de dados em caso de desmontagem repentina, como falha de energia ou bloqueio do kernel.

Desabilitar o journal do ext4 pode ser feito com o seguinte comando em um disco desmontado:

# tune2fs -O "^has_journal" /dev/sdXN

Habilitando somas de verificação de metadados

Se o seu CPU tem suporte a SSE 4.2, verifique se o módulo do kernel crc32c_intel está carregado para habilitar o algoritmo CRC32C acelerado por hardware [7]. Caso contrário, você precisará carregar o módulo crc32c_generic.

Para ler mais sobre metadados de somas de verificação, veja o wiki do ext4.

Nota:
  • Em ambos os casos, o sistema de arquivos não deve ser montado.
  • Há suporte a somas de verificação de metadados no e2fsprogs 1.43 e posterior.
  • Use dump2fs para verificar se os recursos foram habilitados com sucesso:
# dumpe2fs -h /dev/caminho/para/disco

Novo sistema de arquivos

Para habilitar o suporte a somas de verificação de metadados ext4 ao criar um novo sistema de arquivos.

# mkfs.ext4 -O metadata_csum /dev/caminho/para/disco

Converter sistema de arquivos existentes

Primeiro, a partição precisa ser verificada e otimizada usando e2fsck:

# e2fsck -Df /dev/caminho/para/disco

Converta o sistema de arquivos para 64bit:

# resize2fs -b /dev/caminho/para/disco

Finalmente, habilite suporte a somas de verificação:

# tune2fs -O metadata_csum /dev/caminho/para/disco

Veja também