为什么 CD-ROM 上的两个文件有相同的 inode 号,但链接数却为 1?

为什么 CD-ROM 上的两个文件有相同的 inode 号,但链接数却为 1?

当我对我的 CD 收藏进行排序时,我发现处理 的输出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

好吧,它们是硬链接的,因为它们有相同的 inode,但它们怎么会有相同的名称呢?为什么它们报告只有一个硬链接?

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

有人能解释一下吗?是不是因为ISO9660文件系统?

答案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.;1BAR.;1。如果有帮助的话,我系统上的 inode 编号实际上是目录条目在 ISO 映像 / 32 中的偏移量,即查看 左右python -c 'print hex(inode*32)'

ISO9660, 喜欢胖的,没有 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 感到困惑,导致它列出第一个文件两次。第二个文件现在完全无法访问。

相关内容