在写入快照复制时发生写请求时会发生什么?

问题描述:

我正在阅读一些操作系统的概念,并偶然发现了这一点。在写入快照复制时发生写请求时会发生什么?

从我的理解,当你把一个快照,

写时复制将记录文件系统(元数据)的当前状态。 这会导致系统轻微停顿(几乎是瞬间的)。

如果文件系统在未修改的文件上收到读取请求,我们正在读取快照元数据,并将其重定向到原始副本。

当文件系统收到写请求时会发生什么?它是否更新原始文件系统和复制的文件系统?

这很大程度上取决于您所谈论的是什么样的快照。

如果您正在讨论Btrfs或ZFS等写入时复制文件系统中内置的快照类型,那么在快照上写入请求“正常工作”是文件系统工作方式的副作用:当新数据被写入,它们被写入新的位置,并且写入新的元数据以反映这一点。但是新数据和元数据只能写入一个快照,而不能写入其他数据。一旦写入新数据和新元数据,写入的快照将释放旧副本 - 但其他快照仍在使用该副本,因此它们并未实际发布。最终结果是这些数据不再在两个快照之间共享。我使用术语“快照”和“其他快照”,因为在这种类型的系统中,一旦拍摄快照,快照和原始照片都是平等的。

如果您正在讨论LVM快照等内容,那么文件系统实际上完全不知道发生了什么。就它而言,它是写给一个普通的块设备。在这种情况下,LVM必须管理哪些底层块仍然在快照和快照的原点之间共享,哪些底层块已经分离。快照存储发散的块的副本(或者因为它们写入快照或源设备中)。