学向勤中得,萤窗万卷书。这篇文章主要讲述深入理解LINUX文件系统相关的知识,希望能为你提供帮助。
inode与block概述文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block(块)连续的八个扇区组成一个block(一个块是4k大小)是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
文件数据包括实际数据与信元信息(类似文件属性)。文件数据存储在“块“中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域叫做inode。因此,一个文件必须占用一个inode,并且至少占用一个block。
inode不包含文件名。文件名时存放在目录当中的,linux系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名知识inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
所以,当用户在linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据,如果无,告知没有权限。
inode(索引节点):中文译名为“索引节点”,也叫i节点,用于存储文件元信息。
文章图片
inode包含文件的元信息(不包含文件名)1、文件的字节数,2、文件拥有者的User ID,3、文件的Group ID,4、文件的读、写、执行权限,5、文件的时间戳。
查看文件名对应的inode号码有两种方式:ls -i 文件名
文章图片
【深入理解LINUX文件系统】stat 文件名
stat查看inode号的信息时候有三个时间:
atime(accesstime):当使用这个文件的时候就会更新这个时间
mtime(modification time):当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。
ctime(status time):当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time,只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。
文章图片
inode也会消耗磁盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。
通常情况下不需要关注这单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行" df -i" 命令即可查看每个硬盘分区对应的inode总数和已经使用的inode数量。
由于inode号码与文件名 分离,导致linux系统具备以下几种特有的现象:
1、文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用。
2、移动文件或重命名文件,只是改变文件名,不影响inode号码;
3、打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。
4、使用 vi 编辑器修改文件数据保存后,会生成一个新的inode号码。
目录文件的结构
目录也是一种文件 目录文件的结构 |
文件名1 | inode号码1 |
---|---|---|
文件名2 | inode号码2 |
linux系统内部不适用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
文章图片
用户通过文件名打开文件时,系统内部的过程
1、系统找到这个文件名对应的inode号码
2、通过inode号码,获取inode信息
3、根据inode信息,找到文件数据所在的block,读取数据
文章图片
删除某一个inode号的两种方法
find ./ -inum 52305120 -exec rm -i {}\\;
find ./ -inum 52305120 -delete
实验 实验一:inode节点耗尽故障处理使用fdisk创建分区/dev/sdb1,分区大小20M即可
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkdir /test
mount /dev/sdb1 /test
df -i==//模拟inode节点耗尽故障==
for ((i=1; i< =7680; i++)); do touch /test/file$i; done
或者使用touch {1..7680}.txt
df -i
df -hT
/删除文件恢复
rm -rf /text/*
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
实验二:恢复EXT类型的文件编译安装extundelete软件包
安装依赖包
yum -y install e2fsprogs-devel e2fprogs-libs==//一定要安装这两个依赖包==
编译安装 extundelete
cd /text
wgethttp://nchc.dl.sourceforge.net/project/extundelete/0.2.4/extundelet-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=usr/local/extundelete & & make & & make install
ln -s /usr/local/extundelete/bin/* usr/bin/
echo 1 > a
echo 2 > b
echo 3 > c
echo 4 > d
ls
extundelete /dev/sdc1 --inode 2==//查看文件系统/dev/sdc1下存在那些文件,i节点是从2开始的,2代表该文件系统最开始的目录。==
rm -rfa b
extundelete /dev/sdc1 --inode 2
cd ~
umount /test
extundelete /dev
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
实验三:恢复XFS类型的文件 xfsdump 命令格式
xfsdump-f备份存放位置要备份的路径或设备文件
xfsdump 备份级别(默认为0)
0:完全备份
1-9:增量备份
xfsdump 常用选项
-f:指定存储目的地
-L:指定转储会话的标签
-M:为第一个媒体对象指定一个标签(例如,tape car‐tridge)在会话期间写入相应的目的地。
-s:将转储限制为包含在指定路径名中的文件
模拟删除并执行恢复操作
文章图片
文章图片
文章图片
文章图片
文章图片
推荐阅读
- SecureCRT输入指令后出现中文乱码
- #私藏项目实操分享# iframe 在 SAP 三款产品中的三个应用场景
- ifcfg-ens38配置文件在网卡目录下找不到
- 大厂算法面试之leetcode精讲9.位运算
- #yyds干货盘点#Flutter 如何禁止手机横屏[Flutter专题32]
- 手机app管理系统软件开发多少钱呢(怎么开发)
- Linux的日志文件分析
- 京东方柔性OLED屏幕再下一城,OPPO旗舰盘一波
- centos6系统配置本地yum源