Как два файла на CD-ROM могут иметь одинаковый номер инода, но при этом счетчик ссылок равен 1?

Когда я занимался сортировкой своей коллекции компакт-дисков, я обнаружил, что обработка вывода find с помощью sort -u давала мне меньший список, чем обычный sort, поэтому я исследовал. Используя diff на выходных данных, я узнал имя повторяющегося файла, и я решил проверить, как один и тот же файл может существовать дважды. Действительно, файл, который повторялся, 32, существует дважды в fonts/basic. Файловая система 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, поэтому они жестко связаны, потому что у них одинаковый индекс, но как они могут иметь одинаковое имя? И почему они сообщают только об одной жесткой ссылке?

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

Кто-нибудь может придумать объяснение? Это что-то о файловой системе ISO9660 ?

3
задан 19 July 2015 в 00:55

1 ответ

Давайте создадим простую файловую систему ISO9660 :

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

Смонтируйте, изучите и размонтируйте ее:

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

Теперь откройте изображение в шестнадцатеричном редакторе и заменить FOO.;1 на BAR.;1. Если это полезно, номера инодов в моей системе действительно являются смещением записи каталога в ISO-образе / 32, то есть посмотрите на python -c 'print hex(inode*32)'.

ISO9660 , как и FAT , не имеет inode, но Linux притворяется, что это так. Вся информация хранится непосредственно в каталоге, и, поскольку каждая запись переменной длины имеет длину не менее 32 байт, это гарантирует, что все «inode» являются уникальными.

Теперь перемонтируйте его и посмотрите снова:

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

Обратите внимание на номера «inode» и размеры файлов. Оба файла все еще присутствуют в образе, но повторяющееся имя файла вводит Linux в заблуждение, заставляя его дважды перечислять первый файл. Второй файл сейчас полностью недоступен.

0
ответ дан 19 July 2015 в 00:55

Другие вопросы по тегам:

Похожие вопросы: