理解文件系统
大部分文件都未被进程打开,都在磁盘中存储,那么这些文件是否要被管理呢,对于这些文件的核心工作是什么?
--要,未打开文件会按规律保存,方便用户随时读取
--核心工作在于快速定位文件——路径
(相当于柜子的暂时还用不上的衣服,不会随便乱摆放,而是按一定规律储存,到换季时再相应的拿出衣服)
文件的管理工作:
1.打开的文件进行管理
2.没有被打开的文件也要在磁盘中进行管理
磁盘
Head(磁头)track(磁道)sector(扇区)
CHS定位法:磁头摆动定柱面 磁盘转动定扇区
LBA(Logical block address) 4kb
结论:对于存储设备的管理,在OS层面,转换成为对数组的增删查改
块组 Ext2
块组会存储我的文件信息和很多文件管理相关的数据
我的文件就包括文件属性和文件内容,它们都是数据,内容和属性分开存储。
使用块组之前,管理数据就已经写入了,这种行为叫格式化
inode编号
每个文件都有自己的inode编号,在分区里有着唯一性,在Lliux中识别文件不是靠文件名,靠的是inode编号
inode Table 节点表
存放文件属性,如文件大小,所有者,最近修改时间等
inode table相当于inode inode_table[n]数组
Date blocks 数据区
存放文件内容 一个小块是4kb
一个block数组一般为15,那么只有60kb,内存块会不会不够用?
其中0-12为直接映射,13为间接映射,13中可以继续储存位图的结构,14三级映射
inode Bitmap inode位图
每个Bit表示该inode是否被使用
32000个inode 只需要4000字节即可
block Bitmap 块位图
100000个块内存
删除文件要改变什么?
把block Bitmap和inode BitMap由1至0。
Group Descriptor Table 描述块组信息
Super Block 超级块
管理整个分区的的信息
重新理解目录
目录也是文件,那么他的数据块里会存放什么?
自己目录会直接保存文件名和inode的映射关系,所以同一个目录下不允许存放同名文件
重新理解找文件
要找文件,就要先找到文件的目录,再根据文件名和inode的映射关系找到inode,再根据inode_table找到相应的属性
软硬连接
软连接
ln -s log log.sort.link
快速定位文件
什么是软连接?
类似于windows的快捷方式
软连接指向目标文件的路径
硬连接
ln hello hello.hard.link
由inode可知 软连接时独立的文件,而硬文件不是,他没有独立的inode编号
硬链接不是一个独立的文件,是在指定目录内部的一组映射关系:文件名<=>inode
将hello删除,硬链接依然在,那什么时候文件才被真正的删除呢?
没有文件名和inode映射时,再文件系统层面,目标文件怎么知道没有文件名指向我了呢?inode内部有引用计数,表明有几个文件名映射关系
为什么新目录的映射关系有2对?
dir内部有个.目录 inode跟dir相同
我在目录中新增一个目录?为什么映射关系变为3对?
因为新增目录有个上级目录,inode与dir相同