装载失败时防止根系统装满的最佳方法是什么?

我们有一个内部Web服务器(虚拟化,托pipeReviewBoard,但不是超级相关的),而且我们有一个相对一致的失败模式,NFS挂载失败导致/填满。 发行版是Ubuntu(不要问)如果一个解决scheme依赖于不同的发行版,实现起来会慢一些。

备份正在执行/ mnt / backup /,这应该是NFS挂载到另一个系统。 遗憾的是,当挂载失败或丢弃时,备份将在根文件系统上执行,正如您可以想象的那样,在/满之前不需要太久,然后服务就开始失败。

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

  1. 监视/ mnt /备份,并确保它不是根。 也许是一个cron工作。

  2. 首先使用/ mnt / protected / backups,然后mount / protected首先到一个小文件系统,也许是一个循环挂载到本地文件,所以不太可能失败。

  3. Chmod a-rwx / mnt / backups(根文件系统挂载点)。 我不确定是否安装了受保护的导演会工作,我想是的。

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

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

我感兴趣的是对这些方法的反馈意见,优点缺点或者其他任何人们用来作为保护根文件系统的标准方法的方法。

5号 – 在备份脚本中进行testing,以确保在继续之前安装目录。 如果挂载不可用或存在,脚本将会失败。 或者,您可以确保在运行备份之前安装了所有东西。

尝试使用mountpoint命令,该命令检查指定的目录是否为挂载点:

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

最防错的解决scheme是使安装点不可写入。 这将是你的解决scheme#3。 但是,您应该执行另外一个步骤。 chattr +i /mnt/backups 。 这是因为即使没有权限,root仍然可以写入目录。 随着chattr +i (设置不可变的标志)甚至没有根可以写入它。 一旦挂载安装,权限不要紧,因为权限将是远程目录,而不是本地的权限。

什么ewwhite说。 此外,一些额外的基础系统健康监测不是一个坏主意。

像Monit这样的东西可以查看剩下多less空间 。 如果你想在系统监控方面全力以赴,你可以看看Nagios,但是Monit是轻量级的,并且会做基础。

由于您使用的是Ubuntu,Monit已经在回购,所以您可以执行“sudo apt-get install monit”,然后开始查看configuration文件,告诉它发送警报到正确的位置,监视正确的服务等这是一个快速教程 。

这是一个可以作为cron作业运行的单行程序,它假定有问题的挂载位于fstab中:

 if mountpoint -q /mnt ; then : ; else mount /mnt ; fi 

对于更长期的解决scheme:不知道如何在Ubuntu上(我是RH中心的)或者如果它是值得的(如果你只有一台机器),但是已经为我们工作了好多年的方法,就是创build单独的逻辑卷,文件系统甚至服务器机器上的卷组。 因此,作为标准实践,我们为/,/ tmp创buildLVM逻辑卷。 / usr,/ usr / local,/ opt,/ home,/ var,交换空间和/ boot的独立分区。 这种方法使文件系统填满和禁用系统变得非常困难。 实际上这种方法几乎不可能填满/文件系统。 你当然还需要看/ tmp,/ var。 如果我们需要存储数据,那么我们为它创build一个完全不同的卷组。 这种方法也有其他的好处,可以随意扩展文件系统,移动它们,创build新的文件系统等等。作为一个历史logging,我们在20世纪90年代从AIX操作系统转到了Linux系统。