我对Inode与Vnode有一些疑问。据我所知,inode是虚拟文件系统使用的文件的表示形式。而vnode是文件系统特定的。这个对吗?
另外,我很困惑inode是内核数据结构,即它是内存中数据结构还是实际磁盘中块上存在的数据结构?
最佳答案
要添加一些内容:可以在FreeBSD docs上找到关于vnode的最佳解释。对于更具学术头脑的人,还有original paper that introduced the concept,它提供了更深入的资源。
那就是说vnode最初是为FreeBSD创建的,因为需要使用UFS,NFS等各种类型的文件系统,因此vnodes旨在为所有可能的文件系统提供抽象,以便OS可以与它们进行接口(interface)等等。内核功能不必专门支持阳光下的每个文件系统;他们只需要知道如何与文件的vnode交互。
回到您最初的问题,就像@Allen Luce提到的那样,vnode位于内存抽象中,而不是特定于文件系统的。它们可以在UFS,ext4和其他任何版本中互换使用。相反,inode存储在磁盘上,并且特定于所使用的确切文件系统。 inode 包含有关文件的元数据,如大小,所有者,指向块地址的指针等。 Vnode包含一些有关文件的数据,但仅包含在文件生命周期内不会改变的属性,因此,如果您想获得有关文件的尽可能多的信息,则可以使用inode作为引用位置。如果您对inode更感兴趣,建议您查看wikipedia which has a good article on them。
关于operating-system - Inode与Vnode的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27345342/