强制回收 NFS 服务器上已删除的文件

强制回收 NFS 服务器上已删除的文件

我有一台 RHEL 7.9 服务器,用作文件服务器。它通过 NFS 公开 XFS 分区,供客户端挂载和使用。如果需要,我愿意使用与 XFS 不同的文件系统,但我无法避免使用 NFS。

我想强制使用回收站,以便恢复意外删除的文件。当我寻找如何在 NFS 下执行此操作时,我看到的大多数结果都是“你不能,使用 CIFS/Samba”。

我认为我可以用来inotifywait拦截文件删除调用并在回收站目录中创建一个硬链接来“保存”文件免于删除,但似乎 inotifywait 在文件已经消失后运行。

答案1

模拟回收站最简单的方法是使用硬链接。只需创建一个目录并向 cron 添加一个命令即可。

在同一文件系统中但在导出的 nfs 目录之外创建“影子”目录。如果用户应该有权访问已删除的文件,请以只读方式导出它,

当文件从 nfs 目录中删除时,它会保留在磁盘上,因为它链接到影子目录中的文件名,您可以从那里“恢复”它。

有以下选项:

  • 按计划或在 inotify 事件上创建硬链接-在创建新文件后

  • 复制完整目录或单独硬链接每个新文件。

最简单的方法是使用 cp 或 rsync 按计划进行完整目录复制。

添加 cron 条目或添加 systemd 计时器和服务,例如

# -l means create hardlink instead of copy data
cp -al /path/to/nfs_share /path/to/shadow_dir

并且,影子目录中将拥有指向在 nfs 共享上创建的所有文件(名称)的硬链接(影子目录更新之前删除的新文件除外)。

当然,如果 nfs 共享上的新文件名与影子目录中的文件名匹配,它将重新链接到新数据。

它应该很快,因为文件数据根本没有复制,只是文件元数据。

通过inotify创建事件,cp -al --backup=numbered您将获得“版本化 bin”,它将存储具有相同文件名的不同版本文件。

答案2

我再说一遍:在 UNIX/Linux 文件操作中,没有“回收站”这样的东西。这是设计使然!
您可以创建目录并将文件移动到那里进行“删除”操作。或者重写 Linux 的文件功能。

相关内容