Reparando um sistema XFS

Reparando um sistema XFS
Os sistemas de arquivos são construídos sobre os dispositivos de armazenamento. Existem controladores de invasão e controladores de disco, cada um executando seu próprio pequeno pedaço de firmware. Existem caches para melhorar o desempenho. Existem discos com tamanhos de setor diferentes e discos que relatariam um tamanho diferente do setor, dependendo de como você faz a pergunta.

Com tantas partes diferentes que constituem uma pilha de armazenamento típica, é um milagre que qualquer coisa funcione. No entanto, as coisas funcionam bem na maioria das vezes. As poucas vezes em que as coisas dão errado, precisamos de utilitários como XFS_Repair para nos tirar da bagunça.

As coisas podem dar errado quando você está escrevendo um arquivo e a energia sai ou há um pânico do kernel. Mesmo os dados inativos em um disco podem se deter. Em todos os casos, precisamos de um mecanismo para:

  1. Verificar os dados que estão sendo lidos são os mesmos dados que foram escritos pela última vez. Isso é implementado com uma soma de verificação para cada bloco de dados e comparando a soma de verificação para esse bloco quando os dados estão sendo lidos. Se a soma de verificação corresponder, os dados não foram alterados
  2. Uma maneira de reconstruir os dados corruptos ou perdidos, de um bloco de espelho ou de um bloco de paridade.

Configuração da Sandbox

Vamos configurar um teste de teste para executar uma rotina de reparo XFS em vez de usar discos reais com dados valiosos. Se você já tem um sistema de arquivos quebrado, pode pular esta seção e pular a cabeça direita para a próxima. Este Testbench é composto por uma VM Ubuntu à qual um disco virtual está conectado, fornecendo armazenamento bruto. Você pode usar o VirtualBox para criar a VM e depois criar um disco adicional para anexar à VM.

Basta ir para as configurações da sua VM e sob Configurações → Armazenamento Seção Você pode adicionar um novo disco ao controlador SATA, você pode criar um novo disco. Como mostrado abaixo, mas verifique se sua VM está desligada quando você faz isso.

Depois que o novo disco for criado, ligue a VM e abra o terminal. O comando LSBLK lista todos os dispositivos de bloco disponíveis.

$ lsblk
SDA 8: 0 0 60G 0 disco
├─sda1 8: 1 0 1m 0 parte
└─sda2 8: 2 0 60g 0 Parte /
sdb 8:16 0 100g 0 disco
SR0 11: 0 1 1024M 0 ROM

Além do dispositivo de bloco principal SDA, Onde o sistema operacional está instalado, agora há um novo dispositivo SDB. Vamos criar rapidamente uma partição e formatá -la com o sistema de arquivos XFS.

Abra o utilitário separado como usuário root:

$ separado -um ideal /dev /sdb

Vamos criar uma tabela de partição primeiro usando o mklabel, seguido por criação de uma única partição a partir de todo o disco (que tem 107 GB de tamanho). Você pode verificar se a partição é feita listando -a usando o comando print:

(Partido) Mklabel GPT
(Partido) MkPart Primary 0 107
(separado) impressão
(Partido) Saia

Ok, agora podemos ver usando o LSBLK que existe um novo dispositivo de bloco sob o dispositivo SDB, chamado SDB1.

Vamos formatar esse armazenamento como XFS e montá -lo no diretório /MNT. Novamente, faça as seguintes ações como raiz:

$ mkfs.xfs /dev /sdb1
$ mount /dev /sdb1 /mnt
$ df -h

O último comando imprimirá todos os sistemas de arquivos montados e você pode verificar se /dev /sdb1 está montado em /mnt.

Em seguida, escrevemos um monte de arquivos como dados fictícios para desfragamento aqui:

$ dd if =/dev/urandom de =/mnt/myfile.contagem txt = 1024 bs = 1024

O comando acima escreveria um arquivo myfile.TXT de tamanho de 1 MB. Se desejar, você pode gerar mais arquivos desses, espalhá -los por vários diretórios dentro do sistema de arquivos XFS (montado em /mnt) e depois verifique a fragmentação. Use Bash ou Python ou qualquer outro de sua linguagem de script favorita para isso.

Verificando e reparando erros

As corrupções de dados podem surgir silenciosamente em seus discos sem o seu conhecimento. Se um bloco de dados não for lido e a soma de verificação não comparada, o erro poderá aparecer na hora errada. Quando alguém está tentando acessar os dados, em tempo real. Em vez.

O utilitário xfs_scrub deve realizar esta tarefa para o seu. Inspirado em parte pelo comando Scrub do OpenZFS, esse recurso experimental está disponível apenas no XFSPROGS versão 4.15.1-1Buntu1, que não é uma versão estável. Se isso detectar erro erroneamente, pode enganá -lo para causar corrupção de dados em vez de consertá -lo! No entanto, se você deseja experimentar, poderá usá -lo em um sistema de arquivos montado usando o comando:

$ xfs_scrub /dev /sdb1

Antes de tentar reparar um sistema de arquivos corrupto, primeiro você teria que desmontá -lo. Isso é para impedir que os aplicativos de escreva inadvertidamente no sistema de arquivos quando ele deve ser deixado sozinho.

$ umount /dev /sdb1

Reparar erros é tão simples quanto em execução:

$ xfs_repair /dev /sdb1

Os metadados essenciais são sempre mantidos como várias cópias, mesmo que você não esteja usando RAID e se algo deu errado com o superblock ou inodes, esse comando pode corrigir esse problema para você com toda a probabilidade.

Próximos passos

Se você está vendo a corrupção de dados com frequência (ou mesmo uma vez, se você estiver executando algo missionário crítico), considere substituir seus discos, pois esse pode ser um indicador precoce de um disco que está prestes a morrer.

Se um controlador falhar ou um cartão RAID desistiu da vida, nenhum software no mundo pode reparar o sistema de arquivos para você. Você não quer contas caras de recuperação de dados e também não deseja termos de inatividade, então fique de olho nesses SSDs e pratos giratórios!