XFS (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de XFS. Data da última tradução: 2021-08-27. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

XFS é um sistema de arquivos de alto desempenho com journal criado pela Silicon Graphics, Inc. XFS é particularmente proficiente em paralelizar E/S devido ao seu modelo baseado em alocação de grupo. Isto permite escalabilidade extrema de processamento de E/S, largura de banda do sistema de arquivos, arquivo e tamanho do sistema de arquivos quando abrange múltiplos dispositivos de armazenamento.

Preparação

Para utilitários em espaço de usuário, instale o pacote xfsprogs. Ele contém as ferramentas necessárias para gerenciar um sistema de arquivos XFS.

Criação

Para criar um novo sistema de arquivos em dispositivo, use:

# mkfs.xfs dispositivo

No geral, as opções padrões são otimizadas para uso comum. [1] (conteúdo em inglês) [2][link inativo 2024-03-03 ⓘ] (conteúdo em inglês).

Amostra de saída:

meta-data=/dev/device            isize=256    agcount=4, agsize=3277258 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=13109032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Dica: Pode-se opcionalmente atribuir um rótulo ao sistema de arquivos usando a opção -L rótulo.
Dica: Ao usar mkfs.xfs em um dispositivo de bloco que já contenha um sistema de arquivos, use a opção -f para sobrescrever aquele sistema de arquivos. [3] (conteúdo em inglês). Esta opção destruirá todos os dados contidos no sistema de arquivos anterior.
Nota: Depois que um sistema de arquivos XFS é criado, seu tamanho não pode ser reduzido. No entanto, ainda pode ser aumentado usando o comando xfs_growfs [4] (conteúdo em inglês). Veja #Redimensionamento.

Soma de verificação

xfsprogs 3.2.0 introduziu um novo formato em disco (v5) que inclui um esquema de soma de verificação de metadados chamado Metadados auto-descritivos[link inativo 2024-03-03 ⓘ] (conteúdo em inglês). Baseado no CRC32, fornece por exemplo, proteção adicional contra corrupção de metadados durante perda de energia inesperada. Soma de verificação é habilitada por padrão ao usar xfsprogs 3.2.3 ou posterior. Se você precisa de um XFS montável com leitura e escrita em um kernel mais antigo, é possível facilmente desabilitar usando a opção -m crc=0 ao chamar mkfs.xfs(8):

# mkfs.xfs -m crc=0 /dev/partição_alvo
Nota: Desabilitar os CRCs de metadados também terá o efeito de desabilitar o suporte para as opções #Árvore b de inodes livres, #Árvore b inversa de mapeamento e #Carimbos de data/hora grandes abaixo, assim como "árvores b para contagem de referência" (veja mkfs.xfs(8) § OPTIONS para detalhes).

O formato v5 de XFS em disco é considerado estável para cargas de produção á partir do Kernel Linux 3.15.

Nota: Ao contrário do BTRFS e ZFS, a soma de validação do CRC32 apenas se aplica aos metadados, e não aos dados.

Árvore b de inodes livres

Começando na versão do Linux 3.16, XFS adicionou uma árvore b que rastreia inodes livres. É equivalente à alocação de inodes existente na árvore b, com a exceção que a árvore b de inodes livres rastreia pedaços com pelo menos um inode livre. O propósito é melhorar consultas por grupos de inodes que contenha um inode livre para ser alocado. Isto melhora o desempenho em sistemas de arquivos mais XFS usados a mais tempo, ex: usado por meses ou anos, quando você já adicionou/removeu milhões de arquivos no/do sistema de arquivos. Usar esta opção não impacta no geral no nível de confiabilidade ou capacidade de recuperação do sistema.

Este recurso depende do novo formato em disco v5 que foi considerado estável para cargas de trabalho de produção a partir do Linux Kernel 3.15. Ele não muda as estruturas em disco, mas adiciona uma nova que deve permanecer consistente com a árvore b de alocação de inodes; por esta razão, os kernels mais antigos só serão capazes de montar sistemas de arquivos como somente-leitura com o recurso da árvore b de inodes livres.

A opção é habilitada por padrão ao usar xfsprogs 3.2.3 ou posterior. Se você precisa de um sistema de arquivo com capacidade de escrita em um kernel mais antigo, é possível desabilitar com a opção finobt=0 ao formatar uma partição com XFS. Você também precisará usar crc=0 junto:

# mkfs.xfs -m crc=0,finobt=0 /dev/partição_alvo

Ou de uma maneira mais curta (pois finobt depende de crc).

# mkfs.xfs -m crc=0 /dev/partição_alvo

Árvore b inversa de mapeamento

A árvore b inversa de mapeamento é, em seu núcleo, um índice secundário de use de espaço de armazenamento que efetivamente fornece uma cópia redundante dos metadados de uso de espaço. Isto adiciona uma sobrecarga em operações no sistema de arquivos, mas esta inclusão em um sistema de arquivos faz com que referências cruzadas sejam bem rápidas. É um recurso essencial para consertar sistemas de arquivo durante o uso pois é possível reconstruir metadados primários danificados a partir da cópia secundária. [5] (conteúdo em inglês).

O recurso passou do status EXPERIMENTAL no Linux 4.16 e está pronto para produção. No entanto, verificação e conserto do sistema de arquivo durante o uso é (até o momento) o único caso de uso para este recurso, então a pessoa poderá optar por usar pelo menos até que a verificação durante o uso esteja pronta para uso em produção.

Do mkfs.xfs(8) § OPTIONS:

A árvore b inversa de mapeamento mapeia blocos do sistema de arquivo para o dono do bloco do sistema de arquivos. A maioria dos mapeamentos será para um número de inode e um deslocamento, embora também haja mapeamentos para metadados do sistema de arquivos. Este metadado secundário pode ser usado para validar o metadado primário ou para localizar exatamente qual dado foi perdido quando um erro no disco ocorrer.

Veja também [6] (conteúdo em inglês) e [7] (conteúdo em inglês) para mais informação.

Para testar esta opção ou testar o futuro do sistema de arquivos, passe a opção -m rmapbt=1 durante a criação do sistema de arquivos.

# mkfs.xfs -m rmapbt=1 dispositivo

Carimbos de data/hora grandes

Começando na versão do Linux 5.10, XFS suporta com seu refatoramento, funções de carimbo de data/hora e codificação de inode para lidar com carimbos de data e hora como um contador de nanossegundos de 64 bits e deslocamento de bits para aumentar o tamanho efetivo. Isto agora permite ao XFS rodar muito além do Problema do Ano 2038 (armazenar o tempo desde 1970 em segundos não mais caberia em um inteiro positivo de 32 bits e então, começaria a contagem novamente) até o Ano 2486. Criar um novo sistema de arquivos XFS com bigtime habilitado permite carimbos de data e hora que vão de Dezembro de 1901 até Julho de 2486, em vez de Dezembro de 1901 até Janeiro de 2038. Para preservar a compatibilidade com versões anteriores, o recurso não está habilitado por padrão [8] (conteúdo em inglês).

O recurso também permitirá expirações de cronômetro de cota de Janeiro de 1970 a Julho de 2486, em vez de Janeiro de 1970 a Fevereiro de 2106.

Para testar esta opção ou testar o futuro do sistema de arquivos, passe a opção -m bigtime=1 durante a criação do sistema de arquivos.

# mkfs.xfs -m bigtime=1 dispositivo

A partir da versão 5.11 do XFS, isto também pode ser desabilitado em sistema de arquivos existentes (não montados) com:

# xfs_admin -O bigtime=1 dispositivo

Desempenho

Da página de perguntas frequentes do XFS[link inativo 2024-03-03 ⓘ] (conteúdo em inglês):

Os valores padrões já usados são otimizados para melhor desempenho em primeiro lugar. mkfs.xfs detectará a diferença entre as configurações de disco único e RAID MD/DM e mudará os valores padrão que usa para configurar o sistema de arquivos apropriadamente.

Na maioria dos casos, a única coisa que você precisa considerar para mkfs.xfs é especificar a unidade e largura da faixa para dispositivos em RAID. (veja #Tamanho e largura de faixa (stripe)).

Dica: Quando usando o sistema de arquivos XFS em dispositivos RAID, melhorias de desempenho podem ser obtidas usando largeio, swalloc, tamanho maior de logbsize e allocsize, etc. Os seguintes artigos podem fornecer detalhes adicionais sobre estas opções:

Para opções de montagem, a única coisa que irá mudar o desempenho de metadados consideravelmente são as opções de montagem logbsize e delaylog. Aumentar logbsize reduz o número de E/S do journal para uma determinada carga, e delaylog reduzirá ainda mais. A troca para este aumento no desempenho de metadados é que mais operações podem estar incompletas depois de uma recuperação se o sistema travar enquanto fazendo modificações ativamente.

Dica: Veja xfs(5) para detalhes de todas as opções de montagem.

A partir do kernel 3.2.12, o agendador de E/S padrão, CFQ, derrotará grande parte da paralelização no XFS.

Nota: Arch é configurado para não usar o agendador de E/S quando um SSD SATA ou NVMe é detectado; é possível confirmar isto lendo o conteúdo de /sys/block/nvme*n*/queue/scheduler.

Portanto, para desempenho otimizado, na maioria dos casos você pode seguir o que está em #Criação.

Tamanho e largura de faixa (stripe)

Se o sistema de arquivos for usado em um RAID com faixas, você pode ganhar melhorias de velocidade significativas especificando o tamanho da faixa no comando mkfs.xfs(8).

As vezes, o XFS pode detectar a geometria do RAID por software, mas caso você mude a forma ou utilize RAID por hardware, veja Como calcular os valores sunit e swidth para melhor desempenho[link inativo 2024-03-03 ⓘ] (conteúdo em inglês).

Tempo de acesso

Em alguns sistemas de arquivo, você pode aumentar o desempenho adicionando a opção de montagem noatime no arquivo /etc/fstab. Para sistemas de arquivo XFS o comportamento padrão de atime é relatime, que quase não possui sobrecarga comparado com noatime mas ainda mantém valores de atime sãos. Todos os sistemas de arquivos do Linux usam isto como padrão agora (desde aproximadamente 2.6.30), mas o XFS usou comportamento similar ao relatime desde 2006, então ninguém deve precisar usar noatime no XFS por questões de desempenho. [9][link inativo 2024-03-03 ⓘ] (conteúdo em inglês).

Veja opções atime para mais detalhes neste tópico.

Descarte

Mesmo com o XFS suportando descarte assíncrono [10] (conteúdo em inglês) desde o kernel 4.7 [11] (conteúdo em inglês) [12] (conteúdo em inglês), o xfs(5) ainda recomenda que você use a aplicação fstrim para descartar blocos não utilizados em vez da opção de montagem discard pois o impacto no desempenho desta opção é bem severo.

Veja Solid state drive#Periodic TRIM.

Desfragmentação

Apesar da natureza baseada em extensões do XFS e a estratégia de alocação utilizada significativamente melhorarem a resistência do sistema de arquivo contra problemas de fragmentação, XFS fornece um utilitário para desfragmentação do sistema de arquivos (xfs_fsr, abreviação de XFS FileSystem Reorganizer - reorganizador de sistema de arquivos do XFS) que pode desfragmentar os arquivos em um sistema de arquivos montado e ativo. Pode ser útil ver a fragmentação do XFS periodicamente.

xfs_fsr(8) melhora a organização de sistemas de arquivos montados. O algoritmo de reorganização opera em um arquivo por vez, compactando ou de alguma outra maneira melhorando o leiaute de extensões (blocos de dados de arquivos contíguos) de arquivos.

Inspecionar níveis de fragmentação

Para ver quanta fragmentação seu sistema de arquivos atualmente tem:

# xfs_db -c frag -r /dev/partição

Rodar a desfragmentação

Para iniciar a desfragmentação, use o comando xfs_fsr(8):

# xfs_fsr /dev/partição

Deduplicação

O recurso reflink, disponível desde a versão do kernel 4.9 e habilitada por padrão desde a versão do mkfs.xfs 5.1.0, permite criar cópias rápidas com reflink, assim como a deduplicação após o fato, da mesma forma que o BTRFS:

Cópias com reflink

Cópias com reflink inicialmente não utilizam espaço adicional:

$ cp --reflink arquivo-grande-1 arquivo-grande-2

Até que um dos arquivos seja editado, então uma cópia-durante-escrita ocorre. Isto pode ser muito útil para criar um snapshot de arquivos (grandes).

Deduplicação

Sistemas de arquivos podem ser deduplicados usando ferramentas como duperemove.

Journal externo do XFS

Usando um log externo (journal de metadados) em por exemplo um SSD pode ser útil para melhorar o desempenho [13] (conteúdo em inglês). Veja mkfs.xfs(8) para mais detalhes no parâmetro logdev.

Atenção: Usar a memória flash pode desgastar o dispositivo. Veja Reduzir leituras/escritas no disco para detalhes sobre desgaste de SSDs.

Para reservar um journal externo com um tamanho específico quando você cria um sistema de arquivos XFS, especifique as opções -l logdev=dispositivo,size=tamanho no comando mkfs.xfs. Se você omitir o parâmetro size, um journal é usado baseado no tamanho do sistema de arquivos. Para montar o sistema de arquivos XFS para que use o journal externo, especifique a opção logdev=dispositivo no comando mount.

Intervalo de sincronização

XFS possui uma variável dedicada de sysctl para definir o "Intervalo de writeback e tamanho do buffer". Arch possui o valor padrão de 3000, é possível definir valores maiores, mas esteja ciente que valores muito altos podem resultar em perda de dados em alguns casos:

/etc/sysctl.d/20-xfs-sync-interval.conf
fs.xfs.xfssyncd_centisecs = 10000

Administração

Redimensionamento

Nota: Atualmente, não é possível[link inativo 2024-03-03 ⓘ] (conteúdo em inglês) encolher um XFS.

XFS pode ser redimensionado durante o uso, depois que a partição foi alterada. Apenas rode xfs_growfs com o ponto de montagem como primeiro parâmetro para crescer o sistema de arquivos para o máximo tamanho possível.

# xfs_growfs /caminho/pro/ponto/de/montagem

Verificação online de metadados (varredura)

Atenção: Este programa é experimental, significando que seu comportamento e interface podem mudar a qualquer hora. Veja xfs_scrub(8).

xfs_scrub pede ao kernel para varrer todos os objetos de metadados do sistema de arquivos XFS. Os logs de metadados são verificados busca de valores obviamente inválidos e, em seguida, fazem referência cruzada com outros metadados. O objetivo é estabelecer uma confiança razoável sobre a consistência do sistema de arquivos em geral examinando a consistência de logs individuais de metadados em relação a outros metadados no sistema de arquivos. Metadados danificados podem ser reconstruídos à partir de outros metadados se existirem estruturas de dados redundantes intactas.

Habilite/Inicie xfs_scrub_all.timer para periodicamente verificar metadados para todos os sistemas de arquivos XFS durante o uso.

Nota: Pode-se editar xfs_scrub_all.timer: o timer executa a cada Domingo, às 03:10 da manhã e será ativado imediatamente se sua janela de inicialização não tiver ocorrido, como por exemplo, devido ao sistema estar desligado.

Conserto

Nota: Ao contrário de outros sistemas de arquivo Linux, xfs_repair não executa durante a inicialização, mesmo quando um sistema de arquivos XFS não foi montado de maneira limpa. No evento de uma desmontagem não limpa, xfs_repair simplesmente reproduz o log durante a montagem, garantindo um sistema de arquivos consistente [14] (conteúdo em inglês).

De Verificando e consertando um sistema de arquivos XFS (conteúdo em inglês):

Se você não pode montar um sistema de arquivos XFS, você pode usar o comando xfs_repair -n para verificar sua consistência. Geralmente, você apenas precisa rodar este comando no arquivo de dispositivo de um sistema de arquivos que você acredita que tem um problema. O comando xfs_repair -n mostra a saída para indicar mudanças que seriam feitas no sistema de arquivos caso fosse necessária realizar uma operação de conserto completa, mas não iria modificar o sistema de arquivos diretamente.

Se você pode montar o sistema de arquivos e você não possui um backup adequado, você pode usar xfsdump para tentar fazer backup dos dados do sistema de arquivos existentes, No entanto, o comando pode falhar se os metadados do sistema de arquivos estiverem muito corrompidos.

Você pode usar o comando xfs_repair para tentar consertar um sistema de arquivos XFS especificando seu arquivo de dispositivo. O comando reproduz o log do journal para consertar quaisquer inconsistências que podem ter resultado do sistema de arquivos não ter sido desmontado de maneira limpa. A não ser que o sistema de arquivos tenha uma inconsistência geralmente não é necessário usar o comando, pois o journal é reproduzido cada vez que você monta o sistema de arquivos.

Primeiro desmonte o sistema de arquivos, então, execute a ferramente xfs_repair(8):

# xfs_repair dispositivo

Se o log no journal foi corrompido, você pode reiniciar o log especificando a opção -L no xfs_repair.

Atenção: O utilitário xfs_repair não pode consertar um sistema de arquivos XFS com um log sujo. Para limpar o log, monte e desmonte o sistema de arquivos XFS. Se o log estiver corrompido e não puder ser reproduzido, use a opção -L ("forçar zeramento do log") para limpar o log, ou seja, xfs_repair -L /dev/dispositivo. Esteja ciente que isto pode resultar em ainda maiores corrupção e perda de dados. [15] (conteúdo em inglês).
Atenção: Reiniciar o log pode deixar o sistema de arquivos em um estado inconsistente, resultando em perda de dados e corrupção de dados. A não ser que você tenha experiência em depuração e conserto de sistemas de arquivos XFS usando o xfs_db, é recomendado, em vez disso, recriar o sistema de arquivos e restaurar seu conteúdo a partir de um backup. [16] (conteúdo em inglês).

Se você não puder montar o sistema de arquivos ou não tiver um backup adequado, executar xfs_repair é a única opção viável, a menos que você tenha experiência no uso de xfs_db.

xfs_db fornece um conjunto de comandos interno que permite depurar e consertar um sistema de arquivos XFS manualmente. Os comandos permitem que você execute varreduras no sistema de arquivos e navegue e exiba suas estruturas de dados. Se você especificar a opção -x para habilitar o modo especialista, você pode modificar as estruturas de dados.


# xfs_db [-x] dispositivo

Para mais informações, veja xfs_db(8), xfs_repair(8), e o comando help do xfs_db.

Veja também Quais fatores influenciam o uso de memória do xfs_repair?[link inativo 2024-03-03 ⓘ] (conteúdo em inglês) e Conserto de XFS[link inativo 2024-03-03 ⓘ] (conteúdo em inglês).

Solução de problemas

Cota no sistema de arquivos raiz

As opções de montagem de cota XFS (uquota, gquota, prjquota, etc.) falham durante a remontagem do sistema de arquivos. Para habilitar a cota para o sistema de arquivos raiz, a opção de montagem deve ser passada ao initramfs como um parâmetro do kernel rootflags=. Subsequentemente, ele não deve ser listado entre as opções de montagem em /etc/fstab para o sistema de arquivos raiz /.

Nota: Existem algumas diferenças de cota XFS em comparação com o Linux padrão Disk quota, o artigo https://inai.de/linux/adm_quota (conteúdo em inglês) pode valer a pena ler.

xfs_scrub_all falha se o usuário "nobody" não pode acessar o ponto de montagem

Ao executar xfs_scrub_all, será lançado xfs_scrub@.service para cada sistema de arquivos XFS montado. O serviço roda com o usuário nobody, então, se nobody não puder navegar até o diretório, haverá uma falha com o erro:

xfs_scrub@ponto de montagem.service: Changing to the requested working directory failed: Permission denied
xfs_scrub@ponto de montagem.service: Failed at step CHDIR spawning /usr/bin/xfs_scrub: Permission denied
xfs_scrub@ponto de montagem.service: Main process exited, code=exited, status=200/CHDIR

Para permitir que o serviço ocorra, mude as permissões do ponto de montagem para que o usuário nobody tenha permissões de execução.

Veja também