linux日志文件系统

问题

看到关于日志文件系统的优点时,不禁有些疑惑:日志文件系统中难道日志就不会丢失么?既然日志读写速度如此之快,为何不把所有文件作为日志进行读写?查询资料特整理如下。

首先回答问题,日志文件也有可能丢失,系统中通过checksum的方法来检测日志文件的完整性。不过既然日志都有可能丢失,为何还是采用日志文件的方法?自然是因为日志文件系统相比于之前的系统可以大大提高数据的安全性。

1. unix文件系统有哪些部分?

  • inode: 存储文件信息,包括占用空间、访问权限等
    [猜测] 应该是搜索的链表节点
    [update] index_node是用来描述文件的数据结构,记录了文件的位置信息、属性、申请的空间大小等。
    此外节点最大数量是固定的,用来限制文件系统的最大文件量。
    df  -i #可获得系统节点使用情况
    ls -i file_name #可获得文件节点
    
  • directory: 树状结构,存储文件名称和inode
  • 硬盘自己的存储结构,记录当前使用情况。[猜测]使用方法类似于堆空间的申请

节点和目录解释:
- indoe仅记录文件元数据
- 目录仅记录文件名称和inode,猜测是树结构,那么还有指向子节点和父节点的指针
- 文件系统进行搜索时通过搜索目录结构,最后获得inode节点来进行访问。
[感想]这里有点像编译时的字符串表和重定位表,这种思想有点意思诶。

2. 旧文件系统的弊端

对文件系统的操作通常需要很多步骤来完成。举例来说,在unix系统中删除文件需要三步:

  • 删除文件目录
  • 释放节点inode
  • 释放硬盘空间(猜测应该是文件占有的空间)

如果在上述步骤执行过程中发生断电、系统崩溃会使得当前操作失败,导致各种数据错误(e.g. 目录中不存在的文件占用inode和硬盘空间)。

3. 日志文件系统

由于上述弊端,前人采用了日志文件来记录对数据操作的完成状态,当发生特殊情况时可以通过查询日志来确定数据操作成功与否并进行数据恢复。

[Q]都是写入数据,为什么日志文件就会快上许多?
[猜测]首先日志文件存储在一个容易访问的位置,而硬盘中的其他数据可能就要通过一定时间的查询才能进行操作。

日志文件系统的三种策略:

  • writback回写模式:仅有元数据(metadata用来描述数据的数据,比如创建时间、访问权限)被记录到日志,数据块直接写到硬盘上。
  • ordered顺序模式: 先写入数据,再记录元数据
  • data数据模式: 将数据和元数据都记录到日志中

日志文件系统进行恢复的时候可能发生三种情况:

  • 日志文件损坏:该操作尚未完成写入日志,无法获得操作信息,故忽略该行为
  • 日志文件完整但操作未完成:继续操作
  • 日志文件完整且已完成

你可能感兴趣的:(linux)