防止用户填满所有可用 btrfs 磁盘空间的最佳方法?

防止用户填满所有可用 btrfs 磁盘空间的最佳方法?

许多年前,我有一个应用程序失控并填满了所有磁盘空间。这会导致维护某种数据库(广义上)的系统进程写入失败,从而导致这些数据库损坏。我想避免这种情况。

使用 ext2/3/4,可以为超级用户保留一定百分比的磁盘空间,使用恰好用于此目的-m的选项mke2fs(“允许 root 拥有的守护进程,例如 syslogd(8))在非- 阻止特权进程写入文件系统”)。

然而,我更喜欢 btrfs 而不是 ext2/3/4,因为它的快照功能,而 btrfs 没有这样的选项。它有磁盘配额,但这些往往会导致快照的性能问题,而且我还发现它们不可靠。

另一个想法是为用户可写空间设置单独的分区,但是为/home,/tmp/var/tmp(还有更多用户可写位置吗?)设置单独的分区感觉有点矫枉过正,并且每个分区都必须比单独的预测使用情况有一些安全余量,浪费磁盘空间。

还有其他选择吗?

答案1

您使用单独分区的想法是目前唯一可行的想法。然而,这确实并不过分。人们为此目的一直使用单独的分区几十年因为它有效。一些一般建议:

  • /home当不使用 BTRFS 时,位于单独的分区上是许多发行版的标准配置,因此所有主要软件都已对其提供了良好的支持。这是最值得担心的地方,因为 95% 的用户会将 95% 的文件放置在此处。
  • /tmp实际上理想情况下不应是分区。您几乎肯定希望它成为tmpfs具有自身尺寸限制的安装座。这通常会提高性能并避免浪费磁盘空间,因为/tmp大多数时候几乎不会放入任何大于几 KB 的数据。
  • /var/tmp成为坐骑也可能会更好tmpfs,特别是如果你有地段RAM 和相当数量的交换空间。
  • 除此之外,根据您的具体系统配置,用户可能将任意数量的数据(直接或间接)写入/var/lib/var/cache/var/games(如果没有/var/lib/games)、/var/mail/var/spool,以及可能用于网络服务(/var/www/var/ftp用于网络服务)的任何存储目录。例子)。就我个人而言,我只是将/var/cache/var/spool、 和/var/lib放在它们自己的分区上,当它们开始变满时,只需将/var/cache. /var/mail如果您实际使用它,则几乎应该始终是它自己的分区,尽管 BTRFS 可能不是最佳选择。
  • 可能还有其他地方。官方FHS可能会引起一些兴趣,因为它列出了几乎所有 Linux 发行版使用的标准布局,并提到了什么放在哪里。

相关内容