重启后的 inode 编号

Mar*_*tin 4 unix linux filesystems posix inode

inode 编号是否保证(例如通过标准)在重新启动、重新安装或什至在所有进程关闭然后再次打开后都相同?例如,它可以在打开文件时自动生成,而不是存储在文件系统上。应用程序可以依赖它吗?文件系统实现是否需要保证特定的语义?

Pau*_* Bu 5

inode不是每个文件系统的通用概念。Ext文件系统和 LinuxVFS将文件系统inode视为存储文件信息的数据结构。但是,例如,FAT32或者NTFS不知道 aninode是什么,因为他们根本不使用该概念。

话虽如此,我将尝试回答您的问题:

inode 编号是否保证(例如通过标准)在重新启动、重新安装或什至在所有进程关闭然后再次打开后都相同?

视情况而定,如果文件系统是Ext类型的,则inode编号存储在i_ino内部文件中struct inode,并写入磁盘,所以是的,在这种情况下,如果文件相同(不是其他同名文件),则inode编号为保证是一样的。

否则,如果文件系统不是Ext,则inode数字inode operations由文件系统驱动程序定义的生成,因为它们没有 an 的概念inode,它们必须模仿所有inode的内部字段以符合 VFS,所以这重新启动后,数字可能会有所不同,即使在关闭并再次打开文件之后(理论上)也是如此。

例如,它可以在打开文件时自动生成,而不是存储在文件系统上。

是的!每当访问其文件之一时,非Ext文件系统的驱动程序 ( FAT32, NTFS) 都会生成一个inode结构。

应用程序可以依赖它吗?

不是很安全,应用程序依赖于更易读的文件路径。必须通过它找到一个文件inode将意味着遍历inodes一个分区中的所有文件(很多)。通过解析文件的路径,搜索得到优化,它只检查目录中的文件。

文件系统实现是否需要保证特定的语义?

我不太明白这个问题,但我认为是的,文件系统是非常复杂的结构,他们需要很好地确定它需要什么数据类型以及它们的含义是什么。

例如:Ext定义blockinodedentry以及超过这些数据结构的功能的列表。

希望这可以帮助!