O arquivo está misteriosamente vazio. Opções para recuperar?

8

Eu tenho visto várias postagens sobre a recuperação de arquivos excluídos, mas essa situação é diferente. Minha esposa tinha um arquivo chamado Journal.odt no qual ela mantinha muitas informações pessoais importantes, como memórias especiais sobre nossos filhos. No outro dia, quando ela tentou abri-lo no OpenOffice, reclamou do formato. Eu tive seu hit cancelar e recuar. Quando eu cat o arquivo está completamente vazio. ls diz que o arquivo tem 0 bytes.

Se ela acidentalmente tivesse selecionado todo o texto do arquivo, batido no backspace e salvo, ainda haveria as informações meta do OpenOffice no arquivo.

Eu imediatamente fechei o laptop para evitar fazer mais alterações no disco até que eu possa pensar em algo para fazer.

Eu fiz algumas coisas complicadas no passado, como usar dd para recuperar texto bruto do disco, mas não tenho ideia do que fazer aqui. Como arquivos odt não são texto plano, não posso simplesmente canalizar todo o disco pelo grep.

Qualquer sugestão seria muito apreciada.

Além disso, se alguém tiver alguma ideia do que poderia ter corrido mal, adoraria ouvi-lo.

Obrigado

    
por jcbwlkr 24.07.2012 / 15:03

3 respostas

2

Experimente testdisk e photorec , mas a maneira como entendo sua escrita é provavelmente a maneira mais difícil de aprender o valor de backups regulares. Além disso, você pode querer inicializar a partir do CD para evitar que o disco rígido seja alterado ainda mais. Eu pessoalmente gosto do Disco de Recuperação do Sistema para isso, mas é amplamente baseado em linha de comando.

    
por 24.07.2012 / 22:11
2

Se você estiver usando o sistema de arquivos ext3, tente seguir o Manual de Carlo Wood

Em poucas palavras,

  • Use ext3grep $ IMAGE --ls --inode 2 | grep your_file para encontrar o arquivo você está procurando (onde $ IMAGE é a partição ur, por exemplo / dev / sda2)
  • Localize o bloco do sistema de arquivos que contém o diário de espaço não alocado.
  • Localizar todos os descritores de diário referenciando o bloco que foram encontrados anteriormente.
  • Copie o bloco com dd.
  • Edite o arquivo para excluir os zeros à direita.
  • gata o arquivo onde você quiser

Da fonte:

"O capítulo Exemplo de recuperação manual

No exemplo a seguir, recuperaremos manualmente um pequeno arquivo. Somente a saída parcial é dada para economizar espaço e tornar o exemplo mais legível.

Usando ext3grep $ IMAGE --ls --inode, encontramos o nome do arquivo que queremos recuperar:

$ ext3grep $IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Thu Feb 7 03:41:43 2008 drwxr-xr-x carlo

$ ext3grep $IMAGE --ls --inode 195457 | grep ' bin$' | head -n 1 34 35 d 309540 D 1202352104 Thu Feb 7 03:41:44 2008 drwxr-xr-x bin

$ ext3grep $IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Thu Feb 7 03:24:53 2008 rrwxr-xr-x start_azureus

Obviamente, o inode 309631 é apagado e não temos números de bloco para este arquivo:

$ ext3grep $IMAGE --print --inode 309631 [...] Inode is Unallocated Group: 19 Generation Id: 2771183319 uid / gid: 1000 / 1000 mode: rrwxr-xr-x size: 0 num of links: 0 sectors: 0 (--> 0 indirect blocks).

Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Deletion time: 1202351093 = Thu Feb 7 03:24:53 2008

Direct Blocks:

Portanto, tentaremos procurar uma cópia mais antiga no diário. Primeiro, encontramos o bloco do sistema de arquivos que contém este inode:

$ ext3grep $ IMAGE --inode-to-block 309631 | grep reside O Inodes 309631 reside no bloco 622598 no deslocamento 0xf00.

Em seguida, encontramos todos os descritores de diário referenciando o bloco 622598:

$ ext3grep $IMAGE --journal --block 622598 [...] Journal descriptors referencing block 622598: 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 4381707 1465 4381709 2132 4381755 2945 4381961 4606 4382098 6073 4382137 6672 4382138 7536 4382139 7984 4382140 8931

Isso significa que a transação com o número de seqüência 4381294 possui uma cópia do bloco 622598 no bloco 26582 e assim por diante. O maior número de seqüência, na parte inferior, deve ser o último dado escrito no disco e, assim, o bloco 8931 deve ser o mesmo que o atual bloco 622598. Para encontrar a última cópia não excluída, deve-se começar na parte inferior e trabalhar para cima.

Se você tentar imprimir tal bloco, o ext3grep reconhece que é um bloco de uma tabela de inode e imprimirá o conteúdo de todos os 32 inodes nele. Nós só desejamos ver o inode 309631; então usamos um smart grep:

$ ext3grep $IMAGE --print --block 8931 | grep -A15 'Inode 309631' --------------Inode 309631----------------------- Generation Id: 2771183319 uid / gid: 1000 / 1000 mode: rrwxr-xr-x size: 0 num of links: 0 sectors: 0 (--> 0 indirect blocks).

Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Deletion time: 1202351093 = Thu Feb 7 03:24:53 2008

Blocos diretos:

Isto é, de fato, o mesmo que vimos no bloco 622598. Em seguida, examinamos números de sequência menores até encontrarmos um com 0 de tempo de Exclusão. O primeiro que encontramos (de baixo para cima) é o bloco 6073:

$ ext3grep $IMAGE --print --block 6073 | grep -A15 'Inode 309631' --------------Inode 309631----------------------- Generation Id: 2771183319 uid / gid: 1000 / 1000 mode: rrwxr-xr-x size: 40 num of links: 1 sectors: 8 (--> 0 indirect blocks).

Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Deletion time: 0

Direct Blocks: 645627

O acima é automatizado e pode ser feito muito mais rápido com a opção de linha de comando --show-journal-inodes. Esta opção encontrará o bloco ao qual o inode pertence, depois localizará todas as cópias daquele bloco no diário e, em seguida, imprimirá apenas o inode solicitado de cada um desses blocos (cada um contendo 32 inodes, como você sabe), eliminando duplicatas :

$ ext3grep $IMAGE --show-journal-inodes 309631 Number of groups: 75 Minimum / maximum journal block: 1115 / 35026 Loading journal descriptors... done Journal transaction 4381435 wraps around, some data blocks might have been lost of this transaction. Number of descriptors in journal: 30258; min / max sequence numbers: 4379495 / 4382264 Copies of inode 309631 found in the journal:

--------------Inode 309631----------------------- Generation Id: 2771183319 uid / gid: 1000 / 1000 mode: rrwxr-xr-x size: 0 num of links: 0 sectors: 0 (--> 0 indirect blocks).

Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Deletion time: 1202351093 = Thu Feb 7 03:24:53 2008

Direct Blocks:

--------------Inode 309631----------------------- Generation Id: 2771183319 uid / gid: 1000 / 1000 mode: rrwxr-xr-x size: 40 num of links: 1 sectors: 8 (--> 0 indirect blocks).

Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Deletion time: 0

Direct Blocks: 645627

O arquivo é realmente pequeno: apenas um bloco. Copiamos este bloco com dd como mostrado antes:

$ dd if=$IMAGE bs=4096 count=1 skip=645627 of=block.645627 1+0 records in 1+0 records out 4096 bytes (4.1 kB) copied, 0.0166104 seconds, 247 kB/s

e edite o arquivo para deletar os zeros à direita, ou copie os primeiros 40 bytes (o tamanho dado do arquivo):

$ dd if=block.645627 bs=1 count=40 of=start_azureus 40+0 records in 40+0 records out 40 bytes (40 B) copied, 0.000105397 seconds, 380 kB/s

$ cat start_azureus cd /usr/src/azureus/azureus ./azureus &

Recuperado! "

    
por 24.07.2012 / 15:19
1

Use o Caine como uma distribuição linux especial para análise forense digital. São muitas ferramentas para recuperação de arquivos e discos rígidos.

    
por 24.07.2012 / 16:51