我对 ZFS 快照和回滚应该如何工作感到困惑。我有一个包含几个 zvol(每个都由 mirrorvdev 的分区组成)的 zpool。我制作了这样的快照:
~$ 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 出了问题?
答案1
您只对 进行了快照nvme-tank
,但没有对nvme-tank/ext4-zvol
或进行快照nvme-tank/ntfs-zvol
,其中一个包含您创建的文件。因此什么也没有发生,因为您快照的数据集与您创建文件时所在的数据集不同。
如果您希望快照递归到后代数据集/zvol,则必须使用 明确请求递归快照zfs snapshot -r
。但是,您每次只能使用 回滚一个特定的数据集/zvol zfs rollback
。