Tradutor - Select your language

terça-feira, 16 de maio de 2017

Restaurar arquivo ou diretório apagado em file system ext3

Restaurar arquivo ou diretório apagado em file system ext3

Por: Glauber GF em 30/11/2010 | Blog: http://www.vivaolinux.com.br/~mcnd2

O fato

Mais uma baseado em fato real.

Como tenho um HD de 320Gb com partições para "swap", "ext3-sistema", "ext4-sistema" e "ext3-backup", não estava com problema nenhum até o momento.

Quando então plugado outro HD de teste IDE, fui eu rigorosamente organizar este HD para os devidos fins. Quando até então dei um comando para apagar o diretório da partição que não era de valia para mim, sendo que quando os dois HDs plugados os devices dos HDs mudaram, onde o de 320Gb-SATA ficou como "sdb" e o de 40Gb-IDE ficou como "sda" e como realmente o comando "rm -rf" é DESASTROSO, apagando recursivamente sem perguntar se realmente você quer apagar, quando acabei de pressionar a tecla percebi que era a partição de "backup". Put* merd* o que eu fiz (isto em questão de milésimo de segundo), sem reação só fui fazer ao que veio na mente, desligar o sistema pelo menu, isto demorando alguns segundos até o sistema ser desligado.

Descrição das opções de utilização do comando "rm":
  -f, --force  ignorar ficheiros inexistentes, nunca perguntar
  -i           perguntar antes de cada remoção
  -I           perguntar uma vez antes de remover mais de 3 ficheiros
               ou ao remover recursivamente. Menos intrusivo que -i,
               protegendo ainda contra a maioria dos erros
  --interactive[=QUANDO]  perguntar de acordo com QUANDO: never, once (-I)
                          ou always (-i). Sem QUANDO, perguntar sempre
  --one-file-system  ao remover uma hierarquia recursivamente, saltar
                          pastas de um sistema de ficheiros diferente do
                          do argumento especificado na linha de comandos
  --no-preserve-root  não tratar "/" de forma especial
  --preserve-root   não remover "/" (predefinido)
  -r, -R, --recursive   remover pastas e seus conteúdos recursivamente
  -v, --verbose         explicar o que está a ser feito
  --help     exibir esta ajuda e sair
  --version  mostrar a informação de versão e sair

Por omissão, rm não remove pastas. Use a opção --recursive (-r ou -R) para remover cada pasta listada também, bem como os seus conteúdos.

Para remover um ficheiro cujo nome começa por "-", por exemplo "-foo", utilize um destes comandos:

rm -- -foo rm ./-foo

Note que se usar rm para remover um ficheiro, normalmente é possível recuperar os conteúdos desse ficheiro. Se quiser maior garantia que os conteúdos sejam realmente irrecuperáveis, considere a utilização de shred.

Uma observação que faço é que tenha cuidado e muita atenção no que está fazendo, pois no meu caso foi um descuido de não ter verificado antes como ficaram os devices dos HDs com o comando "fdisk -l". Para maior informação do comando "fdisk", consulte a documentação do comando com "man fdisk".

Depois de desligado o PC fui eu iniciar novamente para ver o que aconteceu. Poderia ter perdido (apagado) qualquer diretório da partição de "backup", menos o que realmente foi apagado, que foi o diretório "06-Usuários", com toda a documentação como currículos, contra-cheque, planilhas de obra, planilhas financeiras etc.

E agora, quem poderá me ajudar? (Uma referência ao Chapolin colorado, rsrsrs...).

Então fui eu a procura de como poderia restaurar o que tinha sido perdido. Descobri algumas opções de restaurar arquivos apagados do HD. São eles:

TestDisk

Um poderoso software gratuito de recuperação de dados! Foi inicialmente criado para recuperar partições perdidas e/ou tornar discos não inicializáveis em inicializáveis quando estes sintomas são causados por software com falhas, determinados tipos de vírus ou erro humano (tais como acidentalmente deletar a tabela de partições).

http://www.cgsecurity.org/wiki/TestDisk_PT

Foremost

Trata-se de uma ferramenta em modo texto, desenvolvida inicialmente pelas Forças Armadas dos Estados Unidos, que trabalha com recuperação de arquivos a partir de imagens de discos (criadas pelo dd).

