为KVM虚拟机克隆使用LVM快照

所以,我现在有一个非常棒的KVM设置,主机和来宾域上的CentOS5.5,pipe理所有configuration的libvirt等。来宾域文件系统存储在硬件RAID5卷上的LVM中,所以我具有备份和低级数据冗余的灵活性。

我今天testing了virt-clone,除了花费大约30分钟的时间将24G的数据从暂停域的LVM磁盘复制到新虚拟机的新LVM卷之外,它的运行情况非常好。

我的问题是:我不能只使用LVM快照创build新的虚拟机的根磁盘? 例如: lvcreate -s guest1_root -n guest2_root -L 8G raid_vg

现在,我对LVM快照的理解是,快照存储对原始块进行的更改的逆向增量,以便快照占用很less的实际空间,即使原始卷已经写入,也可以读出原始块。 LVM2增加了读写快照,这就开辟了这个有趣的可能性。

事实上, LVM HOWTO甚至build议将这个特性与Xen结合使用:

这为LVM1的只读快照带来了许多新的可能性。 (…)创build用于Xen的卷也很有用。 您可以创build磁盘映像,然后将其快照并修改特定domU实例的快照。 然后,您可以创build原始卷的另一个快照,并为其他domU实例修改该快照。 由于快照所使用的唯一存储区是源或快照上已更改的块,因此大部分卷都由domU共享。

这似乎是一个非常强大的工具,我想知道是否有人在生产虚拟化环境中尝试过,可以考虑采用这种方法的任何供应商(Citrix,VMWare),或者想到这个想法的任何严重问题。 我可以想到以下潜在的问题:

  • 如果“原始”guest虚拟机正在快照时运行,则可能存在文件系统问题。
  • 作为“逆向增量”和“写入块”日志的主机域LVM性能被附加到。 这可能是非常快的,但我不知道,这似乎是一个奇怪的想法,所以它承受着testing和基准testing。
  • 一个篮子里有更多的鸡蛋:如果“原始”LVM卷被损坏,那么快照的卷也会被洗净。 当然,RAID5可以缓解磁盘损坏,但值得注意的是。
  • 你可以快照快照吗? 我假设如此。

作为比我更有可能拥有更多虚拟化经验的人,有没有什么能够让这种设置让人想要尖叫呢?

这样做是完美的。 你想要的是有快照的父(原来的,或源,或任何你想调用它)在同一时间使用,因为它会导致IO倍增(休伯特是对的,不用一直使用源音量就容易防止)。

如果您在LVM上安装了一个主操作系统,并且您快照了四次,则不会有太多的IO损失,因为您只写入单个快照卷。 当然,这不是免费的,但其他文件系统或虚拟磁盘上的其他forms的快照也不是。 总是有一个地方的成本。

休伯特说的另外一件事是,你必须考虑快照的大小。 您将需要确保快照卷能够继续写入。 一个完整的快照卷将打破东西糟糕。 防止这种情况的一种安全防护方法是使快照卷的大小(或更大)与源卷相同。 不过,这样可以减less使用less量磁盘空间的好处。

你知道qemu图像快照也可以吗?

虽然我没有尝试使用LVM作为KVM存储,但我确实使用了它作为Samba的卷影function,我可以告诉你一件事情:性能是深海的。

每个快照都需要额外的写入操作,如果您有一个基本快照卷和4个快照,写入基本卷时写入驱动器的写入量将乘以5。

至于具体的问题:

  • 当快照发生时,LVM冻结文件系统(停止写入,刷新caching,执行快照,恢复写入)
  • 正如我所说,这是非常缓慢的
  • 是的,已损坏的基本卷会导致所有快照不可用,而且,如果用尽快照增量空间的空间不足,快照也会崩溃
  • 是的,你可以快照快照

不幸的是,我所知道的只有3个系统能够很好地处理快照:NetApp WAFL,ZFS和btrfs。 如果系统不重要,btrfs可能值得一试。

我甚至可以说ZFS值得一试,可以很容易地build立一个由某种磁盘(光纤,iSCSI等)支持的基于Nexenta的系统,而且性能相当不错。 如果性能不是绝对关键的话,那么我会在本地存储上推荐这种方法,因为如果您的虚拟化服务器出现故障,这会给您一个简单的恢复scheme。