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
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 sairPor 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
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/
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".
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