我有一个在 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 子系统而不是文件系统的限制?
我认为这可能只是它工作方式的限制。对我来说,它似乎只是扫描当前文件不同版本的快照,因此如果文件已重命名,则不会显示任何版本。
但是,如果您将文件移动到另一个目录,我不确定您所说的历史丢失是什么意思。在我的 FreeBSD/Samba 系统上,我可以在共享本身上查看以前的版本。这为我提供了所有快照的完整列表,我可以浏览任何快照,显示当时共享的全部内容。