深入解析文件系统原理(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 源文件或目录 目标文件或目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/88321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 文生图技术原理

图像生成模型简介 图片生成领域来说,有四大主流生成模型:生成对抗模型(GAN)、变分自动编码器(VAE)、流模型(Flow based Model)、扩散模型(Diffusion Model)。…

【进程间通信】信号

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

JavaScript 中的箭头函数:如何使用简洁的语法

了解有关 JavaScript 箭头函数的所有信息。我们将向您展示如何使用 ES6 箭头语法,以及在代码中利用箭头函数时需要注意的一些常见错误。您将看到许多示例来说明它们的工作原理。 JavaScript 箭头函数随着 ECMAScript 2015(也称为 ES6)的发布…

爬虫逆向实战(二十七)--某某招标投标网站招标公告

一、数据接口分析 主页地址:某网站 1、抓包 通过抓包可以发现数据接口是page 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现,请求参数是一整个密文 请求头是否加密? 无响应是否加密? 通…

python进行数据分析:数据预处理

六大数据类型 见python基本功 import numpy as np import pandas as pd数据预处理 缺失值处理 float_data pd.Series([1.2, -3.5, np.nan, 0]) float_data0 1.2 1 -3.5 2 NaN 3 0.0 dtype: float64查看缺失值 float_data.isna()0 False 1 …

Linux 发行版 Debian 宣布支持龙芯 LoongArch 架构

近期,龙芯发布了 3A6000 桌面处理器,芯片的性能又一次大幅度提升,成为国产芯片的又一里程碑。 同期,LoongArch 架构的生态建设也迅速提升,开源网络引导固件 iPXE、QQ Linux 版、摩尔线程等软硬件都官宣支持龙芯 Loong…

linux 设置与命令基础(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、系统基本操作 二、命令类型 三、命令语法 四、命令补齐 五、命令帮助 六、系统基本操作命令 总结 前言 这是本人学习Linux的第二天,今天主…

leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和 1、字符串相加 class Solution:def addStrings(self, num1: str, num2: str) -> str:i len(num1) - 1 # num1的末…

软考A计划-网络工程师-必考知识点-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

听力总结易错点+口语准则

目录 听力总结易错点 where are you come from?其实是错的 杯子的大小表达 口语准则 一些常见蔬菜的英文名称: To get a lot out of 英语复述句子题 听力总结易错点 1,在section 1 ,很容易把a读成n 2. silver colored cloth 这个clo…

2023高教社杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

Java学数据结构(2)——树Tree 二叉树binary tree 二叉查找树 AVL树 树的遍历

目录 引出什么是树Tree?树的实现二叉树binary tree查找树ADT——二叉查找树Binary Search Tree1.contains方法2.findMax和findMin方法3.insert方法4.remove方法(复杂)二叉查找树的深度 AVL(Adelson-Velskii和Landis)树——平衡条件(balance c…