Como o btrfs scrub funciona e o que ele faz?

15

O que exatamente o scrub btrfs faz? De acordo com a página de manual, que é totalmente incerta, faz alguma verificação de erro. Que tipo de verificação de erros? Quão confiável é isso? Consegue recuperar alguns erros? Como funciona? Funciona em todos os discos btrfs?

    
por Petr 21.04.2015 / 19:42

2 respostas

21

Não sei se faz mais alguma coisa, mas sei que no mínimo btrfs scrub faz a depuração de dados em disco completo. Basicamente, ele lê todos os dados * no disco, recalcule sua soma de verificação e compara a soma de verificação recalculada com a soma armazenada. Quando as somas de verificação armazenadas e recalculadas não coincidem, o sistema sabe que há corrupção.

Quando a corrupção é detectada, o comportamento depende da configuração do disco. Por exemplo, se você tiver RAID 1 (espelhamento), então btrfs scrub poderá corrigir dados corrompidos copiando uma versão não corrompida de outro disco. Se todas as cópias de alguns dados estiverem corrompidas (por exemplo, danos em vários discos ou se não houver cópias redundantes em primeiro lugar), não haverá muito btrfs scrub além de avisar você.

A razão pela qual isso é importante é que os discos rígidos são apenas cerca de 99,99999999999% confiáveis na leitura e gravação de bits. Portanto, a cada poucos terabytes de E / S de dados, provavelmente haverá um erro. Embora erros possam ser e sejam detectados (e corrigidos, supondo que uma cópia redundante ainda seja válida) durante o acesso normal ao disco, a limpeza de rotina do disco completo é capaz de localizar e corrigir erros antes de acumular o suficiente para que todas as cópias dos mesmos dados sejam corrompidas. / p>

* Estou usando "data" em vez de "file" para incluir metadados também. O Btrfs armazena arquivos e metadados correspondentes (incluindo somas de verificação) em blocos de dados, todos os quais são verificados e verificados por btrfs scrub .

Veja também:

por 16.06.2015 / 08:27
4

Expandindo a excelente resposta de Mark Haferkamp, btrfs scrub lendo todos os dados em vez de todos os arquivos é uma propriedade crítica e é, na verdade, o que o torna tão útil. Lembre-se, o btrfs possui suporte a RAID integrado. Digamos que você tenha um sistema de arquivos btrfs abrangendo duas unidades que você configurou para usar o RAID1. Nesse caso, quando você escreve em um arquivo, essa gravação é replicada em ambos os discos. (Isso fica mais complicado com um exemplo mais complexo, mas para este 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 esteja inutilizável por algum motivo).

Agora diga que sua segunda unidade btrfs está degradando e começando a corromper os dados em seu sistema de arquivos. Quando você ler blocos desse 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 chamando read() (ou qualquer outra coisa) como se nada tivesse acontecido.

Mas e se o btrfs não decidir ler o segundo disco? Lembre-se, há duas cópias, para que ele possa ler o primeiro ou o segundo disco. Se ele ler o primeiro disco, ele não notará nada de errado. A única vez que notará que algo está errado é quando o primeiro disco também se degrada. Agora você está realmente ocupado porque é 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) está corrompida também!

É aqui que entra btrfs scrub . Ele lê todos os dados , não 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 lê essas cópias secundárias, isso cria uma oportunidade para que a correção de erros dentro da banda do btrfs seja acionada e restaure os dados de uma cópia redundante.

    
por 15.03.2017 / 00:00

Tags