lvremove 快照:留下了“-real”文件,它们是什么,可以安全删除吗?

lvremove 快照:留下了“-real”文件,它们是什么,可以安全删除吗?

我使用 lvremove 删除了一个快照卷。它说删除成功了。但我注意到 /dev/mapper 中仍有一个“-real”文件。我相信这些“-real”文件与快照有某种关联,因为当我之前创建和删除快照时,这些文件也出现了又消失了。

所以,我想知道这些文件是什么,以及删除它们是否可以安全地?

更新 2015 年 8 月 6 日:使用正确的 Google 术语(“lvm 快照 /dev/mapper 文件”),我能够找到描述这些文件的以下页面:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/device_mapper.html 目前正在阅读该页面以查明文件是什么以及如何处理它们。

答案1

在阅读了上述文档并在我的系统上进行了大量尝试以试图了解发生了什么之后,我想我找到了答案。

“真实”文件是原始 LV 的设备映射表在创建任何快照之前的副本。“真实”文件的映射表与原始 LV 的映射表完全相同。它是一种线性设备类型,这意味着读取和写入会按预期进行,具有相同的主编号和次编号以及相同的偏移量和长度。在我的情况下,主/次编号指的是实际硬盘驱动器 /dev/sdb1。

换句话说:在创建快照之前:

  • 原始 LV --> 硬盘 /dev/sdb1 上的某些区域

快照创建后:

  • 真实文件 --> 硬盘 /dev/sdb1 上的同一区域。线性映射。常规块设备。理论上应该可以像挂载原始 LV 一样挂载它,但我还没有尝试过。
  • 原版 LV --> 其他地方

现在原始 LV 类型为“snapshot-origin”,指向新的“真实”设备:

  • 原始 LV --> REAL 文件的主/次要 (253/x = MD 阵列,而非 /dev/sdb1)。这不是常规块设备。

原始 LV 现在是“快照源”类型。这意味着读取和写入不再以正常方式发生。读取通常从 REAL 设备进行,但写入首先将原始数据复制到 COW 设备,然后再复制到“真实”设备。

此外,现在还有 COW 设备和 SNAPSHOT 设备/卷。

  • COW-->硬盘上的全新区域。线性映射。
  • SNAPSHOT --> REAL + COW。快照映射

旧数据被写入 COW。它只是一个可以正常读写的常规块设备。

SNAPSHOT 不是常规块设备。它是一个“快照”设备。从 SNAPSHOT 读取不会返回新数据。将根据旧数据的位置从 COW 或 REAL 读取。

在我的场景中,当我尝试删除快照时,它给出了以下错误:设备 vol0-xxxx-real (253:15) 被另一个设备使用。无法恢复 xxxx。正在释放关键部分中的激活。

快照卷未被删除。但是,再次重复 lvremove 时,报告成功。快照卷已消失。但“真实”设备仍存在于 /dev/mapper 中。将原始卷的表映射回指向底层硬件的“线性”表,正如它们应该的那样。

因此,我的判断是,只要原始卷的地图表与创建快照之前相同(意味着它应该与“真实”设备的地图表完全匹配),就意味着它指向了它应该指向的位置。只要其他设备上的地图表没有引用“真实”设备的主/次编号,那么就可以安全地删除应该由 lvremove 命令自动删除的“真实”设备。

至于这个错误是如何发生的,我注意到的一件事是:-如果我的原始卷包含分区,并且我创建了快照,则会为 LV 创建“真实”设备,但不会为其中的分区创建“真实”设备。在这种情况下,lvremove 可以正常工作而不会出现错误。

  • 但是,在我有问题的系统上,LV 中的每个分区都有“真实”设备。我不知道它们是怎么到那里的。也许这些是 LV 中的 LV,快照机制混淆了??

相关内容