Recuperando um arquivo sobrescrito

1

Eu acidentalmente usei incorretamente o comando cp e sobrei o conteúdo de um arquivo em um sistema de arquivos ext4. Existe alguma maneira que eu possa recuperar o conteúdo desse arquivo antigo e possivelmente seus metadados (ou seja, o último tempo de gravação, etc)?

Estou ciente de que mv libera blocos para movimentos, mas o mesmo se aplica a uma operação de cópia por atacado?

    
por Melab 28.05.2015 / 18:44

2 respostas

0

Como eu sei, é muito difícil recuperar um arquivo excluído, mas tente este

em 2005 eu uso essa ferramenta na partição ext3 e recupero muitos arquivos. Claro fazer um backup antes de usar isso e lembrar não é garantia de 100% para recuperar arquivos

    
por 28.05.2015 / 20:03
0

Exemplo de sessão em um sistema de arquivos ext4:

Crie dois arquivos a, b com o tamanho especificado:

# dd if=/dev/urandom of=a bs=1282 count=1
1+0 records in
1+0 records out
1282 bytes (1.3 kB) copied, 0.000647314 s, 2.0 MB/s
# dd if=/dev/urandom of=b bs=3247 count=1
1+0 records in
1+0 records out
3247 bytes (3.2 kB) copied, 0.00106112 s, 3.1 MB/s

Verifique onde está alocado fisicamente:

# filefrag -sve a
Filesystem type is: ef53
File size of a is 1282 (1 block of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:      32833..     32833:      1:             last,eof
a: 1 extent found

Copie b para a, "sobrescrevendo" a. (Saída encurtada.)

# strace cp b a
open("a", O_WRONLY|O_TRUNC)             = 4
write(4, "CX60x01pP601~,2\"120y7_S422\v\t"..., 3247) = 3247

Verifique onde está localizado fisicamente após cp:

# filefrag -sve a
Filesystem type is: ef53
File size of a is 3247 (1 block of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:      33280..     33280:      1:             last,eof
a: 1 extent found

Observe a localização alterada de 32833 para 33280 . O que significa que os dados originais provavelmente ainda estão em 32833 - neste exemplo.

O que aconteceu é que cp trunca o arquivo de saída assim, por um momento, é um arquivo de 0 bytes. Isso é quase o mesmo que excluí-lo, exceto que reutiliza o inode. Escrevendo para esse arquivo aloca de qualquer lugar no espaço livre, que pode estar em outro lugar como o arquivo antigo costumava ser.

Portanto, pode haver uma chance de recuperação se você souber alguma parte do conteúdo do arquivo para poder localizá-lo nos dados brutos. Isso é o que o photorec faz, mas apenas para tipos de arquivos conhecidos com cabeçalhos distintos. extundelete provavelmente não ajudará, pois o inode do arquivo não foi realmente excluído, apenas foi reutilizado para o novo arquivo.

    
por 29.05.2015 / 04:18