Arquivos grandes (mais de 12
blocks)
O problema aparece para arquivo com mais de 12 blocos.
Para conseguirmos recuperar esses arquivos precisamos contar
que o disco não está fragmentado. E quanto maior
for o arquivo mais difícil vai ser a
recuperação total dele. Vamos descrever um pequeno
resumo de como funciona o armazenamento de grandes arquivos
na filesystem.
Um inode é um identificador unico que um arquivo
recebe, nele contém uma lista com 12 blocos diretos de
dados que o arquivo deve ter, se ele possui mais de 12
blocos, ele segue um regra para gravar esses blocos no disco
e poder achar mais tarde.
- os 12 primeiros blocos são gravados diretamente,
são conhecidos como direct blocks.
- O inode contém o número para um bloco que
seria um bloco indireto. Um bloco indireto contém
dados para 256 blocos adicionais.
- o inode contém o número para um bloco que
seria um segundo bloco indireto. Esse contém 256
blocos indiretos adicionais.
- o inode contém o número para um bloco que
seria um terceiro bloco indireto. Esse contém 256
segundos-blocos indiretos adicionais.
O problema consiste em que os blocos indiretos são
(geralmente) zerados quando o arquivo é deletado.
Então, não existe grandes esperancas ou garantias
para achar os blocos caso o arquivo esteja fragmentando, a
nossa unica esperanca é considerar que o arquivo
está gravado de forma sequencial. Assumindo que ele
não está fragmentando podemos usar a tabela abaixo
como referência.
0 até 12
Os blocos diretos que são gravados no inode.
13 até 268
Logo apos os blocos diretos, os blocos indiretos. Neste
primeiro caso 256 blocos de dados.
269 até 65804
Como antes, depois dos 12 blocos diretos, um bloco indireto
inútil (que seria uma lista com os blocos indiretos), e
256 blocos. São seguidos por um (inútil)
segundo-bloco e 256 repetições de blocos
(inúteis) mais 256 repetições de blocos de
dados.
E assim por diante. Você não precisa entender a
fundo como isso funciona, apenas os conceitos são
importantes.
Estamos contando que nenhum dos blocos foi sobrescrito e
que ele foi gravado de maneira sequência. Outro fator
importante é verificar que o nosso blocksize é de
1024. Você pode estar adotando outro valor para o seu
filesystem. Considera sempre blocksize/4 o número de
blocos que podem ser gravador indiretamente por um inode.
Veja o exemplo abaixo:
debugfs: stat <1387>
Inode: 148004 Type: regular Mode: 0644 Flags: 0x0 Version:
1
User: 503 Group: 100 Size: 1851347
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 3616
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 2000
atime: 0x31a21dd1 -- Tue May 21 20:47:29 2000
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2000
dtime: 0x31a9a574 -- Mon May 27 13:52:04 2000
BLOCKS:
8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325
8326 8583
TOTAL: 14
Grandes chances desse arquivo ser sequencial, podemos
notar isso pelos blocos diretos.