回顾:
1. 文件系统实现
- 连续的
- 链表
- FAT
- 索引节点
2. 文件系统范例(在实现之上)
- 日志结构文件系统(提高效率)
- 日志记录(提高弹性和健壮性)
- 虚拟文件系统(提高灵活性和集成)
本章小结:
- 文件系统恢复
- 磁盘检查工具(Scandisk)
- FSCK
- 磁盘碎片整理
- Linux中的文件系统
恢复和压缩
文件系统一致性
一致性检验
- 日志记录大大降低了文件系统中出现不一致的可能性。如果发生崩溃,日志将存储未运行的操作。
- 然而,它仍然可能得到一些不一致(例如,数据块没有刷新到驱动器,典型的情况在USB驱动器上!)。
- 这可能会有问题,特别是对于结构块,如i节点、目录和空闲列表
- 系统实用程序(System utilities)可用于恢复文件系统,例如:
- 磁盘检查工具
- FSCK
- 有两种主要的一致性检查:块和目录。
检查块一致性
- 块一致性检查块是否以正确的方式分配/使用
- 通过建立两个表来检查块的一致性:
- 表1计算一个块在文件中出现的频率(基于i-nodes)
- 表2统计了一个块在空闲列表中出现的频率
- 一致性文件系统的每个块在两个表中都有一个1
- 通常,这是一个非常缓慢的过程,甚至需要几个小时(并且在卸载分区的情况下运行)。
恢复块一致性
- 丢失的块:它在任何表中都不存在 ⇒ 添加到空闲列表中
- 一个块在空闲列表中被重复计算(“灾难”即将发生)⇒ 重新构建自由列表
- 一个块存在于两个或多个文件中
- 删除一个文件会导致将该块添加到空闲列表中
- 删除这两个文件将导致在空闲列表中出现双条目
- 解决方法:使用新的空闲块并复制内容(文件仍有可能损坏)
FSCK算法:
1. 遍历所有i节点
-检索block
-增加计数器
2. 遍历空闲列表
-增加空闲块的计数器
恢复I-node一致性
检查目录系统:i-node计数是否正确?
哪里会出错呢?:
- I-node计数器大于包含该文件的目录数
- 删除该文件将使i-node计数器减少1
- 由于计数器将保持大于1,因此i-node /磁盘空间不会被释放以供将来使用
- I-node计数器小于包含该文件的目录数
- 删除文件将(最终)将i-node计数器设置为0,而文件仍然被引用
- 文件/ i-node将被释放,即使文件仍在使用中
1. 递归遍历目录层次结构
- 查看文件特定的计数器
- 即每个文件与一个计数器相关联
2. 一个文件可能出现在多个目录下
- 比较文件指标和i-node指标
- 必要时更正
文件系统碎片整理(Defragmentation)
压缩
- 开始时,所有空闲的磁盘空间都在一个连续的单元中。
- 过了一段时间,创建和删除文件后,磁盘可能会严重碎片化(到处都是漏洞和文件)。
- 碎片整理(Defrag)实用程序使文件块连续(非常慢的操作),并在磁盘上的一个或多个大的连续区域中释放空间。
- Windows用户应该定期运行这个程序,除了在SSD上。
- Linux (ext2/3)受碎片的影响较小。
- 对SSD进行碎片整理是适得其反的(在性能和SSD磨损)。
Linux文件系统历史记录
- Minix文件系统:最大文件大小为64MB,文件名限制为14个字符
- 扩展文件系统(extended file system,extfs):文件名长度为255个字符,最大文件大小为2GB
- “ext2”文件系统:更大的文件,更大的文件名,更好的性能
- “ext3-4”文件系统:日志等。
第二个扩展文件系统(ext2)
- 第二个扩展文件系统(ext2)是Linux中最流行的文件系统之一。
- 主要目标:
- 通过在磁盘上均匀地分布目录,提高MINIX和extfs文件系统的性能。
- 允许更大的文件名和大小,改进目录实现
标准Unix文件系统 vs. 第二个扩展文件系统:

目录项:
- 超级块(superblock)包含文件系统信息(例如i节点的数量,磁盘块)
- 组描述符包含位图位置、空闲块数量、i节点和目录
- 数据块位图和i节点位图,用于跟踪空闲磁盘块和i节点(Unix使用列表)
- 包含文件和磁盘块信息的i-node表
- 包含文件和目录块的数据块
ext2分区被划分为几个块组,以便:
- 如果可能的话,通过将i节点和文件以及父目录和文件存储在同一个块组中来减少碎片
- 减少寻道时间并提高性能
所有块组具有相同的大小并按顺序存储(这允许直接索引)。
604

被折叠的 条评论
为什么被折叠?



