Perguntas sobre corrupção de dados e snapshots do BTRFS?

0

Estou curioso sobre o que acontece quando temos um arquivo incorrigível corrompido em um sistema de arquivos com snapshots - como o BTRFS - e tentamos substituir o arquivo do backup? Eu suspeito que os instantâneos ainda conterão a versão corrompida do arquivo. Existe uma maneira de corrigir esses erros em instantâneos também?

Outra questão relacionada, o que acontece se o instantâneo em si estiver danificado? Vamos perdê-lo?

    
por inf3rno 29.10.2017 / 23:07

2 respostas

2

Os instantâneos ainda conterão versões corrompidas, porque a ideia deles é que eles são Point-In-Time. No momento em questão, eles eram corruptos.

Depois de pesquisar sbnapshots do BTRFS , parece que você deve conseguir montar os instantâneos, fazer alterações nesse arquivo no instantâneo e isso vai funcionar.

Se é apenas o arquivo que está danificado, e você tem um backup, não deve ser um grande negócio. Se o sistema de arquivos estiver danificado, isso pode ser muito pior.

Com relação a "o que acontece se o snapshot em si estiver danificado" - isso deve ser improvável no BTRFS, mas espero que a lógica seja copiá-lo para outro dispositivo de bloco e tentar recuperar nesse dispositivo de bloco como se fosse eram os FS originais.

(Isenção de responsabilidade - Eu nunca usei o BTRFS. Eu sou um pouco mais que um novato quando se trata do ZFS, mas eu tenho uma boa compreensão dos conceitos)

    
por 30.10.2017 / 04:41
0

Eu uso o BTRFS. Eu posso confirmar e elaborar um pouco do que esta resposta diz; e eu posso adicionar algo mais.

Você pode montar qualquer instantâneo. Você pode modificá-lo a menos que tenha sido criado com a opção 'somente leitura'. O instantâneo é apenas um subvolume, ele não "lembra" de qual outro subvolume foi criado. Um subvolume de origem e seu instantâneo são inicialmente equivalentes. É melhor pensar em um instantâneo recém-criado como um "fork" em vez de um "snapshot", "copy", "estado congelado" literal ou qualquer outro nome que sugira seu status inferior em relação ao "original".

Quando você bifurca um subvolume (cria um snapshot) você pode pensar em um snapshot Point-in-Time se você escolher não modificar a "cópia" mais (seja explicitamente criando-o como subvolume somente leitura ou simplesmente fazendo nada, deixando-o sozinho), enquanto o "original" é possivelmente ainda em uso. Eu uso snapshots para fazer backup do meu sistema antes do 'apt-get upgrade', mas nunca me incomodo em criá-los como 'somente leitura'. Meu ponto é: seu status Point-In-Time não é por causa de alguns metadados no meu disco, mas por causa dos metadados na minha cabeça - eu apenas me abstenha de modificá-los.

Os instantâneos compartilham (inicialmente quase todos) blocos de dados com o subvolume "original". Se um conteúdo de um determinado bloco tornar um arquivo corrompido, o arquivo será corrompido em todos os snapshots que compartilharem o bloco. Sobrescrever (modificar) o arquivo em um dos subvolumes mapeia-o para bloco (s) contendo o novo conteúdo apenas no contexto deste subvolume; outros subvolumes permanecem como eram.

Se você tiver um arquivo corrompido compartilhado entre vários subvolumes e quiser substituí-lo pelo backup, você poderá:

  • (método comum) sobrescrever todo o arquivo (ou desvincular e criar novamente), isso irá remapear todas as suas partes para outros blocos;
  • (método incomum) aplica um patch binário ao arquivo, isso irá remapear algumas de suas partes para outros blocos (isso é possível se a corrupção estiver dentro do arquivo, não dentro do sistema de arquivos, por exemplo, PDF inválido mas de outra forma legível). / li>

Ao fazer isso independentemente em vários subvolumes causará o remapeamento independente, ele utilizará blocos não utilizados várias vezes, em vez de apenas uma vez.

Para evitar isso e fazer com que esses arquivos substituídos em vários subvolumes compartilhem todos os blocos, proceda da seguinte maneira:

  1. Se ainda não estiver montado, monte a raiz do sistema de arquivos BTRFS em algum lugar: mount -o subvol=/ … . Desta forma, todos os subvolumes possíveis estarão disponíveis sob um único ponto de montagem.
  2. Substitua o arquivo do backup em um único subvolume.
  3. Para todos os outros subvolumes onde o arquivo precisa ser substituído
    1. desvincular (remover) o arquivo,
    2. copie ( cp ) o arquivo já substituído de outro subvolume com --reflink=always option; é importante fazer isso em um único ponto de montagem.
  4. Você pode agora umount da raiz do sistema de arquivos BTRFS.
por 17.11.2017 / 08:42

Tags