[英]Understanding shadow paging and how it differs from journaling file systems
这两个系统都允许您通过不同的机制提供原子性/一致性:
当你修改某些东西时,影子分页总是分配一个新块,当一个块被覆盖时,它的旧副本变得空闲,因为任何其他活动文件系统块都不会引用它。 崩溃一致性通过树上的递归元数据更新来实现——您更新叶块所在的位置(在修改期间复制到其他地方),并且必须更新其父块(在修改期间复制到其他地方)等。 文件系统的新版本当更新到树根的整个链时,所有修改都变得可见。
日志允许您就地修改块,但您仍然必须将它们写入两次:一次写入日志以标记您的意图(并在需要时提供多次更新原子性,例如实现将文件从一个目录移动到另一个目录),以及然后一次在日志本身。 由于您正在就地修改,对于同一块的覆盖,除了您覆盖的特定块之外,您通常不必更新许多其他文件系统树块,因为在您编写它们的新版本时这些块并没有改变位置。
最大的区别是影子分页/写时复制使得在文件系统中实现快照变得非常容易——你需要做的就是跟踪文件系统树根的旧版本,以及它当时引用的任何东西. 在日记中,这要困难得多,因为任何块都可以随时被覆盖,而且日记不是无限的——通常它会很快被覆盖,否则它会占用大量磁盘空间。
写时复制的最大缺点,特别是对于旋转磁盘,可能是它倾向于瑞士奶酪你的数据,导致它变得非常碎片化,因此在频繁更新的文件的大量顺序读取期间需要更多的磁盘搜索。 ZFS 有这个问题,我认为后来的一些写时复制系统通过一些中间层将逻辑块地址映射到物理地址来解决这个问题,以允许对数据进行碎片整理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.