关于文件inode的小结

简介:

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

      文件系统中每个“文件系统对象”对应一个“inode”数据,并用一个整数值来辨识。这个整数常被称为inode号码(“i-number”或“inode number”)。由于文件系统的inode表的存储位置、总条目数量都是固定的,因此可以用inode号码去索引查找inode表。

        Inode存储了文件系统对象的一些元信息,如所有者、访问权限(读、写、执行)、类型(是文件还是目录)、内容修改时间、inode修改时间、上次访问时间、对应的文件系统存储块的地址,等等。知道了1个文件的inode号码,就可以在inode元数据中查出文件内容数据的存储地址。

        这里我用一个命令查看一个目录的inode具体信息

NAME
       stat - display file or file system status
SYNOPSIS
       stat [OPTION]... FILE...

# stat /data
  File: `/data'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 805h/2053d      Inode: 2           Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-01-19 05:10:33.652318432 +0800
Modify: 2017-01-19 05:10:32.487325693 +0800
Change: 2017-01-19 05:10:32.487325693 +0800


# stat /data/a
  File: `/data/a'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d      Inode: 13          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-01-19 03:29:26.353328360 +0800
Modify: 2017-01-19 03:29:26.353328360 +0800
Change: 2017-01-19 03:29:26.353328360 +0800

   

文件名与目录名是“文件系统对象”便于使用的别名。一个文件系统对象可以有多个别名,但只能有一个inode,并用这个inode来索引文件系统对象的存储位置。

  • inode不包含文件名或目录名的字符串,只包含文件或目录的“元信息”。

  • Unix的文件系统的目录也是一种文件。打开目录,实际上就是读取“目录文件”。目录文件的结构是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件或目录的名字,以及该文件或目录名对应的inode号码。

  • 文件系统中的一个文件是指存放在其所属目录的“目录文件”中的一个目录项,其所对应的inode的类别为“文件”;文件系统中的一个目录是指存放在其“父目录文件”中的一个目录项,其所对应的inode的类别为“目录”。可见,多个“文件”可以对应同一个inode;多个“目录”可以对应同一个inode。

  • 文件系统中如果两个文件或者两个目录具有相同的inode号码,那么就称它们是“硬链接”关系。实际上都是这个inode的别名。换句话说,一个inode对应的所有文件(或目录)中的每一个,都对应着文件系统某个“目录文件”中唯一的一个目录项。

  • 创建一个目录时,实际做了3件事:在其“父目录文件”中增加一个条目;分配一个inode;再分配一个存储块,用来保存当前被创建目录包含的文件与子目录。被创建的“目录文件”中自动生成两个子目录的条目,名称分别是:“.”和“..”。前者与该目录具有相同的inode号码,因此是该目录的一个“硬链接”。后者的inode号码就是该目录的父目录的inode号码。所以,任何一个目录的"硬链接"总数,总是等于它的子目录总数(含隐藏目录)加2。即每个“子目录文件”中的“..”条目,加上它自身的“目录文件”中的“.”条目,再加上“父目录文件”中的对应该目录的条目。

  • 通过文件名打开文件,实际上是分成三步实现:首先,操作系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

    一般。我们读取文件什么的都是用的inode数值。inode数值会查找对应的数据块。

    还有一个问题: 为什么删除比复制快?

    删除的过程是我开始的时候以为是删除inode数值。其实,我错了。应该是释放占据的inode数值对

    而复制。是生成新的inode数值。block也发生变化。

    # cp b.txt c.txt

    # ls -i 
         12 b.txt       13 c.txt

    **************************************************

    # rm -rf a.txt
    # touch c.txt
    ]# ls -i
         12 b.txt       13 c.txt

    为什么说删除是释放了inode值呢。因为,在系统创建文件系统的时候,inode表和block就已经存在了。就好比:你去洗澡。你有个柜子的钥匙,你有几号柜子的钥匙(inode值)。你就可以使用那个柜子(block)。当你洗完了,你交出钥匙(释放inode值)。管理人员不关心:你曾使用过的柜子(block)。但是,还会有另一位顾客使用你曾使用过度这个柜子钥匙(占用你释放的inode值)。占用你曾使用过的柜子(block)。

    之所以说是释放不说删除:因为那个inode本身就存在,不是我们创建的。我们只是使用带有inode数值对应位置的磁盘空间(block块)。所以用释放更加准确。

    这样会产生一个问题:文件系统可能会用尽inode。这导致文件系统还有空闲的存储空间,但已经没有空闲的inode可供使用了。例如,一个电子邮件服务器可能会被大量的小文件用尽所有inode,但是却没有填满文件存储空间。这是可以释放inode(rm ) 也可以利用其余目录 的剩余空间。










本文转自 swallow_zys  51CTO博客,原文链接:http://blog.51cto.com/12042068/1893203,如需转载请自行联系原作者
目录
相关文章
|
存储 缓存 安全
virtiofs per-inode DAX 介绍
## 背景信息 1. 什么是 virtiofs? virtiofs 是一种用于在 host/guest 之间共享文件的文件系统,由 Redhat 开源,它使得不同 guest 之间能够以快速、一致、安全的方式共享同一个 host 目录树结构,目前广泛应用于 Kata Container 作为容器的 rootfs。 2. 什么是 DAX? DAX (Direct Access) 最初是针对于
2254 0
virtiofs per-inode DAX 介绍
|
5月前
|
缓存 自然语言处理 Linux
xv6(12) 文件系统:Inode&Directory&Path
文件系统:Inode&Directory&Path
52 0
|
11月前
|
存储 Linux 索引
Linux文件系统inode的作用
前面学习了磁盘管理中的磁盘分区,以及逻辑卷,交换分区的创建,这篇文章将介绍一下我们在分区以及格式化时候用到的ext4文件系统,本盘文章的学习内容包括了解索引(index)和块(block)的作用。
80 0
|
存储 Linux Windows
理解文件系统/inode的概念/磁盘/软硬链接
本文目标:⭐理解文件系统中inode的概念⭐认识软硬链接,对比区别。讲解了文件系统,加深了对文件的理解,与此同时对于磁盘的理解也有很大的帮助!
理解文件系统/inode的概念/磁盘/软硬链接
|
存储 Unix Linux
|
固态存储 Linux 内存技术
文件系统与inode
文件系统与inode
文件系统与inode
|
Unix Linux 索引