Expandir a excelente resposta de Mark Haferkamp, btrfs scrub
ler todos os dados em vez de todos os arquivos é uma propriedade crítica e é realmente o que a torna tão útil. Lembre-se, o btrfs tem suporte RAID embutido. Digamos que você tenha um sistema de arquivos btrfs que abrange duas unidades que você configurou para usar o RAID1. Nesse caso, quando você grava em um arquivo, essa gravação é replicada nos dois discos. (Fica mais complicado com um exemplo mais complexo, mas, neste caso simples, é sempre o que acontece.) No entanto, quando você lê esse arquivo, a leitura atinge apenas um disco (porque é um desperdício ler o arquivo duas vezes a menos que a primeira cópia seja inutilizável por algum motivo).
Agora diga que sua segunda unidade btrfs está se degradando e começando a corromper dados no seu sistema de arquivos. Quando você lê blocos deste disco, o btrfs notará que a soma de verificação não corresponde e restaurará o bloco dentro da banda a partir de uma cópia em bom estado - a cópia na primeira unidade. Ele retornará os dados para o aplicativo que está chamando read()
(ou o que for) como se nada tivesse acontecido.
Mas e se o btrfs não decidir ler no segundo disco? Lembre-se, há duas cópias, para que ele possa ler do primeiro ou do segundo disco. Se ler do primeiro disco, não notará nada de errado. A única vez que notará que algo está errado é quando o primeiro disco também é degradado. Agora você está realmente pronto, já que é tarde demais para recuperar os dados - a cópia do segundo disco foi corrompida por um tempo e a primeira cópia (que é o que você usaria para restaurar o segundo disco) também está corrompida!
É aqui que btrfs scrub
entra. Ele lê todos os dados , nem todos os arquivos. Isso inclui metadados, mas também cópias secundárias de arquivos que normalmente não estariam no caminho de leitura. Quando ele lê essas cópias secundárias, isso cria uma oportunidade para a correção de erros em banda do btrfs ativar e restaurar os dados de uma cópia redundante.