Linux基础之Inode
当在磁盘,分区或卷上创建文件系统(格式化)后,就会被划分成两部分
元数据(metadata)
数据块(data block)
inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据。此元数据的hi存放在node(index node)表中的。node表中由很多记录组成,第一条记录对应的存放了一个文件的元数据信息
- inode number 节点号
- 文件类型
- UID
- GID
- 链接数(指向这个文件路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
inode有两个功能:记录档案属性和指针。
操作系统通过inode值可以快速地找到文件所对应的数据块
[root@centos8 ~]# ls -lhi
total 16K
201326724 -rw-------. 1 root root 1.7K Jul 13 21:56 anaconda-ks.cfg
201478671 -rw-r--r-- 1 root root 0 Jul 30 10:52 'date -d +%F_%T'
135007197 drwxr-xr-x. 2 root root 6 Jul 21 12:57 Desktop
135007198 drwxr-xr-x. 2 root root 6 Jul 21 12:57 Documents
202056447 drwxr-xr-x. 2 root root 6 Jul 21 12:57 Downloads
201478707 -rw-r--r--. 1 root root 9 Jul 21 16:30 f1
201478709 -rw-r--r--. 1 root root 9 Jul 21 16:32 f1.txt
202172389 -rw-r--r--. 1 root root 0 Jul 22 14:05 file1
inode区域和block区域
inode表
- 文件对象的inode编号除文件名外,所有文件属性信息
- 指向数据块区域的指针
- 表里inode编号数量有限,当inode编号用完,即使有数据区域内存空间也不能在表建立新的inode
inode位图
二进制记录 看空缺
block位图
二进制记录 查看哪个块用没用
block区域
文件保存有需要一个或多个块
目录
是一种特殊文件 保存的是inode与文件名和子目录名
cp和inode
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm和inode
链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
如果mv命令的目标和源在相同的文件系统,作为mv命令
用新的文件名创建对应新的目录项
删除旧目录条目对应旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
- 如果目标和源在一个不同的文件系统,mv相当于cp和rm
inode与文件存储
(1)前12个直接指针,直接指向存储的数据区域
如Blocks大小为4096,则前12个直接指针就可以保存48KB文件。
(2)一级指针可存储文件大小计算
假设每个指针占用4个字节,则一级指针指向的Block可保存4096/4指针,可指向1024个Block。一级指针可存储文件数量大小为1024*4096=4MB。
(3)二级指针可存储文件大小计算
同样按照Block大小为4096,则二级指针可保存的Block指针数量为(4096/4) *(4096/4)=1024*1024,则二级指针可保存的文件数量大小为(1024 * 1024)4096=4GB
(4)三级指针可存储文件大小计算
以一级,二级指针计算方法类推,三级指针可存储的文件数量大小为(1024 * 1024 * 1024) * 1024=4TB
件数量大小为(1024 * 1024)4096=4GB
(4)三级指针可存储文件大小计算
以一级,二级指针计算方法类推,三级指针可存储的文件数量大小为(1024 * 1024 * 1024) * 1024=4TB