bri*_*nts 3 backup lvm snapshot
我一直在试验 LVM 以及如何使用它来管理我的 NFS 服务器上的数据。通过我读过的关于快照的所有内容,我仍然不确定它们在现实生活中的表现。如果快照只是一堆指向原始数据的指针,为什么需要在快照中分配空间?如果修改源上的文件也会通过写时复制触发对快照的修改,那么快照的意义何在?我认为快照应该是原始的“静态”时间点。
我的期望是这样的:
$ ls origin-data
> file1 file2
$ snapshot origin-data to origin-data-snapshot
$ modify origin-data and add new stuff
$ ls origin-data
> file1-modified file2 file3 file4
$ ls origin-data-snapshot
> file1 file2
$ sizeof origin-data-snapshot
> 0 bytes because they're all just pointers to blocks in origin-data!
Run Code Online (Sandbox Code Playgroud)
如果我误解了,请解释并解释如何以我期望的方式使用快照(例如 git 提交、静态、不变、不关心所做更改的某个时间点的数据指针到原点)。是否涉及 RO 或 RW 快照?
更新:我一直在试验一些测试分区,并且有了更多的理解。在挂载 origin 和它的快照时, origin 中的新文件显然会出现在类似df -h但不在快照中的东西中。同时,lvdisplay显示“分配给快照”的百分比在增加。使用 10mb 测试文件和 1gb 测试分区,我确切地看到了这个百分比与我的数据相关的行为,但为什么必须如此?为什么新数据显示在快照上而不是源上?我认为这些块的行为类似于硬链接,因为旧数据保留在那里,因为快照指向它,而在它们旁边创建新块,因为原点指向新的和修改过的块。不?
快照的成本不可能是零字节。当源卷中的块发生更改并且您有快照时,必须在修改之前制作原始块的副本 - 原始数据必须在某个地方可用,以便可以从快照访问它。
这就是快照大小(加上一些元数据):已在源中更改的块的原始副本。
请注意,这可能是一个“会计技巧”:实现可以选择不覆盖磁盘上的原始块,而是将新数据存储在其他地方并更新源块列表(或它用于跟踪的任何内容)。在这种情况下,快照根据您的定义是“静态的”。但是,每当修改源块时,它仍然会导致已分配块的总数增加。此空间使用量应该(是)根据快照进行计算。
这对于 RO 和 RW 快照都是正确的,除了在 RW 情况下它有点复杂(如果源中的原始块也被修改,您不想覆盖在快照中修改的块,例如)。