为了了解在Ubuntu不同的对象相同的inode编号(To understand the same

2019-09-24 03:54发布

为什么/ CDROM具有相同的inode -值比/sys/devices/platform/power在Ubuntu?

下面有我的Ubuntu相同的inode编号

./media/BACKUP_1/MISC
./cdrom
./sys/devices/platform/power

我让他们通过运行在根目录下

find . -inum 12 2> /dev/null

回复莱弗勒的答案

我跑

stat cdrom

我得到

  File: `cdrom' -> `media/cdrom'
  Size: 11              Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d      Inode: 12          Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2009-08-03 04:25:35.000000000 +0300
Modify: 2009-08-03 04:19:05.000000000 +0300
Change: 2009-08-03 04:19:05.000000000 +0300

这是什么信息告诉你吗?

回复莱弗勒的编辑

通常情况下,你可以解剖设备号到这是一个设备什么的ls -l“版画的主要和次要设备编号。

此命令ls -l cdrom给我这个

lrwxrwxrwx 1 root root 11 2009-08-03 04:19 cdrom -> media/cdrom 

你如何从这里可以看的主要和次要设备号?

Answer 1:

该设备可能是在不同的文件系统 - 这是文件系统,这是唯一的inode编号的组合。

如果您使用stat()系统调用,相关的字段是st_inost_dev (和st_rdev识别特殊的设备)。


此问题已扩展 - 问什么样的信息可以从收集:

  File: `cdrom' -> `media/cdrom'
  Size: 11              Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d      Inode: 12          Links: 1

有迹象表明,从这里可以收集到很多东西。 其中主要措施是,这个符号链接是与设备号(文件系统上st_rdev的0x0801(或2049)),和inode编号是12。通常,你可以解剖设备号到这是一个主要的和次要设备号什么“ ls -l ”打印的设备。 有一个像样的机会(但我还没有正式证实这一点),主要的设备号是8,次设备为1(基于十六进制表示0x0801)。


现在的问题是延长第二次:

此命令ls -l cdrom给我这个

 lrwxrwxrwx 1 root root 11 2009-08-03 04:19 cdrom -> media/cdrom 

你如何从这里可以看的主要和次要设备号?

简短的回答是“你不能”。 从其中的一个输出可能是适当的信息:

ls -l media/cdrom
ls -lL cdrom

在前面的问题(从输出中所示的装置stat命令)有,我建议,主要装置8次设备1.你会发现,通过运行“ ls -l是安装的文件系统的设备上”为“ . ”。 您可以使用“ df . “寻找安装设备的名称 - 有可能是其他的,将工作过的机制。



Answer 2:

一个inode唯一地标识在文件系统上的文件。 在你的榜样,你正在寻找在三个不同的文件系统: //media/BACKUP_1 (大概外部VFAT32驱动器或棒)和/sys

这三种不同的文件系统; 它是完全正常的上不同的文件系统中使用的相同的inode编号。 如果inode编号必须是在所有的文件系统唯一的,那将是一个非常苛刻的要求,有以下几个原因:

  • 只能有2个sizeof(inode_t) ×BITS_PER_BYTE文件在整个世界
  • 整个星球上的每一台计算机都需要连接到所有其他计算机上的所有时间,让自己不小心把手伸到了相同的号码。

试想一下:你创建你的外部设备上的文件。 然后您分离,并将其连接到另一台计算机,这也创建了一个文件。 如何将计算机中的知道哪些inode编号已使用的B电脑?

此外,你的情况有不同的特点: /sys是不是一个“真正”的文件系统,它是一个虚拟文件系统。 它只是暴露了内部的内核数据结构的文件和目录。 它甚至没有做这一切的时候,它不仅会当你真正看它 - 那么,也只有这样做的文件神奇地弹入的存在。 因此,它的inode编号合成和真的没有任何用处可言-确实,IIRC一些虚拟文件系统索引节点号正好被设置为0每一个文件,或者至少他们试图,直到他们意识到,这打破了种种工具。

除此之外, /media/BACKUP_1是想必VFAT32文件系统,这是一个DOS文件系统。 信息节点是一个Unix的概念,所以VFAT32甚至没有索引节点,他们再次进行合成。

事实上,许多现代的Unix文件系统不具备任何的inode,它们存储在B +树或其他一些高度优化的数据结构,文件,并通过其在树中的位置隐含地解决这些问题。 我知道的Reiser4文件系统遇到了一些麻烦,因为在某些情况下,他们并没有在所有的合成inode编号或合成的再次爆发一些工具非常大的inode编号。 (做的事情类似,其所需的工具,一些愚蠢的实现find -inode只是建立了一个数组从0到他们能找到的最高的inode编号,如果他们赠送了一个非常大的inode这将消耗,然后在机器上的所有可用内存数。)



Answer 3:

/sys/是一个独立的文件系统,命名为sysfs 。 inode编号是全球文件树中的特定文件系统内唯一的独一无二,不可。



Answer 4:

为了验证十六进制和十二月号码,使用:

$ echo "obase=16; 2049"|bc 
801


文章来源: To understand the same inode numbers for different objects in Ubuntu
标签: ubuntu inode