2016-09-23 103 views
1

在启用ZFS系统我有这些数据集和运行:下到/ mnt/mydataset, 设置1 mydataset下的/ mnt/mydataset /设置1和下 设置2到/ mnt/mydataset/SET2 。 /mnt/mydataset/existing下的常规目录中也有现有数据。创建的ZFS数据集在现有数据

我很想将'现有'目录改成数据集,以享受快照等zfs功能。当我创建数据集/ mnt/mydataset/existing时,它会隐藏现有数据。当我删除新创建的数据集时,旧数据会重新出现(显然,在其他数据上尝试过)。

是否有添加数据集的方法,以便现有数据马上包含?

显而易见的解决方案似乎是先添加数据集,然后将现有数据复制到其中。然而,这些数据涉及一些监狱生产服务,我不愿意阻止他们和监狱的运作。

+0

'/ mnt/mydataset/existing'的文件系统是什么?如果它是[LVM商店(在Linux上)](http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html)或[UFS文件系统(在FreeBSD上)](https://www.freebsd.org /doc/handbook/snapshots.html),可以创建快照,在服务器的其他位置创建数据集,将文件从快照复制到新数据集,最后,将数据集装入点重置为旧装入点。 –

回答

1

在ZFS文件系统(即您称为数据集)之间移动文件始终是完整副本,即使两个文件系统都在同一个池中。这同样适用于从文件系统复制到外部或从外部复制到文件系统。即时的唯一移动操作(如重命名)在同一个文件系统中。

虽然不幸总体来说,对于那些想要传输整个文件系统(而不仅仅是单个文件)的案例,这似乎适用于您的案例。它使用ZFS快照和增量发送/接收将文件系统的所有内容传输到新的文件系统,然后在完成(几小时后)后传输自更改以来的数据(需要几分钟),然后数据因为改变了(现在可能需要几秒钟),除非有一个非常小的延迟,否则直到你是最新的。然后,您关闭双方的应用程序,以便不再发生任何变化,重新传输最后的差异(非常快),然后再次在目标端启动应用程序。

这样你仍然有停机时间,但它很短。缺点是你必须有额外的存储空间。