在写入时快照副本中发生写入请求时会发生什么?

时间:2013-06-12 20:41:28

标签: operating-system filesystems snapshot copy-on-write

我正在阅读一些操作系统概念,并偶然发现了这一点。

根据我的理解,当您拍摄快照时,

copy on write将记录文件系统的当前状态(元数据)。 这将导致系统轻微停止(几乎是瞬间)。

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

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

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于你所谈论的快照类型。

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

如果您正在谈论像LVM快照这样的东西,那么文件系统实际上完全不知道发生了什么。就它而言,它正在写入常规块设备。在这种情况下,LVM必须管理快照和快照的起源之间仍然共享哪些底层块以及哪些底层块已经分歧。快照存储已分叉的块的副本(因为它们是在快照或原始设备中写入的)。