Inode:修订间差异

求闻百科,共笔求闻
添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移])
 
(机器人:清理不当的来源、移除无用的模板参数)
 

(未显示2个用户的6个中间版本)

第1行: 第1行:
{{Refimprove|time=2018-08-09T12:58:18+00:00}}
{{lowercase|inode}}
{{lowercase|inode}}
{{NoteTA
{{NoteTA
第5行: 第4行:
|1 = zh-cn:库; zh-tw:函式庫; zh-hk:函數庫;
|1 = zh-cn:库; zh-tw:函式庫; zh-hk:函數庫;
}}
}}
'''inode (index node)'''是指在许多“类[[Unix]][[文件系统]]”中的一种[[数据结构]],用于描述[[文件系统]]对象(包括[[计算机文件|文件]]、[[目录 (文件系统)|目录]]、[[设备文件]]、[[Unix域套接字|socket]]、[[管道 (Unix)|管道]]等)。每个inode保存了[[文件系统]]对象数据的属性和磁盘块位置<ref>{{cite book|first=Andrew S.|last=Tanenbaum|title=Modern Operating Systems|edition=3rd|page=279}}</ref>。[[文件系统]]对象属性包含了各种[[元数据]](如:最后修改时间<ref>{{cite web|title=Difference between mtime, ctime and atime - Linux Howtos and FAQs|url=http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime|author=JVSANTEN|work=Linux Howtos and FAQs|accessdate=2020-01-20|archive-date=2020-09-21|archive-url=https://web.archive.org/web/20200921072040/http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime|dead-url=no}}</ref>) ,也包含用户组(owner )和权限数据<ref>{{cite web|title=Anatomy of the Linux virtual file system switch|url=http://www.ibm.com/developerworks/library/l-virtual-filesystem-switch|work=ibm.com|accessdate=2020-01-20|archive-date=2018-10-02|archive-url=https://web.archive.org/web/20181002141747/https://www.ibm.com/developerworks/library/l-virtual-filesystem-switch/|dead-url=no}}</ref>。
'''inode (index node)'''是指在许多“类[[UNIX|Unix]][[文件系统]]”中的一种[[数据结构]],用于描述[[文件系统]]对象(包括[[计算机文件|文件]]、[[目录文件系统|目录]]、[[设备文件系统|设备文件]]、[[Unix域套接字|socket]]、[[管道(Unix)|管道]]等)。每个inode保存了[[文件系统]]对象数据的属性和磁盘块位置<ref>{{cite book|first=Andrew S.|last=Tanenbaum|title=Modern Operating Systems|edition=3rd|page=279}}</ref>。[[文件系统]]对象属性包含了各种[[元数据]](如:最后修改时间<ref>{{cite web|title=Difference between mtime, ctime and atime - Linux Howtos and FAQs|url=http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime|author=JVSANTEN|work=Linux Howtos and FAQs|accessdate=2020-01-20}}</ref>) ,也包含用户组(owner )和权限数据<ref>{{cite web|title=Anatomy of the Linux virtual file system switch|url=http://www.ibm.com/developerworks/library/l-virtual-filesystem-switch|work=ibm.com|accessdate=2020-01-20}}</ref>。


== 命名 ==
== 命名 ==
Unix先驱[[丹尼斯·里奇]]说<ref>[http://lkml.indiana.edu/hypermail/linux/kernel/0207.2/1182.html Linux Kernel list archive] {{WebCite|url=https://www.webcitation.org/619jSqQWH?url=http://lkml.indiana.edu/hypermail/linux/kernel/0207.2/1182.html |date=20110823155822 |dateformat=iso }}. Retrieved on 2011-01-12.</ref>,inode这个命名的来源可能是文件系统的存储组织为一个扁平数组,分层目录資訊使用一个数作为文件系统这个扁平数组的索引值(index)。
Unix先驱[[丹尼斯·里奇]]说<ref>[http://lkml.indiana.edu/hypermail/linux/kernel/0207.2/1182.html Linux Kernel list archive] . Retrieved on 2011-01-12.</ref>,inode这个命名的来源可能是文件系统的存储组织为一个扁平数组,分层目录資訊使用一个数作为文件系统这个扁平数组的索引值(index)。


== 细节 ==
== 细节 ==
[[File:File table and inode table.svg|缩略图|Unix上的[[文件描述符]]、文件表与inode表 <ref><!-- Inspired by, not coped from... -->{{Cite book|first=Maurice J.|last=Bach |date=1986 |title =The Design of the UNIX Operating System|publisher=Prentice Hall|page=94|bibcode=1986duos.book.....B }}</ref>]]
[[File:File table and inode table.svg|thumb|Unix上的[[文件描述符]]、文件表与inode表 <ref><!-- Inspired by, not coped from... -->{{Cite book|first=Maurice J.|last=Bach |date=1986 |title =The Design of the UNIX Operating System|publisher=Prentice Hall|page=94|bibcode=1986duos.book.....B }}</ref>]]


文件系统创建(格式化)时,就把存储区域分为两大连续的存储区域。一个用来保存文件系统对象的元信息数据,这是由inode组成的表,每个inode默认是256字节或者128字节。另一个用来保存“文件系统对象”的内容数据,划分为512字节的扇区,以及由8个扇区组成的4K字节的块。块是读写时的基本单位。一个文件系统的inode的总数一般情况下是固定的。这限制了该文件系统所能存储的文件系统对象的总数目。典型的实现下,所有inode占用了文件系统1%左右的存储容量。
文件系统创建(格式化)时,就把存储区域分为两大连续的存储区域。一个用来保存文件系统对象的元信息数据,这是由inode组成的表,每个inode默认是256字节或者128字节。另一个用来保存“文件系统对象”的内容数据,划分为512字节的扇区,以及由8个扇区组成的4K字节的块。块是读写时的基本单位。一个文件系统的inode的总数一般情况下是固定的。这限制了该文件系统所能存储的文件系统对象的总数目。典型的实现下,所有inode占用了文件系统1%左右的存储容量。
第30行: 第29行:


== POSIX inode ==
== POSIX inode ==
[[POSIX]]标准强制规范了文件系统的行为。每个“文件系统对象”必须具有:
[[可移植操作系统接口|POSIX]]标准强制规范了文件系统的行为。每个“文件系统对象”必须具有:
* 以[[字节]]为单位表示的文件大小。
* 以[[字节]]为单位表示的文件大小。
* 设备ID,标识容纳该文件的设备。
* 设备ID,标识容纳该文件的设备。
第48行: 第47行:
* 一个inode如果没有硬链接,此时inode的链接数为0,文件系统将回收该inode所指向的存储块,并回收该inode自身。
* 一个inode如果没有硬链接,此时inode的链接数为0,文件系统将回收该inode所指向的存储块,并回收该inode自身。
* 从一个inode,通常是无法确定是用哪个文件名查到此inode号码的。打开一个文件后,操作系统实际上就抛掉了文件名,只保留了inode号码来访问文件的内容。库函数<tt>getcwd()</tt>用来查询当前工作目录的绝对路径名。其实现是从当前工作目录的inode逐级查找其上级目录的inode,最后拼出整个绝对路径的名字。
* 从一个inode,通常是无法确定是用哪个文件名查到此inode号码的。打开一个文件后,操作系统实际上就抛掉了文件名,只保留了inode号码来访问文件的内容。库函数<tt>getcwd()</tt>用来查询当前工作目录的绝对路径名。其实现是从当前工作目录的inode逐级查找其上级目录的inode,最后拼出整个绝对路径的名字。
* 历史上,对目录的硬链接是可能的。这可以使目录结构成为一个[[有向图]],而不是通常的目录树的[[有向无环图]]。一个目录甚至可以是自身的父目录。现代文件系统一般禁止这些混淆状态,只有根目录保持了特例:根目录是自身的父目录。<code>ls /..</code>就是根目录的内容。
* 历史上,对目录的硬链接是可能的。这可以使目录结构成为一个[[图(数学)#有向图|有向图]],而不是通常的目录树的[[有向无环图]]。一个目录甚至可以是自身的父目录。现代文件系统一般禁止这些混淆状态,只有根目录保持了特例:根目录是自身的父目录。<code>ls /..</code>就是根目录的内容。
* 一个文件或目录在文件系统内部移动时,其inode号码不变。文件系统[[磁盘碎片|碎片整理]]可能会改变一个文件的物理存储位置,但其inode号码不变。非UNIX的[[FAT]]及其衍生的文件系统是无法实现inode不变这一特点。
* 一个文件或目录在文件系统内部移动时,其inode号码不变。文件系统[[磁盘碎片|碎片整理]]可能会改变一个文件的物理存储位置,但其inode号码不变。非UNIX的[[檔案配置表|FAT]]及其衍生的文件系统是无法实现inode不变这一特点。
* inode文件系统中安装新库十分容易。当一些进程正在使用一个库时,其它进程可以替换该库文件名字的inode号码指向新创建的inode,随后对该库的访问都被自动引导到新inode所指向的新的库文件的内容。这减少了替换库时重启系统的需要。而舊的inode的链接数已经为0,在使用舊函式庫的进程结束后,舊的inode与舊函式庫文件会被系统自动回收。
* inode文件系统中安装新库十分容易。当一些进程正在使用一个库时,其它进程可以替换该库文件名字的inode号码指向新创建的inode,随后对该库的访问都被自动引导到新inode所指向的新的库文件的内容。这减少了替换库时重启系统的需要。而舊的inode的链接数已经为0,在使用舊函式庫的进程结束后,舊的inode与舊函式庫文件会被系统自动回收。


第57行: 第56行:
一些文件系统,由于inode表在文件系统创建时就已经确定并且不能再动态增加,新增的文件数量可能会用尽inode。这导致文件系统还有空闲的存储空间,但已经没有空闲的inode可供使用了。例如,一个电子邮件服务器可能会被大量的小文件用尽所有inode,但是却没有填满文件存储空间。
一些文件系统,由于inode表在文件系统创建时就已经确定并且不能再动态增加,新增的文件数量可能会用尽inode。这导致文件系统还有空闲的存储空间,但已经没有空闲的inode可供使用了。例如,一个电子邮件服务器可能会被大量的小文件用尽所有inode,但是却没有填满文件存储空间。


部分文件系统,如[[JFS (文件系统)|JFS]]和[[XFS]],能够动态地增加inode,因此不会用尽inode。
部分文件系统,如[[JFS(文件系统|JFS]]和[[XFS]],能够动态地增加inode,因此不会用尽inode。


== 参考文献 ==
== 参考文献 ==
{{reflist}}
{{reflist}}

== 外部链接 ==
== 外部链接 ==
* [http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/ Anatomy Of The Linux File System]{{Wayback|url=http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/ |date=20160211033517 }}
* [http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/ Anatomy Of The Linux File System]
* [http://www.linfo.org/inode.html Inode definition] {{Wayback|url=http://www.linfo.org/inode.html |date=20200727100213 }}
* [http://www.linfo.org/inode.html Inode definition]
* [http://linuxgazette.net/105/pitcher.html Great and Clear Explanation on Inodes, Symlinks, Hardlinks] {{Wayback|url=http://linuxgazette.net/105/pitcher.html |date=20201112032435 }}
* [http://linuxgazette.net/105/pitcher.html Great and Clear Explanation on Inodes, Symlinks, Hardlinks]
* [http://www.ruanyifeng.com/blog/2011/12/inode.html 理解inode] {{Wayback|url=http://www.ruanyifeng.com/blog/2011/12/inode.html |date=20201022182124 }}
* [http://www.ruanyifeng.com/blog/2011/12/inode.html 理解inode]
* [http://www.opsers.org/base/one-day-the-little-learning-linux-inode-detailed.html 一天一点学习Linux之inode详解] {{Wayback|url=http://www.opsers.org/base/one-day-the-little-learning-linux-inode-detailed.html |date=20200928145010 }}
* [http://www.opsers.org/base/one-day-the-little-learning-linux-inode-detailed.html 一天一点学习Linux之inode详解]


[[Category:文件系统]]
[[Category:文件系统]]