文件元数据及节点

Linux是如何构成的

文件由目录项、inode和数据块三部分组成:

目录项:包括文件名和inode table。

Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。

数据块:包含文件的具体内容

详细到具体的狭义的文件和目录则是:文件=Inode+数据块,目录=目录项。


inode表结构

inode定义:指在许多“类Unix文件系统”中的一种数据结构,用于描述文件系统对象(包括文件、目录、设备文件、socket、管道等)。每个inode保存了文件系统对象数据的属性和磁盘块位置。文件系统对象属性包含了各种元数据(如:最后修改时间) ,也包含用户组(owner )和权限数据。又称文件索引节点,包含文件的基础信息以及数据块的指针。

9、Linux文件系统管理(下)_硬链接

inode有上图中的左边区域组成,数据块由右边区域构成。不同的文件大小,通过多层级的间接指针协同完成。

直接块指针有12个,假设一个block块大小为4KB,所以直接指针可以保存48KB的文件

间接块指针:每个指针占用4个字节,一个block是4KB,所以可以将一个块拆分成1024个指针,那么它的存储数据1024*4KB=4MB

双重间接块指针:同理可得它可以存储的数据为1024*4MB=4GB

三级指针可以储存文件数据大小为1024*4GB=4TB

9、Linux文件系统管理(下)_硬链接_02

文件系统如何存取文件的?

1、访问文件,先进入目录,目录中有对应的目录项中有对应文件名和inode号;

2、根据文件名,找到文件对应的inode number;

3、再根据indoe number读取到文件的inode table;

4、再根据inode table中的pointer(指针)读取到对应的block;

查看inode、block命令

df -i  查看分区总inode情况

9、Linux文件系统管理(下)_Linux文件系统_03

ll -i 查看目录下各文件所innode number

9、Linux文件系统管理(下)_Linux文件系统_04

stat 查看文件所对应的inode number

9、Linux文件系统管理(下)_硬链接_05

dumpe2fs -h /dev/sda1 | grep "Inode size" 查看每个inode节点的大小

9、Linux文件系统管理(下)_Linux文件系统_06

dumpe2fs -h /dev/sda1 | grep "Block size" 查看每个块的大小

9、Linux文件系统管理(下)_Linux文件系统_07

文件管理命令cp、rm、mv与inode

9、Linux文件系统管理(下)_软链接_08

cp命令:分配新的inode好,在inode表中生成新条目,在目录中创建目录项;将名称与inode编号关联;生成新文件;

9、Linux文件系统管理(下)_软链接_09

mv命令:如果文件在同一个文件系统内,用新的文件名创建对应的目录项;删除旧目录条目对应的旧文件名;不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动

如果在不同的文件系统,mv相当于cp和rm

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

软链接和硬链接

硬链接

本质上是给文件起一个新的名称,实质为同一个文件;

硬链接特性:

创建硬链接会在对应的目录中增加额外的记录项引用文件;

对应于同一文件系统上一个物理文件;

每个目录引用相同的inode号;

创建是链接数递增;

删除文件时:rm命令减少计数的链接,文件还存在,到链接数为0时,文件才被删除;

不支持对目录创建硬链接;不支持跨文件系统创建硬链接;

9、Linux文件系统管理(下)_软链接_10

9、Linux文件系统管理(下)_Linux文件系统_11

9、Linux文件系统管理(下)_inode_12

软链接

一个符号链接指向另一个文件,类似快捷方式,本质上不是同一个文件;

软链接特征:

一个符号链接的内容是它应用文件的名称;

可以对目录创建软链接;

可以跨分区的文件事项;

指向的是另一个文件的路径;其大小为指向路径字符串的长度;不增加或减少目标文件inode的引用计数;

软链接如果使用相对路径,是相对于员文件的路径,而非相对于当前目录;

删除目标文件后,链接文件失效

9、Linux文件系统管理(下)_inode_13

9、Linux文件系统管理(下)_硬链接_14

软链接的方式常用于软件版本的升级,如mysql;使用软链接方式连接mysql目录;如下

9、Linux文件系统管理(下)_软链接_15

9、Linux文件系统管理(下)_Linux文件系统_16

软链接和硬链接区别:

9、Linux文件系统管理(下)_Linux文件系统_17

案例1:创建文件时,提示无可用空间,但是df可以看到空间很多,为什么?如何解决?

9、Linux文件系统管理(下)_Linux文件系统_18

问题点:inode空间已使用完

9、Linux文件系统管理(下)_硬链接_19

解决方法:删除无效文件

案例2:提示空间块满,使用rm删除了很大的无用文件后,df还看到空间不足,为什么?如何解决?

9、Linux文件系统管理(下)_硬链接_20

查看到有人在使用45g这个文件,所以无法进行彻底删除(lsof | grep delete)

9、Linux文件系统管理(下)_Linux文件系统_219、Linux文件系统管理(下)_硬链接_22

恢复文件方法(查找到PID,进入该进程的pid的文件中,查找的文件,将文件拷贝);可用于误删除文件方式(进程还在情况

9、Linux文件系统管理(下)_inode_23

正确删除文件方法:(可不用结束占用该文件的进程达到清理空间用途)

cat /dev/null /data/45g.txt

9、Linux文件系统管理(下)_Linux文件系统_24