深入解析文件系统原理(inode,软硬链接区别)

第四阶段提升

时  间:2023年8月29日

参加人:全班人员

内  容:

深入解析文件系统原理

目录

一、Inode and Block概述

(一)查看文件的inode信息:stat

(二)Atime、Mtime、Ctime详解:

(三)操作示例:

二、目录文件的结构

三、Inode的号码

(二)查看文件的inode号码

(三)文件存储位置对照

(四)删除指定inode号所对应的文件

(五)查看文件系统的inode与block的信息

(六)格式化时指定文件系统的inode个数与block大小

(七)解决inode耗尽导致的磁盘故障

四、Linux文件系统软硬链接原理

(一)硬链接(hard link)

(二)软链接(soft link)

(三)硬链接与软链接的对比


一、Inode and Block概述

        文件储存在硬盘上,硬盘的最小储存单位叫“扇区”(sector),每个扇区拥有512字节。

        操作系统从硬盘上读取数据时,不会按照扇区的方式读取,这样读取效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block,由多个扇区的空间组成)。  

        这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个Block。Block存储文件数据。

        文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户、文件所属组、文件的类型、文件的权限、文件的创建时间、文件的修改时间、文件的访问时间、文件使用的Block信息、文件的硬链接数、文件的大小等等属性信息。

这种储存文件元信息的区域叫做Inode。中文译名为“索引节点”,也叫i节点

        Inode  Block 文件系统组成的基本核心概念,文件系统是在分区格式化的时候形成的,文件系统负责组织文件在分区上的存放的。

注意:

Inode不包含文件名。文件名是储存在目录的目录项中。

一个文件必须占用一个inode,至少占用一个block。

(一)查看文件的inode信息:stat

[root@localhost ~]# stat 1.txt

(二)Atime、Mtime、Ctime详解:

英文

别称

中文翻译

何时修改

查看命令

Access

Atime

访问时间

读取

ls -lu

Modify

Mtime

修改时间

写入、修改

ls -l

Change/Create

Ctime

改变时间/创建时间

修改文件名、写入、修改、改权限、做链接

ls -lc

(三)操作示例:

1、读取文件内容,查看Atime的改变:

[root@localhost ~]# echo haha > a.txt

[root@localhost ~]# stat a.txt

[root@localhost ~]# cat a.txt

[root@localhost ~]# stat a.txt

2、文件写入内容,查看Mtime/Ctime的改变

[root@localhost ~]# stat a.txt

[root@localhost ~]# echo hehe > a.txt

[root@localhost ~]# stat a.txt

3、修改文件权限,查看Ctime的改变

[root@localhost ~]# stat a.txt

[root@localhost ~]# chmod 777 a.txt

[root@localhost ~]# stat a.txt

4、创建硬链接,查看Ctime的修改

[root@localhost ~]# stat a.txt

[root@localhost ~]# ln /root/a.txt /tmp/a.txt

[root@localhost ~]# stat a.txt

5、修改文件名,查看Ctime的改变

[root@localhost ~]# stat a.txt

[root@localhost ~]# mv a.txt aa.txt

[root@localhost ~]# stat aa.txt

6、Touch更新时间,三个时间全部修改

[root@localhost ~]# stat aa.txt

[root@localhost ~]# touch aa.txt

[root@localhost ~]# stat aa.txt

二、目录文件的结构

目录也是一种文件

        每个inode都有一个号码,操作系统用inode号码来识别不同的文件

        文件系统内部不使用文件名引用文件,而是使用inode号码来识别文件。对于文件系统来说,文件名只是inode号码便于识别的别称,文件名是目录的数据。

三、Inode的号码

(一)文件系统访问文件的步骤:

1.用户在目录中看到要访问的文件名

2.通过目录的数据找到这个文件名对应的inode号码

3.通过inode号码,获取inode信息(文件的元信息)

4.根据inode信息,找到文件数据所在的block,读出数据

inode一般为128字节或256字节,每个inode中都记录着文件所使用的block号,每条记录着block号的信息占用4字节。

inode中关于block号的记录一共包含有12个直接、1个间接、1个双间接和1个三间接。

        12个直接连接,共占用48字节磁盘空间,包含着12个直接指向block号的信息, 若此文件系统默认的block大小为4KB,则仅仅可以指向12*4=48KB大小的文件内容。

        然而我们的文件若较大时,则需要使用到更多的block,肯定要多于12个block,进而有间接、双间接和三间接。

        间接:指的是inode中所记录这4字节的内容,所指向一个block,这个block中存放的不是真是的文件内容,而是真实文件所存放位置的block号信息,若每个block大小为4KB,那么可以存放1024个block号信息,1个间接可以存放的文件大小为1024*4=4096KB

        双间接:则可以存放更大的文件内容,即在间接的基础上再进行间接,若此时block 大小为默认的4KB,则1个双间接可以存放的文件内容大小为:1024*1024*4=4096MB

        三间接:即在双间接的基础上在进行间接,若此时block大小为默认的4KB,则1个三间接可以存放的文件内容大小为:1024*1024*1024*4=4096GB

        也就是说,在一个block大小默认为4KB的文件系统中,一个文件最大存储可以达到48KB+4096KB+4096MB+4096GB,约为4100GB。

