一、文件与存储系统的inode与block
1.1、硬盘存储
- 最小存储单位:扇区(sector)
-
- 每个扇区大小:512字节
1.2、文件存取
- 最小存取单位:块(block)
- 连续八个扇区组成:块(block)
-
- 每个块大小:4K
- 文件数据:实际数据与元信息
- 操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
- 文件数据包括实际数据与元信息(类似文件属性),文件数据存储在“块"中
1.3、inode
- 定义:存储文件元信息的区域
- 包含:创建者、创建日期、文件大小、文件权限等的区域
- 特点:
-
- 一个文件必须占用一个inode
- 格式化文件系统时确定inode的总数
- 至少占用一个block
- 不包含文件名,文件名是存放在目录当中的。
元信息包括
- 文件的字节数
- 文件拥有者的userid
- 文件的groupid
- 文件的读,写,执行权限
- 文件的时间戳
1.4、文件名与inode
- 文件名存放位置:目录
- 译名为"索引节点",也叫i节点
- inode号码:操作系统识别文件的唯一标识,一个文件必须占用一个inode,并且至少占用一个block。
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。
- 访问文件流程:
- 根据文件名查找inode号码
- 通过inode号码获取inode信息
- 检查用户权限
- 指向数据block并读取数据
1.4.1、硬盘分区后的结构
文件夹的indoe号中包括当前文件夹中文件名字和文件的indoe号
先确定文件夹后再通过indoe找到block,如果一个block放不下数据,则可以占用多个block.
例如,有一个10kb的文件需要存储,
则会占用3个block(默认一个是4k),虽然最后一个block不能占满,
但也不能再放入其他文件的数据。
这3个block 有可能是连续的,也有可能是分散的,所以会有磁盘碎片。
1.4.2、访问文件的简单流程
1.5、Linux系统特点
- 一切皆文件
- 目录也是一种文件
1.6、查看文件名对应的inode 号码有两种方式
- ls -i 文件名
- stat 文件名
很显然stat看的更详细一些
1.7、linux系统文件三个主要的时间属性
- ctime(change time)
最后一次改变文件或目录 (属性)的时间
- atime(access time)
最后一次访问文件或目录的时间
- mtime(modify time)
最后一次修改文件或目录(内容)的时间
1.8、inode 占用
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。
一个是数据区,存放文件数据,
另一个是inode区,存放inode所包含的信息。
每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行"df -i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。
inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%。
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。可直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。
1.8.1、实验1
先创建大量空文件
for ((i=1; i<=8680; i++)); do
touch /test/file$i
done
或者
touch {1..8680}.txt
i占用满
但是磁盘空间还有
当再创建其他的的时候