我有一个要求,让用户访问 NFS 共享,他们可以将一些文件放在该共享上,然后删除这些文件。假设他们是流氓,可能会试图真正删除这些文件(我不确定 shred 是否通过 NFS 工作,但无论如何都是等效的)。我们不希望他们意识到 NFS 共享已被更改(这是他们的主目录)。
是的...我知道这要求很奇怪!
NFS 上是否存在文件系统或设置,使得用户看起来好像在删除文件,而实际上文件正在被存储?有人告诉我这是一个修订文件系统,但我找不到太多关于它的参考资料。
我知道您可以使用恢复程序在 ext3 和类似系统上“取消删除”,但我们希望得到比这更强大的功能,理想情况下是能够以某种易于访问的形式存储文件的所有副本。
使用 CentOS 5.8 。用户无法删除他们的文件,因为它们是“流氓”的并且不再受信任(这很复杂,这就是我所知道的)。
答案1
版本文件系统
近端局部缺血模型可以自动和连续地进行快照,因此它可以跟踪修改和删除的文件。版本 2(又名 NILFS2)还具有简洁的垃圾收集机制避免文件系统因太多快照而变得满满的!我一定会研究这个解决方案!
在维基百科上搜索也返回ext3cow它在块级别执行写时复制并可以跟踪文件版本。
这两种解决方案都已经存在了一段时间,但由于我没有使用过它们,因此我无法评价它们在企业环境中的成熟度。
另一种方法
人们可以简单地使用增量备份系统,这是一种将 NFS 共享保存在不同位置的 rsync,但也可以恢复已删除的文件。
这种解决方案并非万无一失,需要额外的存储空间,因此可能不符合您的要求或预算。此外,此解决方案会定期运行,因此在备份会话期间创建和删除的每个文件都将丢失。
如果这些限制仍然适用,那么看看rdiff-备份。它是一个命令行工具,可以正确且轻松地完成工作。
或许,两种方法同时采用可能会更加安全。
答案2
我不知道 NFS,但你绝对可以使用 CIFS 来做到这一点。有一个叫做 的 Samba 模块vfs_recycle
。当它打开时,每个被删除的文件实际上都会移动到你在配置中指定的目录。你还可以包含veto files
指令并声明回收目录,这样用户就看不到回收了。
答案3
总是有选择Linux 上的 ZFS并定期对文件系统导出进行快照。以下是自动快照服务.zfs/snapshot/
适用于 Linux 版本的 ZFS。默认情况下,ZFS 快照会以对用户透明的方式显示在文件系统共享的子目录中(不可见的)树下。
答案4
如果您使用 ext* 文件系统,则可以使用属性来获取所需的行为。您可以使用不可变标志(如果启用它,则无法对该文件执行任何操作)或“u”标志(当文件被删除时,其内容将被保存。这允许用户请求取消删除。)
http://docs.petervg.nl/index.php/component/content/article/41-linux/59-ext3-file-attributes