Linux——文件管理之inode

一、inode概念

inode(index node):译为“索引节点”,是理解Linux文件系统和硬盘存储的基础。
理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”。每个扇区能储存512字节(相当于0.5KB)操作系统在读取硬盘的时候,并非逐个读取扇区,这种方式效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4kb,即连续八个sector组成一个block。
文件数据都存放在block中,那么与block存放相关联的,必须有一个地方储存文件的元信息,如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫inode。

二、inode表结构

inode中保存了blocks指针,但是一条inode记录中能保存的指针数量是有限的,否则就会超出inode大小(128字节或256字节)。
在ext2和ext3文件系统中,一个inode中最多只能有15个指针,每个指针使用i_block[n]表示。
前12个指针i_block[0]到i_block[11]是直接寻址指针,每个指针指向一个数据区的block。如下图所示。
第14个指针i_block[13]是二级间接寻址指针,它指向一个仍然存储了指针的block,但是这个block中的指针还继续指向其他存储指针的block,即i_block[13] --> Pointerblock1 --> PointerBlock2 --> datablock。
第15个指针i_block[14]是三级间接寻址指针,它指向一个任然存储了指针的block,这个指针block下还有两次指针指向。即i_block[13] --> Pointerblock1 --> PointerBlock2 --> PointerBlock3 --> datablock。
其中由于每个指针大小为4字节,所以每个指针block能存放的指针数量为BlockSize/4byte。例如blocksize为4KB,那么一个Block可以存放4096/4=1024个指针。
为什么要分间接和直接指针呢?
如果一个inode中15个指针全是直接指针,假如每个block的大小为1KB,那么15个指针只能指向15个block即15KB的大小,由于每个文件对应一个inode号,所以就限制了每个文件最大为151=15KB,这显然是不合理的。
如果存储大于15KB的文件而又不太大的时候,就占用一级间接指针i_block[12],这时可以存放指针数量为1024/4+12=268,所以能存放268KB的文件。
如果存储大于268K 的文件而又不太大的时候,就继续占用二级指针i_block[13],这时可以存放指针数量为[1024/4]^2+1024/4+12=65804,所以能存放65804KB=64M左右的文件。
如果存放的文件大于64M,那么就继续使用三级间接指针i_block[14],存放的指针数量为[1024/4]^3+[1024/4]^2+[1024/4]+12=16843020个指针,所以能存放16843020KB=16GB左右的文件。
如果blocksize=4KB呢?那么最大能存放的文件大小为([4096/4]^3+[4096/4]^2+[4096/4]+12)
4/1024/1024/1024=4T左右。
当然这样计算出来的不一定就是最大能存放的文件大小,它还受到另一个条件的限制。这里的计算只是表明一个大文件是如何寻址和分配的。

其实看到这里的计算数值,就知道ext2和ext3对超大文件的存取效率是低下的,它要核对太多的指针,特别是4KB大小的blocksize时。而ext4针对这一点就进行了优化,ext4使用extent的管理方式取代ext2和ext3的块映射,大大提高了效率也降低了碎片。

三、inode表内容

每一个inode(索引节点)是一个表项,包含有关文件的元数据信息,包括:

* 文件类型:

“-” :普通文件
“d”:目录
“c”:字符设备文件
“b”:块设备文件
“p”:管道文件
“s”:套接字文件
“l” :链接文件

* 权限:

读(r)
写(w)
执行(x)

* 文件所属:

UID
GID

* 硬链接数(指向这个文件名路径名称个数)
* 文件大小、inode数
* 时间戳

ctime:文件的inode上一次变动的时间
mtime:文件内容上一次变动的时间
atime:文件上一次打开的时间

* 文件数据block的位置:指向磁盘上文件的数据块指针
* 有关文件的其他数据

四、几个相关命令的理解

1. cp:分配一个空闲的inode号,在inode表中生成新条目;在目录中创建一个目录项,将名称与inode编号关联;拷贝数据生成新的文件

2. mv:

如果mv命令的目标和源在相同的文件系统,作为mv 命令

用新的文件名创建对应新的目录项>删除旧目录条目对应的旧的文件名>不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv相当于cp和rm

3. rm:链接数递减,释放的inode号,该inode号可以被重用;把数据块放在空闲列表中;删除目录项;数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

4. 链接

*  硬链接:
* 
    * 创建硬链接会增加额外的记录项以引用文件
    * 对应于同一文件系统上一个物理文件
    * 每个目录引用相同的inode号
    * 创建时链接数递增
    * 删除文件时:rm命令递减计数的链接
    * 文件存在,至少有一个链接数
    * 当链接数为零时,该文件被删除
    * 不能跨越驱动器或分区
    * 不能作用于目录
    * 语法: ln filename [linkname]

* 软链接(符号链接):
* 
    * 一个符号链接指向另一个文件
    * ls - l 显示链接的名称和引用的文件
    * 一个符号链接的内容是它引用文件的名称
    * 可作用于目录
    * 可以跨分区
    * 指向的是另一个文件的路径
    * 符号链接大小为指向的路径字符串的长度
    * 不增加或减少目标文件inode的引用计数
    * 语法:ln -s filename [linkname]

五、参考

https://www.cnblogs.com/f-ck-need-u/p/7016077.html

转载于:https://blog.51cto.com/1456850/2362753

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值