(M)  s i s t e m a   o p e r a c i o n a l   m a g n u x   l i n u x ~/ · documentação · suporte · sobre

  Página seguinte Página anterior Índice

607. Modificando inodes diretamente

Este método é, aparentemente, muito mais simples. No entanto como mencionado acima ele não pode suportar arquivos maiores que 12 blocos.

Para cada inode que se quiser recuperar, deve-se estabelecer a contagem de um e alterar o horário de eliminação para zero. Isto é realizado através do comando mi (modificar inode) do debugfs. Algumas amostras de saída, que modificam o inode 148003 acima:

<tscreen><verb>
debugfs:  mi <148003>
                          Mode    [0100644] 
                       User ID    [503] 
                      Group ID    [100] 
                          Size    [6065] 
                 Creation time    [833201524] 
             Modification time    [832708049] 
                   Access time    [826012887] 
                 Deletion time    [833201524] 0
                    Link count    [0] 1
                   Block count    [12] 
                    File flags    [0x0] 
                     Reserved1    [0] 
                      File acl    [0] 
                 Directory acl    [0] 
              Fragment address    [0] 
               Fragment number    [0] 
                 Fragment size    [0] 
               Direct Block #0    [594810] 
               Direct Block #1    [594811] 
               Direct Block #2    [594814] 
               Direct Block #3    [594815] 
               Direct Block #4    [594816] 
               Direct Block #5    [594817] 
               Direct Block #6    [0] 
               Direct Block #7    [0] 
               Direct Block #8    [0] 
               Direct Block #9    [0] 
              Direct Block #10    [0] 
              Direct Block #11    [0] 
                Indirect Block      [0] 
         Double Indirect Block    [0] 
         Triple Indirect Block    [0] 

Isto é, estabelecemos a data de eliminação para 0 e a ligação em 1, bastando pressionar Enter para cada um dos outros campos. Admito que isto é um pouco trabalhoso caso se tenha muitos arquivos para recuperar, mas me parece algo suportável. Se você queria brilho, você deveria ter usado um 'sistema operacional' gráfico com uma bonita 'Lata de Reciclar'.

A propósito, a saída mi se refere ao campo de 'Data e Criação' no inode. Isto é mentira! (ou enganoso, de qualquer maneira). O fato é que não se pode dizer num sistema de arquivos UNIX quando um arquivo foi criado. O item st_ctime de um struct stat se refere à `data de mudança do inode ', isto é, a última vez que qualquer um dos detalhes do inode foram alterados. Termina a lição de hoje.

Note-se que as versões mais recentes de debugfs que aquela que estou usando provavelmente não incluem alguns dos campos listados acima (especificamente, Reservad1 e (alguns) campos de fragmento).

Uma vez que se tenha modificado os inodes, pode-se sair de debugfs e executar:

# e2fsck -f /dev/hda5

A idéia é que cada um dos arquivos apagados foi literalmente recuperado, mas nenhum deles aparece em qualquer entrada de diretório. O programa e2fsck pode detectar isto e acrescentará uma entrada de diretório para cada arquivo no diretório /lost+found do sistema de arquivos (assim, se a partição estiver normalmente montada no /usr, os arquivos aparecerão agora no /usr/lost+found). Tudo o que se tem a fazer é definir o nome de cada arquivo a partir de seu conteúdo, e fazê-los voltar a seu lugar correto na árvore de sistema de arquivos.

Ao se executar e2fsck, será definida uma saída informativa e algumas perguntas sobre os danos a serem reparados. Responda 'sim' a tudo que se referir a 'resumo de 0' ou aos inodes que se tenha modificado. Qualquer coisa além fica a seu critério, embora seja uma boa idéia responder 'sim' a todas as perguntas. Quando e2fsck terminar, pode-se remontar o sistema de arquivos.

Na verdade, há uma alternativa ao e2fsck: deixe os arquivos em /lost+found, use o debugfs para criar uma ligação no sistema de arquivos para o inode, através do comando link após a modificação do inode:

debugfs:  link <148003> teste.txt

Isto cria um arquivo chamado teste.txt, naquele que debugfs ache que seja o diretório atual. E foo.txt será o seu arquivo. É preciso ainda executar e2fsck para corrigir os resumos das informações, contagens de blocos, etc..


Página seguinte Página anterior Índice