Eu estou usando o VMware Workstation 15 Pro para executar uma VM contendo alguns bastante atual resgate-Linux para resgatar dados de algum USB-HDD quebrado usando o ddrescue. Isso começa a funcionar bem para alguns GB de dados, então o ddrescue fica mais lento por causa dos danos ao disco, em última análise, pula alguns blocos e, dependendo de onde ler, começa a ler com maior taxa de transferência novamente. Esse comportamento é o esperado no final. O problema é que, em algum momento, a VMware parece simplesmente parar de gravar dados resgatados:

Enquanto o ddrescue afirma resgatar muitos GBs de dados, o dispositivo alvo em algum momento não é mais aumentado por esses dados. Em vez disso, o último registro de data e hora escrito pode ter alguns dias ou mesmo ser aumentado durante as reinicializações da VM, só aumenta uma vez e nunca mais. Não faz nenhuma diferença se eu reiniciar o ddrescue apenas ou a VM inteira ou até mesmo todo o meu sistema, nenhum dado parece ser adicionado ao disco de destino mais. Além disso, não há exatamente um e sempre o mesmo ponto em que isso acontece, mas já aconteceu depois de ~ 150 GB de dados resgatados, ~ 500, ~ 385 etc. É claro que não vejo nenhum erro concreto de gravação ou algo assim em VMwares logs ou aqueles do próprio host. O dispositivo de destino é esparso, então eu pensei que os dados resgatados poderiam ser todos 0s, mas esse não é o caso também, eu verifiquei usando xxd e a posição de entrada do ddrescue. Isso não foi todos os 0s, ddrescued afirmou resgatar dados e nada foi escrito para o alvo. Isso não explicaria o tamanho diferente do dispositivo de destino quando o problema ocorreu no passado também.

Minha configuração é um pouco especial:

O host é o Windows 10 e o USB-HDD quebrado contém NTFS, que não pode mais ser lido por diferentes versões do Windows. É por isso que estou tentando um Linux-VM e ddrescue, porque a montagem no Linux como NTFS também falha. Como o USB-HDD quebrado é um pouco grande, criei a VM de resgate em outro HDD USB maior. Essas VMs contêm um VMDK para / e outro VMDK para receber os dados do USB-HDD quebrado. E como disse, que está funcionando em geral, a VM é executada e começa a resgatar dados, mas para de escrevê-la em algum momento.

A parte interessante é que o USB-HDD quebrado ainda é lido, o que pode ser visto no LED piscando e na saída do ddrescue, e o alvo USB contendo a VM ainda é usado também, e. para guardar o mapa de ddrescue. Como esse é outro VMDK, posso ver alterações nesse arquivo de mapeamento, o timestamp para esse VMDK e seu tamanho aumenta com o tempo, etc. Assim, o VMDK está funcionando. Além disso, tenho a sensação de que, se o ddrescue resgatar dados, o LED piscante do VM-USB-HDD piscará muito, muito para o arquivo de mapeamento do ddrescue, como se GBs de dados fossem gravados. Mas eles simplesmente nunca alcançam o alvo VMDK por algum motivo. Eu até usei o Process Monitor for Windows para ver se o VMDK de destino é gravado e realmente não depois que o problema ocorreu. Só é lido às vezes um pouco, mas não GB de dados também.

Estou anexando algumas capturas de tela que documentam duas execuções de ddrescue: A primeira é onde parei ontem à noite, após o qual a VMDK de destino não foi mais gravada por horas. Seu tamanho é ~ 385 GB de dados, enquanto o ddrescue afirma ter resgatado ~ 580 GB. A segunda é a partir de hoje, onde o ddrescue afirmou ter resgatado mais de 15 GB de dados, mas o tamanho do VMDK alvo ainda é o mesmo de antes. O terceiro mostra a posição de entrada da segunda captura de tela, que não é todos os 0s, portanto, pelo menos alguns bytes de dados deveriam ter sido gravados no VMDK de destino.

Você tem alguma ideia de como algo assim pode acontecer? Ou como eu posso depurar isso ainda mais, para onde olhar? Alguns logs especiais ou modo de depuração ou o que quer?

Obrigado!

Screenshot 1 Screenshot 2 Screenshot 3

Arquivo de log 1 Arquivo de log 2

Thorsten Schöning
fonte