Quando um arquivo ou diretório é "excluído", seu número de inode é removido do diretório que contém o arquivo. Você pode ver a lista de inodes que um determinado diretório contém usando o comando tree
.
Exemplo
$ tree -a -L 1 --inodes .
.
|-- [9571121] dir1
|-- [9571204] dir2
|-- [9571205] dir3
|-- [9571206] dir4
|-- [9571208] dir5
|-- [9571090] file1
|-- [9571091] file2
|-- [9571092] file3
|-- [9571093] file4
'-- [9571120] file5
5 directories, 5 files
Links
É importante entender como os hardlinks funcionam. Este tutorial intitulado: Intro to Inodes tem excelentes detalhes se você está apenas começando a tentar para obter uma compreensão fundamental de como os inodes funcionam.
trecho
Inode numbers are unique, but you may have noticed that some file name and inode number listings do show some files with the same number. The duplication is caused by hard links. Hard links are made when a file is copied in multiple directories. The same file exists in various directories on the same storage unit. The directory listing shows two files with the same number which links them to the same physical on te storage unit. Hard links allow for the same file to "exist" in multiple directories, but only one physical file exists. Space is then saved on the storage unit. For example, if a one megabyte file is placed in two different directories, the space used on the storage is one megabyte, not two megabytes.
Excluindo
Esse mesmo tutorial também teve isso a dizer sobre o que acontece quando um inode é excluído.
Deleting files causes the size and direct/indirect block entries are zeroed and the physical space on the storage unit is set as unused. To undelete the file, the metadata is restored from the Journal if it is used (see the Journal article). Once the metadata is restored, the file is once again accessible unless the physical data has been overwritten on the storage unit.
Extensões
Você pode querer também retocar extensões e como elas funcionam. Novamente a partir do site linux.org, outro bom tutorial, intitulado: Extents irá ajudá-lo a obter os princípios básicos.
Você pode usar o comando filefrag
para identificar quantas extensões um determinado arquivo / diretório está usando.
Exemplos
$ filefrag dir1
dir1: 1 extent found
$ filefrag ~/VirtualBox\ VMs/CentOS6.3/CentOS6.3.vdi
/home/saml/VirtualBox VMs/CentOS6.3/CentOS6.3.vdi: 5 extents found
Você pode obter resultados mais detalhados usando a opção -v
:
$ filefrag -v dir1
Filesystem type is: ef53
File size of dir1 is 4096 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 38282243.. 38282243: 1: eof
dir1: 1 extent found
OBSERVAÇÃO: Observe que um diretório sempre consome no mínimo 4K bytes.
Dando um arquivo de tamanho
Podemos pegar um dos nossos arquivos de exemplo e gravar 1MB de dados assim:
$ dd if=/dev/zero of=file1 bs=1k count=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00628147 s, 167 MB/s
$ ll | grep file1
-rw-rw-r--. 1 saml saml 1048576 Dec 9 20:03 file1
Se analisarmos esse arquivo usando filefrag
:
$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 255: 35033088.. 35033343: 256: eof
file1: 1 extent found
Excluindo e recriando um arquivo rapidamente
Uma experiência interessante que você pode fazer é criar um arquivo, como file1
acima, excluí-lo e recriá-lo. Veja o que acontece. Logo após excluir o arquivo, eu executo novamente o comando dd ...
e o file1
aparece assim no comando filefrag
:
$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 255: 0.. 255: 256: unknown,delalloc,eof
file1: 1 extent found
Após um pouco de tempo (segundos a minutos passam):
$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 255: 38340864.. 38341119: 256: eof
file1: 1 extent found
O arquivo finalmente aparece. Eu não tenho certeza do que está acontecendo aqui, mas parece que leva algum tempo para o estado do arquivo se estabelecer entre o periódico & O disco. A execução dos comandos stat
mostra o arquivo com um inode, portanto, ele está lá, mas os dados que filefrag
usa não foram resolvidos, portanto estamos em um estado de limbo.