文件系统
一个简单的 Linux 指令
ls -l
依次是:模式、硬链接数、文件所有者、组、大小、最后修改时间、文件名
stat redirect.c
可见,我们使用 stat 命令会看见更多的文件相关信息,其中有几个信息我们需要详细了解;
inode
Linux ext2文件系统,上图为一个磁盘文件系统图(内核内存映像会有所不同),磁盘是典型的块设备,硬盘区被划分为若干个block。一个block的大小是由格式化的时候确定的,并且不可以更改。
Block Group
ext2文件系统会根据分区的大小划分为数个 Block Group ,而每个Block Group都有着相同的结构组成;
Super Block(超级块)
存放文件系统本事的结构信息,主要有:block 和 inode 的总量,未使用的 block 和 inode的数量,一个 block 和 inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息;
Group Descriptor Table(GDT 块组描述符)
描述块组属性信息;
Block Bitmap(块位图)
记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用;
inode Bitmap(inode位图)
每个bit 表示一个inode 是否空闲可用;
inode Table(i节点表)
存放文件属性,如:文件大小、所有者、最近修改时间等;
Data blocks(内容区)
存放文件内容;
进行如下操作:
如图所示:
创建一个新文件主要有以下4个操作:
1、存储属性
内核先找到一个空闲的 i 节点(图中263466),内核把文件信息记录到其中;
2、存储数据
该文件需要存储三个磁盘块,内核找到了三个空闲的块:300,500,800。将内核缓冲区的第一块数据复制300,下一块复制到500,以此类推;
3、记录分配情况
文件内容按照顺序300,500,800存放,内核在 inode 上的磁盘分布区记录了上述块列表;
4、添加文件名到目录
硬链接 / 软连接
软连接文件(.hard):是一个单独的文件,通过记录 源文件路径 进而访问到源文件
硬链接文件(.soft):跟源文件没有区别,通过相同的 inode 节点访问数据
删除源文件:
- 硬链接文件,连接数 -1 ,内容不变;
- 软链接文件失效;
区别:软链接文件可以跨分区建立,硬链接不可以;软链接文件可以对目录文件创建,硬链接不可以;