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

Unix 了解卷影分页及其与日志文件系统的区别,unix,filesystems,zfs,journaling,Unix,Filesystems,Zfs,Journaling,我正试图很好地掌握类unix文件系统中的影子分页;你可能在或中看到的东西。在影子分页中,当一个人想要对一个页面进行更改时,一个不同的页面或“影子页面”被写入。操作完成后,即提交所有内容后,将写出阴影页,替换旧页。这是对阴影分页的正确(尽管是高层次)理解吗 那么,卷影分页与日志文件系统有何不同?他们看起来很相似 谢谢你抽出时间 两种系统都允许您通过不同的机制提供原子性/一致性: 当您修改某些内容时,卷影分页总是分配一个新块,当一个块被覆盖时,它的旧副本将变为空闲,因为任何其他活动文件系统块都不会

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

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


谢谢你抽出时间

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

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

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

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

可能写时拷贝的最大缺点,特别是对于旋转磁盘而言,是它倾向于压缩数据,导致数据变得非常零碎,因此在频繁更新的文件的大顺序读取过程中需要更多的磁盘搜索。ZFS有这个问题,我认为后来的一些写上复制系统通过将逻辑块地址映射到物理地址的中间层来解决这个问题,从而允许对数据进行碎片整理