Em um sistema de arquivos Btrfs de vários dispositivos ou RAID Btrfs, dependendo da configuração do sistema de arquivos, pode haver várias cópias dos blocos de dados / metadados armazenados em diferentes locais dos dispositivos de armazenamento adicionados ao sistema de arquivos Btrfs. Quando a ferramenta de limpeza Btrfs encontra um bloco de dados / metadados corrompido, ela procura em todos os dispositivos de armazenamento adicionados ao sistema de arquivos Btrfs por cópias duplicadas desse bloco de dados / metadados. Uma vez que uma cópia duplicada desse bloco de dados / metadados é encontrada, o bloco de dados / metadados corrompido é sobrescrito com o bloco de dados / metadados correto. É assim que a ferramenta de limpeza Btrfs repara blocos de dados / metadados corrompidos em um sistema de arquivos Btrfs de vários dispositivos ou RAID Btrfs.
Neste artigo, vou mostrar como usar a ferramenta de limpeza Btrfs para localizar e reparar blocos de dados / metadados corrompidos em um sistema de arquivos Btrfs de vários dispositivos ou RAID Btrfs. Então vamos começar.
Abreviações
ATAQUE - Matriz redundante de discos baratos / independentes
GB - Gigabyte
Pré-requisitos
Para seguir este artigo, você precisa ter um sistema de arquivos Btrfs para vários dispositivos ou um RAID Btrfs.
Eu criei um RAID Btrfs em RAID-1 configuração (montada no /dados diretório) usando 4 dispositivos de armazenamento sdb, sdc, sdd, e sde, como você pode ver na imagem abaixo. Usarei este RAID Btrfs para a demonstração de scrub do Btrfs neste artigo.
Uso / dados do sistema de arquivos $ sudo btrfs
Se você precisar de ajuda para instalar o sistema de arquivos Btrfs no Ubuntu, consulte meu artigo Instalar e usar o Btrfs no Ubuntu 20.04 LTS.
Se você precisar de ajuda para instalar o sistema de arquivos Btrfs no Fedora, verifique meu artigo Instalar e usar Btrfs no Fedora 33.
Se você precisar de ajuda na criação de um RAID Btrfs, verifique meu artigo Como configurar RAID Btrfs.
Gerando arquivos fictícios no sistema de arquivos Btrfs
Para mostrar como a ferramenta de limpeza Btrfs funciona, precisamos gerar alguns arquivos aleatórios para preencher o sistema de arquivos Btrfs. Vamos criar um script de shell que faz exatamente isso.
Crie um novo script de shell genfiles.sh no / usr / local / bin / diretório da seguinte forma:
$ sudo nano / usr / local / bin / genfiles.sh
Digite as seguintes linhas de códigos no genfiles.sh script de shell.
#!/ bin / bashenquanto verdadeiro
Faz
FILENAME = $ (uuidgen)
echo "[Criando] $ FILENAME"
dd if = / dev / random of = $ FILENAME bs = 1M contagem = 256 status = progresso
echo "[Criado] $ FILENAME"
feito
Assim que terminar, pressione
O genfiles.sh script de shell executa um infinito enquanto ciclo.
enquanto verdadeiroFaz
# outros códigos
feito
A linha a seguir gera um UUID usando o uuidgen comando e armazena o UUID no NOME DO ARQUIVO variável.
A linha a seguir imprime uma mensagem no console antes do arquivo NOME DO ARQUIVO é gerado.
A linha a seguir gera um novo arquivo aleatório NOME DO ARQUIVO usando o dd comando. O arquivo será 256 MB no tamanho.
A linha a seguir imprime uma mensagem no console após o arquivo NOME DO ARQUIVO é gerado.
Adicione permissão de execução ao genfiles.sh script de shell da seguinte maneira:
s
O genfiles.sh o script de shell agora deve estar acessível como qualquer outro comando.
$ which genfiles.sh
Vamos gerar alguns arquivos aleatórios no RAID Btrfs montado no /dados diretório.
Navegue até o /dados diretório onde o Btrfs RAID é montado da seguinte maneira:
$ cd / data
Como você pode ver, não há arquivos disponíveis no meu RAID Btrfs no momento.
$ ls -lh
Para gerar alguns arquivos aleatórios no diretório de trabalho atual (/dados neste caso), execute o genfiles.sh script de shell da seguinte maneira:
$ sudo genfiles.sh
O genfiles.sh o script de shell deve começar a gerar arquivos aleatórios no /dados diretório.
O genfiles.sh script está gerando arquivos aleatórios. Deixe o script ser executado por alguns minutos, de modo que ele preencha cerca de 2-3 GB de espaço em disco do RAID Btrfs.
Quando você quiser parar o genfiles.sh script de shell, pressione
Como você pode ver, alguns arquivos aleatórios são gerados no Btrfs RAID.
$ ls -lh
Eu gerei cerca de 13 GB de arquivos aleatórios no RAID Btrfs montado no /dados diretório, como você pode ver na imagem abaixo.
$ sudo du -sh / data
Trabalhando com a ferramenta Btrfs Scrub
Nesta seção, vou mostrar como usar a ferramenta scrub Btrfs. Vamos começar.
Você pode iniciar o processo de depuração no sistema de arquivos Btrfs montado no /dados diretório com o seguinte comando:
$ sudo btrfs scrub start / data
Um processo de limpeza Btrfs deve ser iniciado no sistema de arquivos Btrfs montado no /dados diretório.
Você pode ver o status do processo de limpeza do Btrfs em execução no sistema de arquivos Btrfs montado no /dados diretório da seguinte forma:
$ sudo btrfs scrub status / data
Como você pode ver, o processo de limpeza do Btrfs ainda está corrida.
Limpar um sistema de arquivos Btrfs ou RAID Btrfs que tem muitos arquivos levará muito tempo para ser concluído.
Assim que o processo de limpeza do Btrfs for concluído, o status deve ser alterado para finalizado, como você pode ver na imagem abaixo.
$ sudo btrfs scrub status / data
Você também pode ver o status de limpeza do Btrfs para cada um dos dispositivos de armazenamento adicionados ao sistema de arquivos Btrfs (montado no /dados diretório) separadamente da seguinte forma:
$ sudo btrfs scrub status -d / data
Eu disse a você que o processo de limpeza do Btrfs leva muito tempo para ser concluído em um grande sistema de arquivos Btrfs. Uma grande vantagem da ferramenta de limpeza Btrfs é que seu processo pode ser pausado e retomado a qualquer momento.
Vamos ver como pausar e retomar um processo de limpeza do Btrfs.
Primeiro, inicie um novo processo de limpeza Btrfs no sistema de arquivos Btrfs montado no diretório / data da seguinte maneira:
$ sudo btrfs scrub start / data
Para cancelar ou pausar o processo de limpeza do Btrfs que está em execução no sistema de arquivos Btrfs montado no /dados diretório, execute o seguinte comando:
$ sudo btrfs scrub cancel / data
O processo de limpeza do Btrfs em execução deve ser cancelado ou pausado.
Como você pode ver, o status de limpeza do Btrfs é abortado. Portanto, o processo de limpeza do Btrfs não está mais em execução.
$ sudo btrfs scrub status / data
Para retomar o processo de limpeza do Btrfs que você cancelou ou pausou, execute o seguinte comando:
$ sudo btrfs scrub currículo / dados
O processo de limpeza do Btrfs deve ser retomado.
Como você pode ver, o status de limpeza do Btrfs é agora corrida. Portanto, o processo de limpeza do Btrfs é retomado.
$ sudo btrfs scrub status / data
Após a conclusão do processo de limpeza do Btrfs, o status de limpeza do Btrfs deve ser alterado para finalizado.
$ sudo btrfs scrub status / data
Conclusão
Neste artigo, mostrei como trabalhar com a ferramenta scrub Btrfs para encontrar e corrigir blocos de dados / metadados corrompidos de um sistema de arquivos multi-dispositivo Btrfs ou RAID. Eu mostrei como cancelar / pausar e retomar um processo de limpeza do Btrfs assim que ele for iniciado.