这是 LVM 快照的工作方式吗?

Mal*_*ist 22 linux lvm snapshot

我试图弄清楚 LVM 快照是如何工作的,以便我可以在我的文件服务器上实现它,但是我很难在谷歌上找到任何解释它如何工作的东西,而不是如何将它用于基本备份系统。

从我读过的内容来看,我认为它的工作原理是这样的:

  • 您有一个 LVM,其中有一个主分区和许多不在分区中的未分配可用空间
  • 然后拍摄快照并将其安装在新的逻辑卷上。快照应该有变化,所以第一个快照将是一个完整的副本,对吗?
  • 然后,第二天拍摄另一个快照(这个分区的大小不必那么大)并挂载它。
  • LVM 以某种方式跟踪快照,并且不会在主卷上存储未更改的位。
  • 然后你决定你有足够的快照并摆脱第一个。我不知道这是如何工作的,也不知道这会如何影响下一个快照。

有人可以纠正我的错误。充其量,我猜,我在谷歌上找不到任何东西。


视频显示

obu1:/home/jail/home/qps/backup/D# vgdisplay
  --- 卷组 ---
  VG 名称文件服务器LVM
  系统标识
  格式lvm2
  元数据区 1
  元数据序列号 3
  VG 访问读/写
  VG 状态可调整大小
  最大低压 0
  当前 LV 2
  打开 LV 2
  最大 PV 0
  当前 PV 1
  法案 PV 1
  VG 大小 931.51 GB
  PE 大小 4.00 MB
  总PE 238467
  分配 PE / 大小 238336 / 931.00 GB
  免费 PE / 大小 131 / 524.00 MB
  VG UUID qSGaG1-SQYO-D2bm-ohDf-d4eG-oGCY-4jOegU

sys*_*138 36

正如 Evan 所说,LVM 快照是写时复制快照解决方案的一个示例。它的工作原理与 Evan 暗示的有点不同,但相差不大。

当您有一个没有快照的 LVM 卷时,会按您的预期写入该卷。一个块被改变了,就是这样。

创建快照后,LVM 会立即创建一个块池。此池还包含卷的 LVM 元数据的完整副本。当对主卷进行写入(例如更新 inode)时,将被覆盖的块复制到这个新池中,并将新块写入主卷。这就是“写时复制”。因此,在拍摄快照和主卷的当前状态之间更改的数据越多,该快照池消耗的空间就越多。

挂载快照时,拍摄快照时写入的元数据允许将快照池块映射到卷(或更高级别的快照)中已更改的块。这样,当访问特定块时,LVM 知道访问哪个块。就该卷上的文件系统而言,没有快照。

詹姆斯指出了这个系统的缺陷之一。当您有同一个卷的多个快照时,每次写入主卷中的块时,您可能会触发每个快照中的写入。这是因为每个快照都维护自己的已更改块池。此外,对于长快照树,访问快照会导致服务器上的大量计算来确定需要为访问提供服务的确切块。

当您处理快照时,LVM 只会删除快照池并根据需要更新快照树。如果删除的快照是快照树的一部分,则一些块将被复制到较低级别的快照。如果它是最低的快照(或唯一的),则池将被删除并且操作非常快。


一些文件系统确实提供文件系统内快照,ZFS 和 BTRFS 只是两个比较知名的。它们的工作方式类似,但文件系统本身管理已更改/未更改的映射。这可以说是一种更好的方法,因为您可以 fsck 整个快照系列以保持一致性,这是直接使用 LVM 无法做到的。

  • @Carr 这意味着快照完全在文件系统之外处理。其他内置快照功能的文件系统,如 BTRFS 和 XFS,确实有快照的概念,你不应该对这些系统使用 LVM 快照。 (2认同)

Eva*_*son 34

为什么不看看LVM-HOWTO快照部分

LVM 快照是基本的“写时复制”快照解决方案。快照实际上只不过是要求 LVM 为您提供一个指向文件系统当前状态的“指针”,并将快照后所做的更改写入指定区域。

LVM 快照在托管受快照影响的卷的卷组内“实时”生成,而不是另一个卷。您的陈述“......很多未分配的可用空间而不是分区”听起来像是您的想法是快照在受快照影响的卷组之外“存在”,这并不准确。您的卷组位于硬盘分区中,该卷受快照以及您在该卷组中拍摄的任何快照的影响。

LVM 快照的正常使用方式不是用于长期存储,而是用于获取文件系统的一致“图片”,以便可以进行备份。备份完成后,快照将被丢弃。

创建 LVM 快照时,您可以指定一定量的空间来保存快照处于活动状态时所做的任何更改。如果所做的更改多于您为快照指定的空间,则该空间将变得不可用且必须丢弃。您不想留下快照,因为 (a) 它们会被填满并变得无法使用,以及 (b) 当快照处于活动状态时系统的性能会受到影响 - 事情变得更慢。

编辑:

Microsoft 卷影复制服务和 LVM 快照的作用并没有太大不同。Microsoft 的解决方案更全面一些(就像 Microsoft 的典型情况一样——无论好坏,他们的工具和产品通常寻求解决相当大的问题,而不是专注于一件事)。

VSS 是一种更全面的解决方案,它将对支持快照和基于软件的快照的硬件设备的支持统一到一个 API 中。此外,VSS 具有 API 以允许通过快照 API 使应用程序静止,而 LVM 快照仅与快照有关——任何静止的应用程序都是您的问题(将数据库置于“备份”状态等)。