我想构建一个文件服务器/NAS,同时使用 btrfs 来保护数据(防止数据腐烂),但我想使用我现有的 KVM/QEMU 服务器(带有 btrfs raid1 的 debian)并为此目的创建一个 VM。
如果我创建虚拟机并将数据存储在 ext4 文件系统中,主机服务器上的 btrfs 校验是否会检测到虚拟机上的数据损坏?
--------------------
| KVM server |
| btrfs - raid1 |
| ----------- |
| | VM-ext4 | |
| ----------- |
|------------------|
如果之前的答案是否定的,我是否也必须创建以 btrfs 作为其文件系统的虚拟机?
在这种情况下,为了保留 btrfs 的“自我修复”功能,我必须创建至少 2 个虚拟磁盘以在 raid1 中拥有 btrfs。
---------------------
| KVM server |
| btrfs - raid1 |
| ------------ |
| | VM-btrfs | |
| | 2 x vda | |
| ------------ |
|-------------------|
但是这样我会浪费很多空间...主机服务器中的 raid1 加上 VM 中的 raid1。
或者最好的解决方案是直接在主机服务器上实现文件服务器(尽管我更愿意在这两个角色之间保持一定的分离)?
更新 1
尽管我偏爱 btrfs,但我的主要问题是 btrfs/zfs 在检测和纠正虚拟机磁盘中的静默损坏方面是否有用。这些文件系统如何区分虚拟磁盘上的静默损坏和正常磁盘写入?
更新 2
在谷歌搜索了一段时间后,我只能找到更多关于此的信息来自 serverfault 的问题
根据一些评论,除非实施更复杂的文件系统(可能是 raid1 主机文件系统内的 raid1 客户文件系统),否则虚拟客户系统也将面临风险 。
所以我现在的想法是这样的:
- 在 kvm 主机服务器上设置文件服务器
- 将关键数据安全地保存在文件服务器(已使用 btrfs)上,并通过 NFS 与虚拟机共享
- 禁用虚拟机磁盘映像文件夹的 COW
- 创建虚拟机的 kvm 快照并将其配置文件备份到 NFS 共享
这是一个合理的解决方案吗,还是我忘记了一些重要的细节?
答案1
我主要基于此serverfault 帖子 但我会尽力自己回答。
如果我创建虚拟机并将数据存储在 ext4 文件系统中,主机服务器上的 btrfs 校验是否会检测到虚拟机上的数据损坏?
不,据我所知,主机系统无法检测到虚拟机文件系统上的数据损坏。
如果之前的答案是否定的,我是否也必须创建以 btrfs 作为其文件系统的虚拟机?
是的。
或者最好的解决方案是直接在主机服务器上实现文件服务器(尽管我更愿意在这两个角色之间保持一定的分离)?
对我来说,解决方案是:
- 在 kvm 主机服务器上设置文件服务器
- 将关键数据安全地保存在文件服务器(已使用 btrfs)上,并通过 NFS 与虚拟机共享
- 禁用虚拟机磁盘映像文件夹的 COW
- 创建虚拟机的 kvm 快照并将其配置文件备份到 NFS 共享