我有一个在 OpenSolaris/illumos/OmniOS 上运行的 NAS,它有多个共享的 ZFS 文件系统,其中自动快照处于活动状态以保留历史记录(保留 4 个 15 分钟快照、24 个每小时快照、7 个每日快照等)。我可以使用 Windows 资源管理器访问快照之前的版本窗口并恢复文件的旧版本或已删除的文件,效果很好。
我在重命名或移动文件时出现的问题:
Draft1.txt
如果我在一天内创建并修改了它,历史记录就会保留下来。当我完成草稿并将其重命名为其他任何名称(例如Letter.txt
或 )Draft2.txt
时,版本就会消失(只有在知道旧文件名或将文件重命名为旧名称时才能通过目录访问它们)。- 如果我创建并修改
Draft1.txt
并保存完成版本的另一份副本Letter.txt
(现在有两个文件),第一个有历史记录,第二个没有(这没问题)。如果我删除Draft1.txt
它然后想恢复它,我可以在目录中找到它,但恢复的版本现在已经丢失了它的历史记录。 - 如果我将文件移动到另一个子目录,历史记录就会丢失。
- 如果我(意外地)重命名一个文件,历史记录就会丢失。
因此,如果我想保留以前版本的全部功能,则在使用共享时我必须考虑以下几点:
- 永远不要重命名文件,第一个选择的名称必须永远保留
- 除了第一天,不要移动或重新组织文件(否则丢失的更改会太大)
- 修改完成后切勿以新名称保存文件(但先保存是可以的)
- 永远不要合并或拆分目录,因为所有内容都会丢失其所有历史记录,即使物理块根本没有改变
除了忍受,我还能做些什么呢?ZFS 在大多数情况下(写时复制、发送/接收、zvols、快照)都可以在块上运行,但在这种情况下却可以在文件上运行,这似乎很奇怪。或者这是 SMB/CIFS 子系统而不是文件系统的限制?
答案1
我认为这可能只是它工作方式的限制。在我看来,它似乎只是扫描快照以查找当前文件的不同版本,因此如果文件已重命名,则不会显示任何版本。
但是我不确定你说的将文件移动到另一个目录会导致历史记录丢失是什么意思。在我的 FreeBSD/Samba 系统上,我可以查看共享本身上的先前版本。这为我提供了所有快照的完整列表,我可以浏览任何快照,显示当时共享的全部内容。