我正在尝试使用 KVM 并在 Linux 服务器上设置 Linux,因此我可以
- 重启(来宾)服务器
- 加密客户的 rootFS,而不必执行 initramfs-tricks 来使远程重启正常工作。
我正在考虑将其用作btrfs
文件系统,因为它是单个 SSD 磁盘并且没有 RAID。
以下想法:
- 如果我在主机上使用 btrfs,我将拥有出色的数据完整性、所有校验和等等。
- 所以我可以在客户机上使用一些快速而简单的方法,甚至使用 ext2?
或者我应该反过来做?
答案1
在主机上运行 BTRFS 来处理磁盘映像(qcow2 等)是一个非常糟糕的主意。对映像文件进行磁盘写入的样式是 btrfs 最糟糕的 IO 模式,调整 KVM 页面没有包含很多提示:
http://www.linux-kvm.org/page/Tuning_KVM
但在这一点上,他们很清楚:
“不要在主机上使用 Linux 文件系统 btrfs 来存储映像文件。这将导致 IO 性能低下。当客户机上有高 IO 流量时,kvm 客户机甚至可能会冻结。”
我使用 ext4 存储本地文件,并通过 Solaris 上的 ZFS 使用 nfs 存储远程磁盘映像。我们将在不久的将来切换到基于 zfs 的 iscsi 共享。如果您不需要 nas/中央文件存储,并且将拥有相对稳定的 VM 数量,那么 DukeLion 的建议是最好的。
我们使用集群进行软件测试,因此我们每天使用 qcow2 覆盖文件创建数千个虚拟机。LVM 不支持这样做。
答案2
这一切都取决于你想达到什么目的。
我不建议在任何服务器(无论是虚拟服务器还是物理服务器)中使用 ext2 作为根文件系统。在某些情况下,性能可能会变慢,并且仍然可能出现文件系统不一致,导致重启速度非常慢。
如果您想要简单和性能 - 我建议您将来宾映像放在 lvm 逻辑卷上,并在来宾中使用 btrfs/ext4/xfs。
答案3
截至撰写本文时,距离最初的问题已经过去了 10 多年。而且,我敢说,目前的答案并不像以前那么明显。
BTRFS 有一个有趣的功能,可用于 VM 主机:子卷上的快照。实际上,它允许您创建“目录”(实际上是子卷)的快照。子卷可以包含多个文件。
确实,作为 COW 文件系统,btrfs 确实会受到使用其磁盘映像的 VM 的打击。也就是说,除非您禁用 COW 算法。您可以通过两种方式禁用 COW:
在整个卷上使用
nodatacow
mount 选项(不能选择性地对子卷起作用)使用
chattr -C
。要检查结果,请使用lsattr
。如果您希望将其应用于子目录或子卷,请在新创建的子目录或子卷上应用“无 COW”属性,以便任何新创建的文件都会继承该属性。
关闭 COW 的结果是,BTRFS 将尽可能避免执行 COW 技巧。只有在绝对必要时,例如创建并使用快照时,仍会发生少量的 COW。
在客户机中,我会使用任何可靠的 FS,并且代码库要维护好,最好不要占用太多资源。Ext4 听起来“是个不错的选择”。
为了节省主机上的磁盘空间,您可以告诉 QEMU 观察来自 VM 客户机的“丢弃”或 TRIM 磁盘命令。在定义中-drive
,包括discard=unmap,detect-zeroes=unmap
。在 VM 客户机实例中,您可以选择:
a) 安装卷时不要使用“discard”选项。传统上,对于闪存 SSD 驱动器,discard/TRIM 操作往往会阻塞且耗时。它会损害运行时性能。因此,自从在 Linux 中实现 discard/TRIM 后不久,建议一直是:最好避开 TRIM,只fstrim -av
在适合您时(即在系统负载较低时)偶尔手动运行。磁盘 IO 子系统也进行了一些优化,以实现流量模式,从而实现“类似 TRIM 的行为和分配效率”,而无需实际使用 TRIM/discard 命令。关于该主题的两篇较早的文章:1,2。
b) 如果您没有 SSD 底层,即您的磁盘驱动器实际上正在生锈,您仍然可以在 VM 客户机中使用 TRIM/discard 向 VM 主机发出信号,表示它可以释放底层 QCOW2 映像中的一些空间。字面意思是“打一个洞”。QCOW2 映像很稀疏,通过正确释放未使用的空间,您将节省大量实际磁盘容量。
我没有长期经验,我实际上只是安装了这样一个系统(主机 + 1 个客户机,两个 QCOW2 映像中约 55 GB 的数据),它似乎运行得相当好。在将操作系统和数据从裸机迁移到虚拟机时,我不断使用 top 和 iostat 观察系统,屏幕上滚动的数字似乎非常合理。
在优化方面,我noatime
在主机和客户机中都使用了 mount 选项,并且我还喜欢调整 dirty_ratio、dirty_background_ratio 和 dirty_expire_centisecs 以增加“写回缓存”。 对我来说似乎有用。