防止挂载失败时根系统填满的最佳方法?

Pet*_*ter 18 linux backup filesystems mount disk-space-utilization

我们有一个内部网络服务器(虚拟化,托管 ReviewBoard,但不是超级相关),我们有一个相对一致的失败模式,失败的 NFS 挂载导致 / 被填满。Distro 是 Ubuntu(不要问)如果一个解决方案依赖于不同的发行版,它的实现会更慢。

正在对 /mnt/backup/ 执行备份,这应该是将 NFS 挂载到另一个系统。不幸的是,当挂载失败或掉线时,会在根文件系统上执行备份,正如您想象的那样,在 / 已满之前不会花很长时间,然后服务开始失败。

已经讨论了许多可能的解决方案。

  1. 监视 /mnt/backups 并确保它不是 root。也许是一项 cron 工作。

  2. 使用 /mnt/protected/backups,并首先将 /protected 挂载到一个小文件系统,也许是一个循环挂载到本地文件,这样它就不太可能失败。

  3. chmod a-rwx /mnt/backups(根文件系统挂载点)。我不确定安装在受保护的导演上是否可行,我认为确实如此。

  4. 在挂载的树上创建一个名为“Backups”的目录,然后软链接“ln -s /mnt/backup/Backups /Backups”。除非挂载 /mnt/backup,否则使用 /Backups 进行备份将失败,因为本地树不包含子目录。

  5. 执行检查目录是否正确安装在备份脚本中。

我对这些方法的任何反馈、利弊或人们用作保护根文件系统免受此类恶意行为的标准方法的任何其他技术感兴趣。

phe*_*mer 23

最防错的解决方案是使挂载点不可写。这将是您的解决方案#3。但是,您还应该执行一个额外的步骤。chattr +i /mnt/backups. 这是因为即使没有权限,root 仍然可以写入目录。使用chattr +i(设置不可变标志)甚至 root 都无法写入。挂载后,权限无关紧要,因为权限将属于远程目录,而不是本地目录。

  • 我用“encfs”保险丝文件系统尝试了这一点。它给出错误:`fusermount:用户没有对安装点的写访问权限` (2认同)

eww*_*ite 14

数字 5 - 在您的备份脚本中进行测试以确保在继续之前安装目录。如果挂载不可用或不存在,脚本应该会失败。或者您可以确保在运行备份之前安装了东西。

试试这个mountpoint命令,它检查一个指定的目录是否是一个挂载点:

mountpoint -q /mnt/backups || mount /mnt/backups