过去一个月我一直在思考 LVM 的工作原理。最初的想法是它非常灵活,但令我惊讶的是,在将磁盘移动到另一个本地磁盘时系统仍能运行。
我在网上找不到太多这方面的信息,但这似乎是可以做到的。也许这不切实际,或者通常不是一个好的解决方案(?)。我读过的文章都是关于本地磁盘的,而不是外部磁盘。
当我说备份时,我指的是整个磁盘/分区,不是快照。
假设我有 4 台服务器都运行 LVM,并且我想将所有磁盘备份到一个大型存储服务器,这可能吗?
如果可能的话,这种配置有什么缺点?
答案1
是的。
它被广泛使用,并且它实际上涉及快照以确保备份的一致性。
例如,这是在 Proxmox VE 中备份虚拟机(和容器)存储的方式:
- 暂停虚拟机。Linux 中没有办法自动创建多个快照,因此唯一的方法是备份全部在同一时刻对磁盘进行快照是为了确保虚拟机在所有快照准备就绪之前无法执行任何操作
- 快照所有磁盘。这个过程相对较快
- 取消暂停虚拟机。虚拟机不可用的时间很短,几乎无法察觉
- 将所有快照的图像发送到备份存储。这是一个漫长的过程。但事实上这些都是快照,这使我们能够获得一致的备份,同时 VM 仍可运行。备份的状态将是 VM 首次暂停时的状态
- 删除所有快照。
这是简化描述;实际上 PVE 还使用了 Qemu 中的一些技巧来模拟没有此类功能的后备存储上的快照,但这与问题无关。
优点已经描述过了。我能想到的缺点是需要在 VG 中留出一些备用空间来存储这些快照,而且通常无法预测空间的大小,这取决于 VM 在将数据发送到存储时执行的 I/O 量,而这又取决于 I/O 速率、虚拟磁盘大小和网络容量。实际上,我从未遇到过任何问题。
我描述了特定的用例,但无论您备份什么,过程的细节都是相同的。
答案2
使用 Linux LVM 将完整数据备份到单独的远程存储并不容易独自的. 更现实的是 LVM 快照通过其他备份代理复制到其他地方。
假设恢复设计需要块级完整复制,独立于原始卷组或其成员物理卷。快照很容易实现,但依赖于源 VG,无法满足该要求。LVM 可以镜像和拆分卷,但过程会更复杂。
- 创建 raid1 LV,确保它们的 PV 位于单独的存储系统上并同步。
- 将镜像拆分成新的 LV和
lvconvert --splitmirrors
。 - 使用 将 LV 拆分为不同的 VG
vgsplit
。
虽然这些功能可以实现主存储迁移等用例,但它们相对先进,示例较少。此外,向正在备份的主机提供备份块设备可能很棘手。
作为额外的块层功能,LVM 本身不提供对远程存储的访问。当然,使用合适的 SAN,您可以通过光纤通道或 iSCSI 访问共享存储阵列。这些 LUN 可以用作 LVM PV。这样做在操作上具有挑战性,因为许多用例不使用此类 SAN,例如安装在本地存储上的操作系统。而且这种 SAN 往往距离较短,不能容忍丢失。将镜像插入到保护存储中可能会对性能产生极大的要求,以跟上对主存储的写入。
更常见的是使用其他工具复制快照。对源 LV 进行快照。在单独的保护存储上创建 VG 和 LV。要么执行基于块的备份(例如使用 dd 通过 ssh),要么安装快照并执行基于文件的备份。删除快照 LV。