LVM 快照存储要求

LVM 快照存储要求

我对 LVM 快照的存储和工作方式有点困惑。据我所知,当您使用 LVM 创建快照时,它不会占用任何空间,但当您对系统上的文件进行更改时,您的 LVM 快照卷的大小将会增加。如果它们的大小超过其分区的大小,它们将被“删除”并消失,这就是为什么它不是一个好的备份解决方案(除了它也在同一物理系统上这一事实之外)。

LVM快照存储的工作原理如下图所示吗?

在此输入图像描述

我试图展示一个场景,其中根文件系统分区大部分为空,并且有少量数据显示为紫色。我创建了一个名为“快照 1”的快照分区,当我对原始文件进行更改时,该分区会逐渐填满,尽管我很确定 LVM 是基于块的而不是基于文件的。

问题

这是否意味着,如果我有一个 100 GB 的根分区,仅存储 20GB 的数据,如果我给它 21GB 的大小,我就永远不需要担心我的快照分区溢出?或者快照分区必须与根分区一样大或更大分割因为它还记录了未使用空间(0 的块)的差异?

答案1

不幸的是,存储要求并不是那么简单:

COW 快照是在指定大小时创建的。该大小是从 VG 中的空间分配的,是在对源或快照进行写入时可用于保存 COW 块的空间量。 选择的大小应取决于预期的写入量;往往原产LV的20%就够了。如果COW空间不足,可以使用extend来扩展(也可以使用lvreduce来缩小)。 COW 快照 LV 大小的一小部分用于跟踪 COW 块位置,因此完整大小不可用于 COW 数据块。使用 lvs 检查使用了多少空间,并查看 --monitor 自动扩展大小以避免空间不足。 - 男人lvcreate

请注意手册页没有提及任何细节:

...通常是原产LV的20%足够...A小数量使用 COW 快照 LV 大小...

我从中得出的结论是,没有特定的方法可以准确计算快照 LV 需要多大的大小才能确保它永远不会耗尽空间。

本质上,由于快照 LV 在更改之前存储原始块,为了使其永远不会耗尽空间,它必须足够大以容纳原始 LV 加上一个稍微多一点这样它就可以跟踪 COW 块的位置。

相关内容