我对 ZFS 快照和回滚应该如何工作感到困惑。我有一个包含几个 zvol 的 zpool(每个 zvol 都由 mirrorvdev 的分区组成)。我制作这样的快照:
~$ sudo zfs snapshot nvme-tank@roll_test
然后我启动位于 zpool 中一个 zvol 上的 VM 并创建一个测试文件
~$ echo "This is a test of the rollback system" > rbtest.txt
然后我关闭虚拟机并进行回滚。据我了解这个概念,回滚应该将 nvme-tank 中的所有内容恢复到我拍摄快照时的状态,然后再制作 rbtest.txt。
~$ sudo zfs rollback nvme-tank@roll_test
然后我重新启动虚拟机,检查 rbtest.txt,它就在那里,仍然在那里!
快照在那里:
~$ zfs list -t all -r nvme-tank
NAME USED AVAIL REFER MOUNTPOINT
nvme-tank 887G 12.1G 24K /media/nvme-tank
nvme-tank@nov82018 0B - 24K -
nvme-tank@roll_test 0B - 24K -
nvme-tank/ext4-zvol 474G 449G 37.8G -
nvme-tank/ntfs-zvol 413G 23.9G 401G -
那么,我是否误解了快照应该做什么,错误地使用它们,或者我的 zfs 有什么问题?
您只进行了快照
nvme-tank
,但您没有快照nvme-tank/ext4-zvol
或nvme-tank/ntfs-zvol
,其中一个包含您创建的文件。所以什么都没有发生,因为您正在拍摄与创建文件的数据集不同的数据集。如果您希望快照递归到后代数据集/zvol,则必须明确要求递归快照,使用
zfs snapshot -r
. 但是,您一次只能回滚一个特定的数据集/zvolzfs rollback
。