从 ZFS 快照恢复已删除的文件(仍然可以通过 lsof 查看)

从 ZFS 快照恢复已删除的文件(仍然可以通过 lsof 查看)

我在 Linux Debian 上有一个 ZFS 卷。
每晚都会在此卷上拍摄快照。
无论出于何种原因,几天前删除了一个大文件(虚拟磁盘)。该文件仍在使用(由kvm)。lsof显示该文件已删除。

如果我暂停该kvm过程,我可以恢复已删除的文件cp /proc/<pid>/fd/21 myfile.bak并在另一个虚拟机中使用它。但我不需要这个当前文件。

我需要该文件 2 天前的版本。
由于该文件几天前已被删除,因此不在备份中。
我认为该文件存在于 ZFS 快照中,但不确定。我没有看到它/zpool/.zfs/snapshotname/path/to/file

有谁知道如何获得未真正删除来自 ZFS 快照的文件?

答案1

在看/zpool/.zfs/snapshot/$NAMEOFSNAPSHOT/path/to/file

答案2

每晚都会在此卷上拍摄一个快照。 [...] 我需要该文件 2 天前的版本。由于该文件几天前已被删除,因此不在备份中。

每个快照都会显示指定时刻的文件系统。快照是只读的,这意味着快照中的单个文件不能被删除,只能销毁完整的快照。

如果您在 T-1、T-2、T-3 点进行夜间快照,并在 T-3 点之后删除文件本身,则您的快照 T-1 和 T-2 将不再有此文件(但其他人仍然会拥有它)。

因此,您的解决方案是从较旧的快照(在您的情况下,是实际文件尚未删除的最新快照)恢复文件,然后可以选择将其与当前版本进行比较以了解差异。当然,这仅在旧快照仍然存在的情况下才有效。

答案3

不记得是否可以安装快照。

您可以尝试使用zfs diff来查看您正在查找的文件是否位于不同的快照中。

答案4

如果您不想破坏 .zfs,您也可以克隆快照。复制出需要恢复的文件/文件夹,然后销毁克隆。

相关内容