(二)查看文件的inode号码

ls -i 文件名

stat 文件名

示例:

[root@localhost ~]# ls -i aa.txt

[root@localhost ~]# stat aa.txt

(三)文件存储位置对照

SuperBlock 里面存储的文件系统所有Inode、block的相关信息。

        当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的inode,看该用户是否具有访问这个文件的权限。如果有,就指向相对应的数据block; 如果没有过,就返回Permission denied(拒绝访问)

(四)删除指定inode号所对应的文件

格式:find ./ -inum inode号 -exec rm -i {} \;

示例:当文件名中包含特殊符号时我们可以删除其inode号达到删除文件的目的

[root@localhost ~]# touch 'a b`_c  de ! 4|'.txt

[root@localhost ~]# ls -li

[root@localhost ~]# find ./ -inum 34097384 -exec rm -i {} \;

rm: 是否删除普通空文件 “./a b`_c  de ! 4|.txt”?  y

[root@localhost ~]# ls

从/root/目录下查找3天内修改的文件,并复制到/tmp下

[root@localhost ~]# ls /tmp/

[root@agent ~]# find /root/ -mtime -3 -a -type f  -exec cp {} /tmp \;

(五)查看文件系统的inode与block的信息

df -i 设备名(文件系统已挂载时查询,查询inode总数与已用数量)

dumpe2fs -h 设备名(文件系统无需挂载)

tune2fs -l 设备名(文件系统无需挂载)

示例:

[root@localhost ~]# df -i /data

[root@localhost ~]# umount /data

[root@localhost ~]# dumpe2fs -h /dev/sdb1

[root@localhost ~]# tune2fs -l /dev/sdb1

(六)格式化时指定文件系统的inode个数与block大小

mkfs.ext4 -N inode数 -b 块大小(单位字节) 设备名

示例:inode数设定为60000个,block大小为1KB

[root@localhost ~]# mkfs.ext4 -N 60000 -b 1024 /dev/sdb1

[root@localhost ~]# dumpe2fs -h /dev/sdb1 | grep -i "inode count"

[root@localhost ~]# dumpe2fs -h /dev/sdb1 | grep -i "block size"

(七)解决inode耗尽导致的磁盘故障

1、删除不使用的文件,配置磁盘配额

[root@localhost ~]# find /data -mtime -1 -exec rm -rf {} \;

[root@localhost ~]# rm -rf `find /data -mtime -1` `` = $()

[root@localhost ~]# find /data -mtime -1 |xargs rm -rf  

2.将文件备份,重新格式化此文件系统,指定较多的inode个数

[root@localhost ~]# df -i /test

[root@localhost ~]# touch /test/{1..28213}.txt

[root@localhost ~]# touch /test/hello.txt

使用第二种方法:

[root@localhost ~]# mkdir /backup

[root@localhost ~]# mv /test/* /backup/

[root@localhost ~]# umount /test

[root@localhost ~]# mkfs.ext4 -N 50000 /dev/sdb2 &> /dev/null

[root@localhost ~]# mount /dev/sdb2 /test

[root@localhost ~]# mv /backup/* /test

mv: overwrite `/test/lost+found'? y

[root@localhost ~]# touch /test/hello.txt

四、Linux文件系统软硬链接原理

(一)硬链接(hard link)

方法:ln 源文件 目标文件

特点:

        硬链接指向的文件inode号,新生成的硬链接文件的inode号与源文件的inode号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。

示例:

[root@localhost ~]# df -h /data

[root@localhost ~]# cd /data

[root@localhost data]# ln a.txt hardlink-a.txt

[root@localhost data]# ls -li

删除源文件,硬链接不受影响

[root@localhost data]# echo "abc" > a.txt

[root@localhost data]# rm -rf a.txt

[root@localhost data]# cat hardlink-a.txt

(二)软链接(soft link)

方法:ln -s 源文件或目录 目标文件或目录

特点:

软连接又被称为符号链接

        软链接指向的文件名,新生成的软链接文件的inode号与源文件不同,目录也可以生成软链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径,读取时系统会自动导向源文件路径,根据源文件找到文件内容,但当源文件移动或重命名时,软链接将报错。

示例:

[root@localhost data]# echo "soft test" > a.txt

[root@localhost data]# ln -s a.txt softlink-a.txt

[root@localhost data]# ll -i

重命名源文件,硬链接不受影响,但软链接失效

[root@huyang1 data]# ls -li

[root@huyang1 data]# ln a.txt hardlink.txt

[root@huyang1 data]# ls -li

[root@localhost data]# mv a.txt b.txt

[root@localhost data]# ls -li

[root@huyang1 data]# cat b.txt

[root@huyang1 data]# cat hardlink.txt

[root@localhost data]# cat softlink-a.txt 

(三)硬链接与软链接的对比

硬链接

软链接

指向

inode号

文件名

inode号是否相同

相同

不同

是否可以针对目录

不可针对目录

可以针对目录

可否跨文件系统

不可跨文件系统

可跨文件系统

删除、重命名、移动源文件

不受影响

失效

创建命令

ln 源文件 目标文件

ln -s 源文件或目录 目标文件或目录

猜你喜欢

转载自blog.csdn.net/2302_77582029/article/details/132561165