Linux 解析文件系统原理

Posted by Xavier Blog on December 28, 2023

“Yeah It’s on. ”

解析文件系统原理

Inode and Block 概述

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

操作系统从硬盘上读取数据时,不会按照扇区的方式读取,这样读取效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block,由多个扇区的空间组成)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续八个 sector 组成一个 Block。 Block 存储文件数据。

文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户、文件所属组、文件的类型、文件的权限、文件的创建时间、文件的修改时间、文件的访问时间、文件使用的 Block 信息、文件的硬链接数、文件的大小等等属性信息。这种储存文件元信息的区域叫做 node。中文译名为“索引节点”,也叫i 节点。

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

注意:

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

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

查看文件的inode信息:stat

image-20231228100928089

英文 别称 中文翻译 何时修改 查看命令
access Atime 访问时间 读取 ls -lu
modify Mtime 修改时间 写入、修改 ls -l
change/create ctime 改变时间/创建时间 修改文件名、写入、修改、改权限、做链接 ls -lc

目录文件的结构

目录也是一种文件,每个inode都有一个号码,操作系统用inode 号码来识别不同的文件,文件系统内部不使用文件名引用文件,而是使用 inode 号码来识别文件。对于文件系统来说,文件名只是 inode 号码便于识别的别称,文件名是目录的数据。

文件系统访问文件的步骤:

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

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

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

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

查看文件的inode号码

  • ls -i 文件名
  • stat 文件名
  • find ./ -inum inode号 xargs rm -rf #删除乱码文件

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

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

  1. find ./ -inum inode号 -exec rm -i {} \; 这个命令是find命令找到文件后,对每个文件执行rm -i命令,即交互式地删除文件。这种方式会对每个文件都启动一个rm进程,如果文件数量很多,效率会比较低。
  2. find ./ -inum inode号 | xargs rm -rf 这个命令是find命令找到文件后,将所有文件的名字都传递给xargs命令,然后xargs命令将这些文件名作为rm命令的参数,一次性启动一个rm进程来删除所有文件。这种方式在处理大量文件时会更高效。

从/root/目录下查找 3 天内修改的文件,并复制到/tmp下 find /root/ -mtime -3 -a -type f -exec cp } /tmp \;

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

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

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

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

Linux 文件系统软硬链接原理

软硬连接对比

  硬链接 软连接
指向 inode号 文件名
inode号是否相同 相同 不同
是否可以针对目录 不可针对目录 可以针对目录
可否跨文件系统 不可跨文件系统 可跨文件系统
删除、重命名、移动源文件 不受影响 失效
创建命令 ln 源文件 目标文件 ln -s 源文件或目录 目标文件或目录