Como dois arquivos em um CD-ROM podem ter o mesmo número de inode e ainda ter uma contagem de links de 1?

3

Como eu estava fazendo uma seleção da minha coleção de CDs, descobri que processar a saída de um find com sort -u estava me dando uma lista menor do que a simples sort , então eu investiguei. Usando diff nas saídas, descobri o nome do arquivo repetido e fui ver como o mesmo arquivo pode existir duas vezes. De fato, o arquivo que estava sendo repetido, 32 , existe duas vezes em fonts/basic . O sistema de arquivos é ISO9660 :

root@user-desktop:/mnt/loop/fonts/basic# ls -al
total 22
dr-xr-xr-x 1 root root  2048 1978-07-01 00:47 .
dr-xr-xr-x 1 root root 12288 1978-07-01 00:48 ..
-r-xr-xr-x 1 root root  3884 1978-07-01 00:47 32
-r-xr-xr-x 1 root root  3884 1978-07-01 00:47 32

root@user-desktop:/mnt/loop/fonts/basic# ls -l -i
total 8
203394 -r-xr-xr-x 1 root root 3884 1978-07-01 00:47 32
203394 -r-xr-xr-x 1 root root 3884 1978-07-01 00:47 32

OK, então eles são hardlinked porque eles têm o mesmo inode, mas como eles podem ter o mesmo nome? E por que eles relatam ter apenas um link?

root@user-desktop:/mnt/loop/fonts/basic# mount|grep mnt/loop
/dev/loop0 on /mnt/loop type iso9660 (ro)

Alguém pode pensar em uma explicação? É algo sobre o sistema de arquivos ISO9660 ?

    
por Andy 14.05.2015 / 17:40

1 resposta

0

Vamos criar um sistema de arquivos ISO9660 simples:

mkdir cd
echo 'hello world' > cd/foo
echo '42' > cd/bar
genisoimage -o cd.iso cd

Monte, examine e desmonte:

gnome-disk-image-mounter cd.iso
ls -li /media/user/CDROM
 1474 -r--------  1 user  user     3 Jul 18 19:38 bar
 1475 -r--------  1 user  user    12 Jul 18 19:38 foo
umount cd.iso

Agora abra a imagem em um editor hexadecimal e substitua FOO.;1 por BAR.;1 . Se for útil, os números de inode no meu sistema são realmente o deslocamento da entrada de diretório para a imagem ISO / 32, ou seja, veja em torno de python -c 'print hex(inode*32)' .

ISO9660 , como FAT , não tem inodes, mas o Linux finge que sim. Todas as informações são armazenadas diretamente no diretório, e como cada entrada de comprimento variável tem no mínimo mais de 32 bytes, isso garante que todos os 'inodes' sejam únicos.

Agora remonte e olhe novamente:

gnome-disk-image-mounter cd.iso
ls -li /media/user/CDROM
 1474 -r--------  1 user  user     3 Jul 18 19:38 bar
 1474 -r--------  1 user  user     3 Jul 18 19:38 bar
umount cd.iso

Observe os números e tamanhos dos arquivos "inode". Ambos os arquivos ainda estão lá na imagem, mas o nome de arquivo duplicado confunde o Linux, fazendo com que ele liste o primeiro arquivo duas vezes. O segundo arquivo está completamente inacessível agora mesmo.

    
por Martin Thornton 18.07.2015 / 23:23