我有一个 Ubuntu 14.04 应用程序设备,它大量使用 BTRFS 快照。该应用程序与虚拟机管理程序无关,并且快照需要与虚拟机映像一起存储,以防我们需要解决问题。使用快照方法中内置的虚拟机管理程序而不是 BTRFS 快照会做更多的工作,因为它需要从虚拟机对虚拟机管理程序进行 API 访问,出于安全原因,我们不希望这样做。我还可以通过 ssh 直接从设备命令行远程访问 BTRFS 快照文件系统子卷,而无需关闭计算机或访问虚拟机管理程序 API。
过去,我只需将此应用程序部署到基于 vmware 的虚拟机管理程序即可。我总是在 vmware 磁盘上使用精简配置,从未注意到任何性能问题。我使用精简配置是因为我在此设备上进行了大量测试,并且我倾向于一次部署许多设备以并行运行不同的测试。
我非常小心,不要使用脚本过度提交存储,以确保磁盘增长不会失控。当精简配置磁盘需要增长时发生的 I/O 下降也不是那么明显。
现在我需要支持 KVM,并且非常希望保持精简/稀疏配置我的磁盘,但是我读过一些内容,指出由于过度冗余的写入和磁盘,将 CoW 文件系统与另一个 CoW 文件系统混合是一个坏主意碎片化等等。给出的常见示例是运行具有存储在 BTRFS 格式卷上的 qcow2 格式磁盘的虚拟机。我的情况则相反。我希望在从 qcow2 映像运行的虚拟机中拥有 BTRFS 格式的文件系统。我还没有发现太多关于 qcow2 映像之上的 BTRFS 快照的性能影响的细节。
问题:还有其他随 KVM 喜欢使用的磁盘大小而增长的稀疏文件格式吗?
我已经探索过使用稀疏原始文件,但我似乎无法通过 cp、下载 untar/gunzip 等使它们保持稀疏。似乎如果你想使用稀疏的原始文件,你根本无法移动它,这会让分发变得很痛苦。
答案1
问题是,KVM 根本不支持磁盘映像。与 vmware 不同,KVM 是一种一体化解决方案仅有的提供虚拟化功能,可以在此基础上构建虚拟化解决方案。
...它由一个可加载内核模块 kvm.ko 组成,该模块提供核心虚拟化基础设施和一个处理器特定模块 kvm-intel.ko 或 kvm-amd.ko。 -http://www.linux-kvm.org/page/Main%5FPage
通常,基于 KVM 的解决方案涉及以下组合:
QEMU
QEMU 支持两种本国的磁盘格式(还有其他格式,例如 VDI):
生的
原始磁盘映像格式(默认)。这种格式的优点是
简单并且可以轻松导出到所有其他模拟器。如果您的
文件系统支持漏洞(例如 Linux 上的 ext2 或 ext3 或 Windows 上的 NTFS),则只有写入的扇区才会保留空间。 - 人 qemu-img
Q牛/2
QEMU 图像格式,最通用的格式。使用它可以获得
更小的映像(如果您的文件系统不支持漏洞,
例如在 Windows 上)、可选的 AES 加密、基于 zlib 的
压缩以及对多个 VM 快照的支持,则非常有用。 - 人 qemu-img
库虚拟机
libvirt 提供了多种存储磁盘映像的方法:
- 目录后端
- 本地文件系统后端
- 网络文件系统后端
- 逻辑后端 - LVM 但没有精简配置:(
- 磁盘后端
- iSCSI 后端
- SCSI后端
- 多路径后端
- RBD(RADOS 块设备)后端
- 牧羊犬后端
- Gluster 后端
- ZFS 后端
- Virtuozzo 存储后端
查看这些,看看哪些(如果有)满足您的要求。看https://libvirt.org/storage.html,甚至更好https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Storage_Pools-Storage_Pools.html
答案2
我的个人经验是,您可以在具有稀疏功能的主机文件系统上使用原始文件。
我在 ext4 主机文件系统上有原始文件。关闭虚拟机后,我可以在原始文件(作为循环设备安装)上使用“zerofree”,并使用 cp --sparse=always oldfile newfile 我可以减小文件大小。我不知道文件在使用过程中是否保持稀疏,因为我只使用此方法来“存档”测试系统的图像。
顺便说一句,带有大量快照的 btrfs 似乎是一个坏主意: https://btrfs.wiki.kernel.org/index.php/Gotchas#Having_many_subvolumes_can_be_very_slow