OK, então finalmente consertei isso!
Esta solução também deve funcionar para outros sistemas de arquivos se o GParted fizer a mesma 'cópia direta'. Obviamente, você precisará usar algo diferente de chkdsk
no final.
De qualquer forma, aqui está o procedimento para resolver o problema para o benefício de qualquer um que seja tão desafortunado / estúpido * quanto eu:
-
Antes de começar, relaxe - vá buscar um café ou uma caneca de chocolate quente!
Seus dados ainda estão no disco, você só precisa procurá-los. Passar tempo calmamente checando as coisas não vai prejudicá-lo. Correr e ser impulsivo pode.
-
Leia isto cuidadosamente e certifique-se de entender cada etapa. Se você decidir seguir estas instruções, provavelmente é uma boa ideia fazer um backup em um disco separado usando
dd
. É fácil cometer erros e um backup oferece uma rede de segurança. -
Certifique-se de anotar qualquer informação sobre a última coisa que o GParted estava fazendo. Você vai querer saber até onde a operação de cópia ficou (o mais preciso possível) e até onde ela foi copiada para trás.
-
Calcule o local exato onde a cópia foi concluída. Eu escrevi dois scripts Python para ajudar nisso, mas eles só foram testados no Ubuntu (definitivamente não funcionarão no Windows) e precisam ser modificados para o seu caso específico .
-
Primeiro, use isso para encontrar um único setor correspondente no disco: findDuplicateSector.py
-
Use isso para encontrar o último setor correspondente (ou seja, onde a operação foi interrompida): findCopyInterruptLocation.py
-
Leia o código e certifique-se de entendê-lo. Eu testei rapidamente, mas pode haver bugs. Todos os números fornecidos são offsets absolutos desde o início da partição / arquivo, ou seja, o offset 0 é o primeiro setor na partição e offset n é o setor n + 1 th .
-
-
Use
dd
ou algo semelhante para concluir a operação de cópia, tomando cuidado para não confundir os deslocamentos de entrada e saída. Aqui está a sintaxe paradd
:sudo dd bs=512 skip=<input_offset> if=<partition> seek=<output_offset> of=<partition> count=<num_sectors_to_copy>
Esta etapa levará um tempo longo (levou 8 horas). Se você quiser ver como está progredindo, execute isso em um terminal separado e
dd
lhe dará uma atualização sobre seu progresso em sua própria janela de terminal:sudo kill -s USR1 <PID_of_dd>
-
Verifique o seguinte e corrija se necessário:
-
As entradas da tabela de partições do Registro mestre de inicialização (MBR) devem corresponder ao que você disse ao GParted (consulte o artigo da wikipedia, é muito informativo). Especificamente, verifique o valor para o LBA do primeiro setor da partição e seu número total de setores.
-
O Registro de Inicialização da Partição da partição que você está modificando deve corresponder ao MBR (no meu caso, não). Para NTFS, o tamanho total da partição em setores deve estar no deslocamento 40 desde o início da partição. Eu não acho que o NTFS registra o que o deslocamento da partição em relação ao início do disco é.
-
-
Execute
chkdsk
no modo somente leitura , ou seja, sem argumentos de linha de comando diferentes do nome da unidade para verificar se ele pode localizar todos os arquivos na partição. Se não for possível verificar os índices do arquivo, NÃO continue . Não se preocupe se ele reclamar do arquivo $ Bitmap contendo erros. -
Se, e somente se a etapa 5 for bem-sucedida, execute
chkdsk /f
para corrigir, por exemplo, o arquivo $ Bitmap. Se você executar isso enquanto os índices de arquivos ainda estiverem errados, poderá acabar excluindo-os, tornando as coisas muito mais difíceis para você. -
Você pode querer executar
chkdsk
no modo somente leitura novamente para ter certeza de que funcionou, apenas para sua tranquilidade.
* Na verdade eu sou muito arrogante - não somos idiotas. Mas sério - faça backups!