inode和block概述
文件数据包括实际数据与元信息
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
block (块):
存储文件数据
连续八个扇区组成一个block,一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。512*8=4096b=4k
inode (索引节点):
存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。一个文件必须占用一个inode,并且至少占用一个block。inode不包含文件名。文件名是存放在目录当中的。
Linux 系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
1、1硬盘分区后的结构
1、2用户访问文件系统内部过程
1、系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;
2、根据inode信息,看该用户是否具有访问这个文件的权限;
3、如果有,就指向相对应的数据block,并读取数据。如果没有,返回
查看文件名对应的inode 号码有两种方式:
ls -i文件名
stat 文件名
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据:另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。
通常情况下不需要关注单个inode的大小,而是需要重点关注inode.总数。inode的总数在格式化时就给定了,执行"df-i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%
1、3inode特殊作用
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用;
mkdir adh$%1
ls -i //查看inode号
find ./ -inum 25166628 -delete //通过inode号删除
或
find ./ -inum 25166628 -exec rm -i {} \;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。
find ./ -inum 52305140 -exec rm -i {} ;
find ./ -inum 50464299 -delete
vim yss.txt 不更改内容,最近访问时间改变
vim yss.txt 更改内容,最近访问、最近更改、最近改动时间都改变
更改权限,最近改动时间变化
扩展
inode节点耗尽故障处理
#使用fdisk创建分区/dev/sdb1, 分区大小30M即可
fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /test
mount /dev/sdb1 /test
df -i
#模拟inode节点耗尽故障
for ((i=1; i<=5680; i++)) ;do touch /test/file$i;done 或 i=i+1 或i+=1
touch {1…5680}.txt
df -i
df -hT
#删除文件恢复
rm -rf /test/*
df -i
df -hT