代码之家  ›  专栏  ›  技术社区  ›  peachykeen

了解阴影分页及其与日志文件系统的区别

  •  0
  • peachykeen  · 技术社区  · 6 年前

    我正在尝试在类Unix的文件系统中很好地掌握阴影分页;您可以在中看到 ZFS WAFL . 在阴影分页中,当一个人想要更改一个页面时,一个不同的页面或“阴影页面”会被写入。操作完成后,即提交所有内容后,将写出阴影页,替换旧页。这是对阴影分页的正确理解吗(尽管是高层次的)?

    那么,卷影分页与日志文件系统有什么不同呢?它们看起来很相似。

    谢谢你抽出时间来!

    0 回复  |  直到 6 年前
        1
  •  1
  •   Dan    6 年前

    这两个系统都允许您通过不同的机制提供原子性/一致性:

    • 当您修改某些内容时,卷影分页总是分配一个新的块,当一个块被覆盖时,它的旧副本将变为空闲的,因为任何其他活动的文件系统块都不会引用它。崩溃一致性来自于树上的递归元数据更新——更新叶块所在的位置(在修改过程中复制到其他位置),并且必须更新其父级(在修改过程中复制到其他位置),等等。当整个链到根目录时,所有修改的文件系统的新版本都变为可见的树的已更新。

    • 日志记录允许您在适当的位置修改块,但您仍然必须将它们写入两次:一次写入日志,标记您的意图(并在需要时提供多更新原子性,例如实现将文件从一个目录移动到另一个目录),然后一次写入日志本身。由于您正在就地修改,对于同一块的覆盖,除了您覆盖的特定文件系统树块之外,通常不需要更新其他许多文件系统树块,因为在编写新版本的文件系统树块时,这些块不会改变位置。

    最大的区别是,卷影分页/写时复制使在文件系统中实现快照变得非常容易——您所需要做的就是跟踪文件系统树根的旧版本,以及它当时引用的任何内容。在日志记录中,这要困难得多,因为任何块都可以在任何时候被覆盖,日志也不是无限的——通常会很快被覆盖,因为否则它将占用磁盘上的大量空间。

    写时复制的最大缺点,尤其是对于旋转磁盘,可能是它会使数据变得非常零碎,因此在频繁更新的文件的大规模连续读取过程中需要更多的磁盘查找。zfs有这个问题,我认为稍后的一些写上拷贝系统解决了这个问题,通过让一些中间层将逻辑块地址映射到物理地址来允许对数据进行碎片整理。