http://foremost.sourceforge.net/

Ext3grep

Ferramenta para ajudar a recuperar arquivos excluídos em ext3. Ext3grep é uma ferramenta simples na intenção de auxiliar aqueles que acidentalmente excluiu um arquivo em um sistema de arquivos ext3.

http://code.google.com/p/ext3grep/

Fonte: Socorro! Diretório deletado... [RESOLVIDO]

Com o "testdisk" e o "foremost" é possível restaurar todos os arquivos, o único problema é que não terão os mesmos nomes, e sim por exemplo: file001.avi, file002.mpeg, file003.odt, file004.mp3 e assim por diante. Como seria muito trabalhoso renomear todos os arquivos depois da restauração, decidi usar o "ext3grep". 
 

A restauração

Antes da restauração é preciso desmontar a partição aonde se encontravam os arquivos a serem restaurados. Todos os comandos serão executados com o usuário root.

# umount /dev/sda4 /media/backup (exemplo)

Agora veremos as opções do comando "ext3grep".

# ext3grep -h
Running ext3grep version 0.8.0
ext3grep: invalid option -- h
No action specified; implying --superblock.

Usage: ext3grep [options] [--] device-file
Options:
  --version, -[vV]       Print version and exit successfully.
  --help,                Print this help and exit successfully.
  --superblock           Print contents of superblock in addition to the rest.
                         If no action is specified then this option is implied.
  --print                Print content of block or inode, if any.
  --ls                   Print directories with only one line per entry.
                         This option is often needed to turn on filtering.
  --accept filen         Accept "filen" as a legal filename. Can be used multi-
                         ple times. If you change any --accept you must remove
                         BOTH stage* files!
  --journal              Show content of journal.
  --show-path-inodes     Show the inode of each directory component in paths.
Filters:
  --group grp            Only process group "grp".
  --directory            Only process directory inodes.
  --after dtime          Only entries deleted on or after "dtime".
  --before dtime         Only entries deleted before "dtime".
  --deleted              Only show/process deleted entries.
  --allocated            Only show/process allocated inodes/blocks.
  --unallocated          Only show/process unallocated inodes/blocks.
  --reallocated          Do not suppress entries with reallocated inodes.
                         Inodes are considered "reallocated" if the entry
                         is deleted but the inode is allocated, but also when
                         the file type in the dir entry and the inode are
                         different.
  --zeroed-inodes        Do not suppress entries with zeroed inodes. Linked
                         entries are always shown, regardless of this option.
  --depth depth          Process directories recursively up till a depth
                         of "depth".
Actions:
  --inode-to-block ino   Print the block that contains inode "ino".
  --inode ino            Show info on inode "ino".
                         If --ls is used and the inode is a directory, then
                         the filters apply to the entries of the directory.
                         If you do not use --ls then --print is implied.
  --block blk            Show info on block "blk".
                         If --ls is used and the block is the first block
                         of a directory, then the filters apply to entries
                         of the directory.
                         If you do not use --ls then --print is implied.
  --histogram=[atime|ctime|mtime|dtime|group]
                         Generate a histogram based on the given specs.
                         Using atime, ctime or mtime will change the
                         meaning of --after and --before to those times.
  --journal-block jblk   Show info on journal block "jblk".
  --journal-transaction seq
                         Show info on transaction with sequence number "seq".
  --dump-names           Write the path of files to stdout.
                         This implies --ls but suppresses it's output.
  --search-start str     Find blocks that start with the fixed string "str".
  --search str           Find blocks that contain the fixed string "str".
  --search-inode blk     Find inodes that refer to block "blk".
  --search-zeroed-inodes Return allocated inode table entries that are zeroed.
  --inode-dirblock-table dir
                         Print a table for directory path "dir" of directory
                         block numbers found and the inodes used for each file.
  --show-journal-inodes ino
                         Show copies of inode "ino" still in the journal.
  --restore-inode ino[,ino,...]
                         Restore the file(s) with known inode number "ino".
                         The restored files are created in ./RESTORED_FILES/
                         with their inode number as extension (ie, inode.12345).
  --restore-file "path"  Will restore file "path". "path" is relative to root
                         of the partition and does not start with a "/" (it
                         must be one of the paths returned by --dump-names).
                         The restored directory, file or symbolic link is
                         created in the current directory as ./"path".
  --restore-all          As --restore-file but attempts to restore everything.
                         The use of --after is highly recommended because the
                         attempt to restore very old files will only result in
                         them being hard linked to a more recently deleted file
                         and as such polute the output.
  --show-hardlinks       Show all inodes that are shared by two or more files.

