我有一个名为“data”的 zfs 池,我也将其放在其中/var/lib/docker。由于 docker (就我而言;对于这个问题,docker 是无关紧要的)zfs 列表看起来像这样:
data 1.33G 133G 660M /data
data/1366b029121dbc907878e8a6fc5c481244b7aac11757fe63b94384fe64e48c6d 6.02M 133G 511M legacy
data/272a5f859a53ec996868fb0e4953f2219aadbd96c0cd3b8b9be09ee550b7d0e5 236K 133G 511M legacy
data/284641b6a43d2446be81ddf21fbeb70b781f6fb5f70025d88c44c19ed4728541 288K 133G
...
现在,如果我执行快照,我会使用递归选项(zfs 快照 -r 数据@快照名称)以获得所有数据集的快照(我的 - /data - 和 docker 的)。
默认情况下快照安装在池/.zfs/快照/快照名称。
我可以安全使用吗池/.zfs/快照/快照名称作为(一致的,因此是快照)备份的源目录,还是我丢失了一些数据,zfs 是否递归地挂载我的快照?我在文档中没有找到任何内容。
答案1
可以递归地制作快照。但挂载快照不会挂载旧快照。您可以使用递归挂载快照的脚本到特定目录,然后从那里备份。
但对于Docker来说,使用这种方法会排除一些数据。特别是具有legacy
挂载点(且挂载点设置为)的数据集none
。 ZFS 不会在启动时自动挂载它们,并且由于挂载点不包含文件系统路径(与您的示例中相反/data
),因此在执行备份时挂载快照的位置并不明显。
我从中了解到的这个答案,是 Dockerlagacy
数据集包含容器的映像。因此您可能根本不需要备份该数据。
从你的输出来看,zfs list
你似乎没有为 Docker 制作专用数据集。这就是为什么这些 Docker 旧数据集存储在父数据集(您称为 的数据集data
)下。我个人更喜欢制作一个专用的 Docker 数据集(也可以在下面data
)来将这些遗留共享嵌套在 Docker 数据集下,如下所示:
zfs list -r data
NAME USED AVAIL REFER MOUNTPOINT
data 3.57G 2.63T 200K /mnt/data
data/jip 2.27G 2.63T 208K /mnt/data/jip
data/jip/docker 108M 2.63T 1000K /mnt/data/jip/docker
data/jip/docker/4142fdca5ac3e7dbd12c0518e3377eb47a2c1a8599f564e07e08e5b25944146c 396K 2.63T 388K legacy
data/jip/docker/43023791ce39ba890e8de50809cacda45a884b5990e4923fd6563eaed58e6b42 168K 2.63T 396K legacy
data/jip/docker/98a9127ff2dd5fd2d0ea52f5e6343e85a8d2a80aa4cd2ffcf1c92e9b2d2b371f 101M 2.63T 102M legacy
data/jip/docker/b68a666a8602cdbc3639b010558a0aa5f92f0b765a6efc15c4f7f30651ba2860 1.05M 2.63T 102M legacy
data/jip/docker/b68a666a8602cdbc3639b010558a0aa5f92f0b765a6efc15c4f7f30651ba2860-init 216K 2.63T 102M legacy
data/jip/home 2.16G 2.63T 36.9M /mnt/data/jip/home