什么是LFS

LFS即日志结构文件系统(log-structured file system)。日志结构文件系统是一种只允许顺序写的文件系统。原始的LFS叫做Sprite(精灵) LFS,是 Sprite 网络操作系统的一部分。

为什么要将文件系统设计成日志结构的

LFS的基本假设是IO 瓶颈在写不在读,因为文件在内存有 cache。

在写入许多小文件时,将许多同步小写转化成一个大的异步写,从而充分利用磁盘带宽。

日志结构文件系统和日志型文件系统的区别

日志型文件系统的 log 仅用作临时存储,在崩溃恢复时使用

日志结构文件系统将 log 作为主要存储区域,并且磁盘上没有其他的结构(这是原始的 LFS)

怎样实现LFS

仅允许顺序写

将文件的改动暂存在 file cache 中,并向磁盘一次将所有的数据顺序写到 log 中(包括数据及元数据)。

支持随机读

每一个文件有对应的 inode,inode 包含访问控制等信息以及指向起始 10 个数据块地址的指针、指向其他数据块地址或者其他 indirect block 的 indirect block。

空闲空间的管理

垃圾回收

将一些 segment 读入内存,识别有效数据,并将有效数据写回干净的 segment

每个 segment 都有一个或多个 segment summary block,包含一个块属于哪个文件(ino)以及 index(为了 GC 修改映射关系)。用于识别有效数据(trivial: 检查文件 index 处的指针是否指向这个块;sprite lfs:检查版本号)