1. 磁盘
最小基本单位 扇区
机器磁盘的io效率 (读和取)
2. 文件系统
对磁盘分区 ,最小的文件单位块组,快组内部已经划分好区域,巴拉巴拉,总之,每次使用数据,以操作系统的处理都是块级的,而这些块内部的区域已经划分好了,所以需要提前对内存格式化
一 . 创建文件
确定路径,获取
首先我已经理解了在文件系统中最小的逻辑单位是4kb 以快组位单位 而且快组内部已经被划分号区域了 ,有块组描述符: 里面放了当前块组inode表使用的起始位置,空于数据块的起始位置以便于创建文件的时候定位 位 : innode位图表: 和inode表:这也是一块内存而且是连续的:里面放的是一系列的inode的结构体指针,这个inode的结构体指针其中主要有: inode的编号,文件属性,还有databloc[num]数组,这个数组里面都是直接或者间接存放着指向块组的数据块区的索引位置,指向的数据块内容可能直接放着数据也可能是二级索引,又指向了其他的位置,举例来说 如果是二级索引: datablock数组的大小是15x4: 也就是60个下标的话那可以指向60x4个kb的块组(忽略其他区的大小因为他们很小),这些块组的也会加入指定的inode, 每一个块组有128MB的数据库大小 ,一个索引int 类型也就4字节 这里有 128 x1024x1024 /4 个索引 15个块组又可以存: 128 x1024x1024 /4 x15 个索引 每一个索引指向4kb:所以最终可以指向 : 128 x1024x1024 /4 x15 x4kb 的大小 现在这样分析就理解透彻了整个区域划分后的功能,补充的是 inode bit图它存放的是inode表inode的使用情况, 所以 我们的inode位图表 和block位图表 像一个全局变量一样来指向我们的inode和数据块(128mb) ,然后inode结构体又又来指向数据内容和结构属性。 有了这些我们可以很轻松的阐述关于创建文件和删除文件的过程,创建一个文件 通过块组描述符(确定inode和block块的起始位置) 然后遍历inode表和block表找到空于位置进行存入数据。 当我们想删数据的时候,又可以通过innode表找到修改我们的innode位图和块位图即可 不需要对数据块修改 因为删除只需要覆盖即可,
创建一个文件是要确定当前的目录路径的,每一次都要往 会递归到根目录 然后一步步的进入回到当前目录才能找到当前目录的inode 但是这样效率太慢了 linux操作系统会对你最近常用的路径信息进行缓存 叫做dentry缓存
ls -li 可以看到文件的inode
创建硬连接以后他的文件属性也是和之前一样吗
吗软链接不一样
不允许给目录建立硬连接举个例子如果我们在某一个目录建立了一个根目录的硬连接当我们用find命令的时候从根目录开始递归的访问每一个目录遇到这个硬连接的时候就会出现回路问题一直下去出现系统级别的错误
但是硬连接给目录的还有..和.因为系统建立的这两个是技术上允许也可以实习的,操作系统不相信用户但是实现这两个可以用来定位路径同时也不会出现一个问题find命令不会对.和..进行查找的