Recentemente, sofri um dano muito pequeno, mas muito importante, em um disco rígido em um host ESXi que afeta algumas VMs. Há um arquivo que eu gostaria muito de recuperar, e é claro que de alguma forma ele ficou de fora do meu backup regular. As cópias mais recentes têm 6 meses. Acontece que eu preciso disso ... opa.
Detalhes:
1) Eu usei o ddrescue (ferramenta AWESOME) dentro de um ISO inicializável do Parted Magic para recuperar 99,98% do drive da VM em questão. Infelizmente, os erros parecem ser quase inteiramente de gravações de arquivos RECENTES ... então, é claro, eles são exatamente os setores que eu preciso recuperar mais.
2) O drive gera erros de IO em leituras de setores defeituosos, mas ocasionalmente faz sucesso em ler um setor anteriormente ruim! Então, a recuperação ainda é possível. Um pouco mais do que isso terá algum tipo de mau funcionamento e gire a unidade para baixo e para trás. Ah, e cerca de 1/4 dessas voltas não voltam. (O ciclo de energia rígido é necessário, o desligamento não funciona) Por último, praticamente todas as leituras ruins do setor vêm com um som de clique audível.
3) O importante disco da VM é o formato NTFS.
4) Eu posso (geralmente) montar o volume NTFS danificado somente para leitura, e eu posso (um pouco menos frequentemente) navegar para a pasta que contém o arquivo que eu preciso. No entanto, o arquivo em questão parece sempre fornecer um erro de E / S quando faço um 'ls' da pasta. Os outros arquivos na pasta não fornecem um erro de E / S.
5) Eu tentei usar o ntfsinfo / etc ... que parece exatamente o que eu preciso ... mas ele não abre a partição. (Frustrante, uma vez que 'monte' geralmente vai)
6) O arquivo é um arquivo XLS da era do Excel 2003, portanto, não tenho certeza se posso criar strings para pesquisar a imagem bruta do disco. (Possivelmente partes da versão de 6 meses de idade?)
Eu realmente gostaria de usar algo como os recursos do debugfs. No entanto, a partir das páginas do manual, as ferramentas NTFS podem fazer o trabalho se elas puderem abrir a partição. Em particular, estou querendo saber se os erros de E / S podem estar puramente dentro dos metadados do arquivo e se o registro de diretório pode ser restaurado bem o suficiente para copiar o conteúdo do arquivo. Como último recurso, qualquer conteúdo de arquivo parcial que eu possa recuperar seria ótimo.
Eu escrevi (relativamente simples) módulos do kernel antes, então eu poderia compilar um módulo NTFS especial com mais informações de depuração ativadas (ou adicionadas). (O arquivo vale pelo menos alguns dias de ajustes para tentar recuperar ... mais eu estou aprendendo coisas legais no processo)
Algum apontador?
EDITAR:
Mais informações sobre erros da unidade:
O / var / log / messages está mostrando muitos erros de NTFS-fs, é claro ... mas eu finalmente me preocupei em traduzir a mensagem de código sem sentido que normalmente recebo: sense key 0x3, ASC = 0x11, ASCQ = 0x4 . (que parece traduzir para UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED).
Quando a unidade gira, vejo uma mensagem "scsi0: * BusLogic BT-958 Initialized". Não tenho certeza se é o driver SCSI do Linux, o driver ESXi ou a própria unidade que decide girar a unidade para baixo. Se fosse o driver do Linux, talvez eu pudesse modificar o driver para evitar desligar. Toda essa coisa de ddrescue é maciçamente mais dolorosa por causa dessas fendas de ciclo de força.
EDIT2:
usando a mensagem de log "end_request: Erro de E / S, dev sda, setor 7238859" logo depois de 'ls' o diretório que contém o arquivo em questão, direcionei minha operação ddrescue para esse setor. No momento, pretendo me arriscar e ESCREVER esse setor de volta ao disco ao vivo se isso for bem-sucedido. Talvez eu possa lentamente reconstruir meu caminho para o arquivo em questão dessa maneira. Ainda assim, os setores defeituosos mais recuperáveis são recuperados em menos de 20 tentativas ... esta é mais de 150 até agora ... * suspiro *
EDIT3:
O erro de setor de 'ls' no arquivo que eu preciso é totalmente não cooperativo (1000+ tentativas durante a noite e sem sorte). Eu espero que sejam apenas metadados quando você faz um 'ls'? :)
Eu tenho a maior parte de uma cópia do ddrescue, mas ela não é montada (ou montada sem arquivos). A unidade danificada é montada corretamente na maioria das vezes ... talvez os erros de E / S da força de tração danificada "montem" para voltar ao espelho que funciona?
** EDIT4: **
Eu desisti por enquanto, aguardando novas sugestões. Eu removi a unidade e reconstruí a caixa. Eu vou manter a unidade no caso de algo acontecer.