在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、inode是什么? 理解inode,要从文件储存说起。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 二、inode的内容 复制代码 代码如下: * 文件的字节数
* 文件拥有者的User ID * 文件的Group ID * 文件的读、写、执行权限 * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 * 链接数,即有多少文件名指向这个inode * 文件数据block的位置 可以用stat命令,查看某个文件的inode信息: 复制代码 代码如下:stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。 三、inode的大小 inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。 查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。 复制代码 代码如下:df -i 查看每个inode节点的大小,可以用如下命令: 复制代码 代码如下:sudo dumpe2fs -h /dev/hda | grep "Inode size" 由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。 四、inode号码 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。 复制代码 代码如下:ls -i example.txt 五、目录文件 Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。 目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。 ls命令只列出目录文件中的所有文件名: 复制代码 代码如下:ls /etc ls -i命令列出整个目录文件,即文件名和inode号码: 复制代码 代码如下:ls -i /etc 如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。 复制代码 代码如下:ls -l /etc 六、硬链接 ln 源文件 目标文件 这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。 七、软链接 这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。 复制代码 代码如下:ln -s命令可以创建软链接。 ln -s 源文文件或目录 目标文件或目录 八、inode的特殊作用 在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。 解决方案: |
请发表评论