Oct 13

Filesystem Inodes

Category: Debian

O fundamental conceito de Linux filesystem é que cada objeto no filesystem é representado por um inode.

Onde os objetos apresentam atributos como: tipo de arquivo, tamanho de arquivo, permissões, ACLs e etc.

Todas estas informações estão guardadas no inode do arquivo, onde cada inode é identificado por um inode number no filesystem (este número é único, por isto index node).

Para visualizar o inode number de um determinado objeto

ls -i /var/log/syslog

Saída:

21250 /var/log/syslog

Pode também utlizar o comando stat para verificar o inode number e os atributos do objeto.

stat /var/log/syslog

Saída

File: `/var/log/syslog`
Size: 34520 Blocks: 20 IO Block: 4096 regular file
Divece: 341h/833d Inode: 21250 Links: 0
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-10-10 00:30:02. 000000000 +530
Modify: 2007-10-10 00:30:03. 000000000 +530
Change: 2007-10-10 00:30:03. 000000000 +530

Exemplo de utilização:

touch /tmp/\”teste*

Você não vai conseguir remover este tipo de arquivo, pois em seu nome contém caractes de controle e também caractes especiais.

Removendo este arquivo:

ls -il /tmp

Saída:

695523 -rw-r–r– 1 root root 0 2007-10-10 00:35 “teste*

Usaremos o comando find para excluir por inode number

find . -inum 695523 -exec rm -i { } \;

OBS.:

Também é possível utilizar \ antes de um caracter especial para utilizar o comando rm normalmente.

rm “\”teste\*”

Também é possível recuperar um arquivo excluído pelo seu inode number utilizando o comando debugfs da seguinte forma:

Execute o comando apontando para a partição onde se encontrava o arquivo excluído.

debugfs /dev/sda3

Se desejar modificar os inodes diretamente utilize

debugfs -w /dev/sda3

Listando os inodes apagados

debugfs: lsdel

Como a saída será muito grande é necessário grava em algum arquivo

debugfs: quit
# echo lsdel | debufs /dev/sda3 > /tmp/inode.out

Para visualizar uma melhor descrição do inode desejado utilize

debugfs: stat <695523>

Caso possua muitos arquivos para verificar utilize:

cut -c1-6 /tmp/inode.out | grep “[0-9]” | tr -d ” ” > /tmp/inode.number

Para visualizar os detalhes de cada inode number:

sed ‘/^.*$/stat <\0>/’inode.number | debugfs /dev/sda3 > /tmp/inodes.detail

Agora sabendo quais inodes queremos vamos recupar os arquivos

debugfs: start <695523>
debugfs: dump <695523> /tmp/inodefile.out

Se por acaso ficou algum lixo no arquivo podemos, recupera-lo da seguinte maneira.

dd if=/tmp/inodefile.out of=/tmp/inodefileresize.out bs=6050 count=1

OBS.:

O valor do bs no comando dd, corresponde ao valor contido no campo Size: na saída do comando dubugfs: dump <695523>.

Os inodes se aplicam a todos os sistemas Linux e Unix.

Share this on Orkut!
Comments are off for this post

Comments are closed.