您拍摄的许多快照都会引用数据,并且只有删除引用所述数据的所有快照以及正在运行的卷中的数据时,数据才会从磁盘中删除,这对于 btrfs 和 ZFS 均适用。
例如,在 btrfs 中,如果我创建~/mifyle.txt
并拍摄的快照@home
,则除非我删除此快照,否则我的文件将不会被从磁盘中删除~/myfile.txt
,ZFS 也会发生同样的情况。
@
但是如果我从和拍摄快照怎么办@home
?将~/myfile.txt
在@和@家快照或只是@家快照?
ZFS 的行为是否不同?如果我创建一个文件rpool/home/myfile.txt
,其中rpool
是父级,是子级数据集,然后为和rpool/home
拍摄快照,将rpool
rpool/home
我的文件.txt在两个数据集快照中都被引用还是仅在子数据集快照中被引用?
答案1
每个数据集,无论是子数据集还是父数据集,都是其自己的文件系统。文件系统是引用和保存文件和目录的地方。
快照已完成池仅影响数据集池. 快照已保存至 rpool/家仅影响数据集家。
记住家是不是只是一个目录池,它是一个恰好是安装在路径 /mnt/rpool/home 中。
如果您在家数据集,然后销毁家数据集,主数据集内的所有文件和文件夹都消失了:包括其快照中保存的文件和文件夹!此类文件从未被保存在池期间的数据集家安装在/mnt/rpool/home。
快照也是如此。为 rpool/ 创建快照家不会创建快照池; 仅有的家已制作快照。
你可能感兴趣的唯一原因是池影响 rpool/家是当你使用递归行动池,其中任何此类递归行动将影响池 以及它的所有孩子,包括 rpool/家。
如果你做了递归快照池,它不会创建一个单身的快照。它创建多种的快照,一个用于每个数据集。
此命令将产生以下快照。-r 是“递归”:
zfs snap -r rpool@important
- rpool@important
- rpool/home@important
- rpool/media@important
- rpool/isos@important
- rpool/isos/stable@important
- rpool/isos/测试@important
您可以选择使用以下命令销毁所有快照。请注意 -r 选项:
zfs destroy -r rpool@important
如果您希望有选择性,您可以只销毁特定快照,而不会损害其他快照。请注意,没有使用 -r 选项:
zfs destroy rpool@important
zfs destroy rpool/media@important
现在您将只剩下您保存的快照:
- rpool/home@important
- rpool/isos@important
- rpool/isos/stable@important
- rpool/isos/测试@important