父文件系统快照是否引用其子数据集数据或仅引用其 onw 数据?

eri*_*ani 3 btrfs zfs snapshot

数据会在您拍摄的多个快照中被引用,并且只有当您删除引用所述数据的所有快照以及正在运行的卷中的数据时,数据才会从磁盘中删除,这对于 btrfs 和 ZFS 都适用。

例如,在 btrfs 中,如果我创建~/mifyle.txt并拍摄快照@home,则我的文件不会从磁盘中删除,除非我删除此快照并~/myfile.txt,ZFS 也会发生同样的情况。

但是如果我从@和拍摄快照怎么办@home?将在@@home快照中或仅在@home~/myfile.txt中引用快照中引用?

ZFS 的行为是否有所不同?如果我创建一个 file rpool/home/myfile.txt,其中rpool是父数据集, 是子数据集,然后为和rpool/home拍摄快照,myfile.txt会在两个数据集快照中引用还是仅在子数据集快照中引用?rpoolrpool/home

小智 6

每个数据集,无论是子数据集还是父数据集,都是它自己的文件系统。文件系统是引用和保存文件和目录的地方。

对rpool执行的快照仅影响数据集rpool对 rpool/ home执行的快照仅影响数据集home

请记住,home不仅仅是rpool中的一个目录,它是一个文件系统,恰好安装路径 /mnt/rpool/home 中

如果您在数据集中保存文件,然后销毁数据集,则主数据集中的所有文件和文件夹都会消失:包括保存在其快照中的文件和文件夹!在home安装在 /mnt/rpool/home期间,rpool数据集中没有保存此类文件。

对于快照来说也是如此。为 rpool/ home拍摄快照不会为rpool创建快照;只制作家庭快照。

您可能对rpool影响 rpool/ home感兴趣的唯一原因是当您对rpool使用递归操作时,任何此类递归操作都会影响rpool及其所有子级,包括 rpool/ home

如果您为rpool创建递归快照,它不会创建单个快照。它创建多个快照,每个快照对应一个数据集。

该命令将产生以下快照。-r 是“递归”:

zfs snap -r rpool@important
Run Code Online (Sandbox Code Playgroud)
  1. rpool@重要
  2. rpool/home@重要
  3. rpool/media@重要
  4. rpool/isos@重要
  5. rpool/isos/stable@重要
  6. rpool/isos/testing@重要

您可以选择使用以下命令销毁所有快照。注意 -r 选项:

zfs destroy -r rpool@important
Run Code Online (Sandbox Code Playgroud)

如果您愿意有选择性,则可以仅销毁特定快照,而不会损害任何其他快照。请注意,没有使用 -r 选项:

zfs destroy rpool@important
zfs destroy rpool/media@important
Run Code Online (Sandbox Code Playgroud)

现在您将只剩下您保留的快照:

  1. rpool/home@重要
  2. rpool/isos@重要
  3. rpool/isos/stable@重要
  4. rpool/isos/testing@重要