Estou usando instantâneos do mapeador de dispositivos.
Vamos supor que esse /dev/sda
seja o dispositivo de origem somente leitura e /dev/sdb
seja o dispositivo COW. Criei um instantâneo persistente desta forma:
# cat /dev/zero > /dev/sdb
# dmsetup create mysnap
0 1000000000 snapshot /dev/sda /dev/sdb P 16
^D
# ls /dev/mapper/
control mysnap
#
Funcionou bem por um tempo.
Após cada inicialização, para anexar novamente meu instantâneo persistente, eu estava executando o mesmo comando:
dmsetup create mysnap
0 1000000000 snapshot /dev/sda /dev/sdb P 16
Mas um dia desconectei acidentalmente o dispositivo de origem somente leitura durante a operação (o dispositivo COW ainda estava lá). Havia uma mensagem do kernel como essa:
device-mapper: snapshots: Invalidating snapshot: error reading/writing
Depois que isso aconteceu, qualquer tentativa de anexar o instantâneo (em qualquer máquina) resulta em erro:
device-mapper: snapshots: Snapshot is marked invalid
O mysnap
dispositivo é criado, mas recusa qualquer leitura/gravação com "Erro de entrada/saída".
É possível limpar o status “inválido” no instantâneo do DM e ativá-lo, ou pelo menos recuperar os dados?
Acredito que esse status "inválido" seja totalmente artificial porque, pela minha experiência, os instantâneos DM persistentes sobreviveram a falhas totais do sistema.
O código-fonte
drivers/md/dm-snap-persistent.c
diz que não há como recuperar um snapshot inválido:Então, quais opções você tem?
Mas só funcionará se todos os metadados (e os próprios dados) estiverem totalmente presentes e intactos.
No caso mais simples, o sinalizador válido apenas muda de 1 para 0 no cabeçalho do disco.
Exemplo de um instantâneo válido:
Exemplo de um instantâneo inválido:
Então você pode tentar cegamente torná-lo válido:
No entanto, isso ignora todas as outras circunstâncias. Em um snapshot inválido, a consistência dos dados não é mais garantida. Como tal, os dados apresentados ainda podem ser inválidos. Além disso, como o instantâneo pode ser gravado, isso também pode causar danos adicionais aos dados do instantâneo.
Em uma situação de recuperação de dados, você pode fazer uma cópia completa primeiro ou…tentar esta experiência em um instantâneo… haha.
Boa sorte?