Procuraremos no device (/dev/sda4) onde se encontravam os arquivos com a opção "--search" no diretório "06-Usuários", que notamos que tinha sido apagado.

# ext3grep /dev/sdb4 --search 06-Usuários
Running ext3grep version 0.8.0
WARNING: I don't know what EXT3_FEATURE_COMPAT_EXT_ATTR is.
Number of groups: 1596
Minimum / maximum journal block: 26083842 / 26117157
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1287884824 = Sat Oct 23 23:47:04 2010
Journal transaction 468 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 27683; min / max sequence numbers: 257 / 6042
Blocks containing "06-Usuários": 4917248 (allocated) 26110317 (allocated) 26111049 (allocated) 26112321 (allocated) 26113419 (allocated) 26115667 (allocated)

Como depois de ter apagado acidentalmente os arquivos e não feito mais nada na partição em questão, procuraremos pelo último "bloco" alocado provavelmente tendo 100% de sucesso.

# ext3grep /dev/sdb4 --ls --block 26115667
Running ext3grep version 0.8.0
WARNING: I don't know what EXT3_FEATURE_COMPAT_EXT_ATTR is.
Number of groups: 1596
Minimum / maximum journal block: 26083842 / 26117157
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1287884824 = Sat Oct 23 23:47:04 2010
Journal transaction 468 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 27683; min / max sequence numbers: 257 / 6042
Group: 796

Block 26115667 is a directory. The block is a Journal block
          .-- File type in dir_entry (r=regular file, d=directory, l=symlink)
          |          .-- D: Deleted ; R: Reallocated
Indx Next |  Inode   | Deletion time                        Mode        File name
==========+==========+----------------data-from-inode------+-----------+=========
   0    1 d 1228801                                         drwxr-xr-x  .
   1    2 d       2                                         drwxr-xr-x  ..
   2    3 d 1228802                                         drwxrwxrwx  11-Filmes
   3    4 d 1228920                                         drwxrwxrwx  01-Biblioteca
   4    5 d 1229154                                         drwxrwxrwx  02-Currículos
   5    6 d 1229171                                         drwxrwxrwx  03-Fotos
   6    7 d 4047372                                         drwxrwxrwx  05-Músicas
   7    8 d 5251448  D 1289089604 Sat Nov  6 22:26:44 2010  drwxrwxrwx  06-Usuários
   8    9 d 5252816                                         drwxrwxrwx  10-Windows
   9   10 d 5424119  D 1289089624 Sat Nov  6 22:27:04 2010  drwxrwxrwx  12-Documentários
  10   11 d 5424151                                         drwxrwxrwx  04-Linux
  11  end d 5653482                                         drwxrwxrwx  07-Vídeos_comedias

WARNING: inode 1228801 was reallocated!

Podemos ver com o resultado do comando acima que o "D" foram os diretórios que foram apagados.

Agora que sabemos os "inodes" referentes a cada diretório apagado, poderemos fazer a devida recuperação com o comando "ext3grep /dev/sdb4 --restore-inode 5251448", mas como notei que alguns arquivos dos diretórios que não foram apagados tinham sido perdidos, fui eu para restauração de todos:

# ext3grep /dev/sda4 --restore-all

Agora é só esperar porque o processo de restauração demorará mais ou menos 2 horas (isto no meu caso).

Depois do processo demorado, tudo ocorreu bem. Agora é só ir na pasta chamada "RESTORED_FILES" no diretório atual onde foi executado o comando e organizar com suas necessidades.

Graças a minha persistência de 5 dias corridos direto tentando uma forma de restauração, tive até que comprar um HD com tamanho maior que a partição de "backup" para poder fazer a restauração de todos os arquivos. Mais isso foi um opção minha para não estragar toda a estrutura das partições no HD onde se encontrava o "backup".

Então é isso.

Até a próxima.
 

Nenhum comentário:

Postar um comentário