Se você estiver usando o sistema de arquivos ext3, tente seguir o HOWTO de Carlo Wood
Em poucas palavras,
- Use ext3grep $ IMAGE --ls --inode 2 | grep your_file para encontrar o arquivo que você está procurando (onde $ IMAGE é sua partição, por exemplo / dev / sda2)
- Localize o bloco do sistema de arquivos que contém o diário de espaço não alocado.
- Encontre todos os descritores de periódicos referenciando o bloco que foram encontrados anteriormente.
- Copie o bloco com dd.
- Edite o arquivo para excluir os zeros à direita.
- cat o arquivo onde quer que você queira
Da fonte:
"O capítulo Exemplo de recuperação manual
No exemplo a seguir, recuperaremos manualmente um arquivo pequeno. Somente saída parcial é fornecida 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 - nó 2 | grep carlo 3 end d 195457 D 1202352103 qui Fev 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 qui fev 7 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 qui fev 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 [...] O inode não está alocado Grupo: 19 Id da geração: 2771183319 uid / gid: 1000/1000 modo: rrwxr-xr-x tamanho: 0 número de links: 0 setores: 0 (-> 0 blocos indiretos).
Tempos de Inode: Acessados: 1202350961 = Qui 7 de fevereiro 03:22:41 2008 Arquivo Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Inode Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Tempo de exclusão: 1202351093 = Qui 7 de fevereiro 03:24:53 2008
Blocos diretos:
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-para-bloquear 309631 | grep reside O inode 309631 reside no bloco 622598 no deslocamento 0xf00.
Em seguida, encontramos todos os descritores de diário que referenciam o bloco 622598:
$ ext3grep $ IMAGE --journal --block 622598 [...] Descritores de periódicos que referenciam o bloco 622598: 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 43813 43813 43813 43813 43813 43813 438 13 43 43 9 13 43 43 43 43 42 43 42 43 42 43 42 44 44 44 44 44 44 44 54 44 54 44 54 44 9 9 9 9 9 9 9 9 9 9 9 8 9 8 8 8 8 7 8 7 8 9 9 9 8 9 8 8 8 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 8 8 8 8 7 8 7 8 7 8 7 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 4 4 4 4 4 5 4 4 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ... 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Isso significa que a transação com o número de sequência 4381294 possui uma cópia do bloco 622598 no bloco 26582 e assim por diante. O maior número de sequência, na parte inferior, deve ser o último dado gravado no disco e, portanto, o bloco 8931 deve ser o mesmo do bloco atual 622598. Para encontrar a última cópia não excluída, é necessário iniciar na parte inferior e trabalhar para cima.
Se você tentar imprimir um bloco desse tipo, o ext3grep reconhecerá que é um bloco de uma tabela de inodes e imprimirá o conteúdo de todos os 32 inodes nela. No entanto, apenas desejamos ver o inode 309631; então usamos um grep inteligente:
$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID da geração: 2771183319 uid / gid: modo 1000/1000: rrwxr-xr-x tamanho: 0 num de links: 0 setores: 0 (-> 0 blocos indiretos).
Tempos de Inode: Acessados: 1202350961 = Qui 7 de fevereiro 03:22:41 2008 Arquivo Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Inode Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Tempo de exclusão: 1202351093 = Qui 7 de fevereiro 03:24:53 2008
Blocos diretos:
É realmente o mesmo que vimos no bloco 622598. A seguir, examinamos números de sequência menores até encontrarmos um com um tempo de exclusão 0. O primeiro que encontramos (de baixo para cima) é o bloco 6073:
$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID da geração: 2771183319 uid / gid: modo 1000/1000: rrwxr-xr-x tamanho: 40 num de links: 1 setores: 8 (-> 0 blocos indiretos).
Tempos de inode: acessados: 1202350961 = qui 7 de fev 03:22:41 2008 arquivo modificado: 1189688692 = qui 13 de setembro 15:04:52 2007 modificado inode: 1189688692 = qui 13 de setembro 15:04:52 2007 Tempo de exclusão: 0
Blocos diretos: 645627
O exposto acima é automatizado e pode ser feito muito mais rápido com a opção de linha de comando --show-journal-inodes. Essa opção localiza o bloco ao qual o inode pertence, localiza todas as cópias desse bloco no diário e, subsequentemente, imprime apenas o inode solicitado de cada um desses blocos (cada um deles contém 32 inodes, como você sabe), eliminando duplicatas :
$ ext3grep $ IMAGE --show-journal-inodes 309631 Número de grupos: 75 Bloco de diário mínimo / máximo: 1115/35026 Carregando descritores de diário ... done Transação de diário 4381435, alguns blocos de dados podem ter sido perdidos nessa transação. Número de descritores no periódico: 30258; números de sequência min / max: 4379495/4382264 Cópias do inode 309631 encontradas no diário:
-------------- Inode 309631 ----------------------- ID da geração: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x tamanho: 0 num de links: 0 setores: 0 (-> 0 blocos indiretos).
Tempos de Inode: Acessados: 1202350961 = Qui 7 de fevereiro 03:22:41 2008 Arquivo Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Inode Modificado: 1202351093 = Qui 7 de fevereiro 03:24:53 2008 Tempo de exclusão: 1202351093 = Qui 7 de fevereiro 03:24:53 2008
Blocos diretos:
-------------- Inode 309631 ----------------------- ID da geração: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x size: 40 num de links: 1 setores: 8 (-> 0 blocos indiretos).
Tempos de inode: acessados: 1202350961 = qui 7 de fev 03:22:41 2008 arquivo modificado: 1189688692 = qui 13 de setembro 15:04:52 2007 modificado inode: 1189688692 = qui 13 de setembro 15:04:52 2007 Tempo de exclusão: 0
Blocos diretos: 645627
O arquivo é realmente pequeno: apenas um bloco. Copiamos esse bloco com dd, como mostrado anteriormente:
$ dd if = $ IMAGE bs = 4096 contagem = 1 pular = 645627 de = bloco.645627 1 + 0 registros em 1 + 0 registra 4096 bytes (4,1 kB) copiados, 0,0166104 segundos, 247 kB / s
e edite o arquivo para excluir os zeros à direita ou copie os primeiros 40 bytes (o tamanho especificado do arquivo):
$ dd if = block.645627 bs = 1 contagem = 40 de = start_azureus 40 + 0 registros em 40 + 0 registros fora 40 bytes (40 B) copiados, 0,000105397 segundos, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus e
Recuperado!"