为文件系统上的 root 保留空间 - 为什么?

sui*_*eek 114 filesystems root disk-usage

我知道默认情况下,新创建的文件系统将使用为 root 分配的空间的 5% 创建。我也知道您可以通过以下方式更改定义的空间:

tune2fs -m 1 /dev/sdXY
Run Code Online (Sandbox Code Playgroud)

不过,我很好奇的是,这个保留空间的实际用途是什么。它是否有任何实际用途,在某些情况下值得超过 5% 的空间?

我偶然发现这个问题的原因是我们最近构建了一个 1TB 的文件存储,并且无法弄清楚为什么 df -h 让我们丢失了 5% 的容量。

mat*_*tdm 113

为重要的根进程(以及可能的救援行动)节省空间是原因之一。

但还有一个。Ext3 非常擅长避免文件系统碎片化,但是一旦超过 95% 以上,这种行为就会崩溃,突然文件系统性能变得一团糟。因此,保留 5% 为您提供了一个缓冲。

正如Linux 文件系统开发人员/大师 Theodore Ts'o解释的那样, Ext4 应该在这方面做得更好:

如果您将保留块计数设置为零,则不会对性能产生太大影响,除非您长时间运行(创建和删除大量文件)而文件系统几乎已满(即高于 95%),在这一点上,您将遇到碎片问题。Ext4 的多块分配器具有更强的抗碎片性,因为它更难找到连续的块,因此即使您不启用其他 ext4 功能,您也会看到更好的结果,只需在文件系统之前使用 ext4 挂载 ext3 文件系统完全满了。

如果您只是将文件系统用于长期存档,其中文件不会经常更改(即,巨大的 mp3 或视频存储),这显然无关紧要。

  • 如 https://superuser.com/a/1257550/38062 所述,这些“90%”和“95%”数字起源于 1980 年代对伯克利 FFS 的测量。在此后的几十年里,其他人已经挑战了这种经常被接受的智慧。 (4认同)
  • 对于使用此保留空间的普通用户来说,不会降低性能。他们只会比预期更早地获得设备上的空间。然而,根目录将有足够的空间来解决填充磁盘的任何问题。 (2认同)

Law*_*ceC 48

如果您允许其他人通过 ssh 登录到您的系统,例如,保留这 5% 的块可确保外部用户无法填满磁盘。即使您不允许其他人登录到您的系统,保留块也可以防止不是以 root 身份运行的程序填满您的磁盘。


Gil*_*il' 25

默认值 5% 用于系统分区。例如,如果您的磁盘空间已满,系统日志 ( /var/log) 和 root 的邮箱 ( /var/mail/root) 仍然可以接收重要信息。对于一个/home或一般的数据存储分区,不需要为 root 留任何空间。对于特殊需要,您可以更改获得紧急空间的用户 ( tune2fs -u 1234)。

不允许 ext[234] 文件系统变满还有另一个原因,那就是fragmentation


Dav*_*ett 23

保留块后,您的用户以及以特定用户身份运行而不是以 root 身份运行的服务无法填充文件系统并可能破坏需要写入所述文件系统的其他内容 - 尽管以 root 身份运行的服务仍然可以完全完成当然满了。

当用户抱怨磁盘已满或服务因文件系统已满而开始失败时,它还为您提供了一些工作空间。例如,您可以在删除之前将一些文件存档到 zip/gz/7zip 存档中(尽管如果文件系统已满,您可能还有其他一些可用的文件系统,您可以在其中创建存档文件)。

很长一段时间以来,5% 一直是默认值,从那时起磁盘还小得多(几十兆字节而不是几百 GB),所以 5% 并不是那么多。幸运的是,它可以像您所说的那样轻松地调整到较小的百分比,或者如果您使用tune2fs's-r选项而不是-m. 在这两种情况下,你可以给0参数来完全关闭保留关闭-我不会做到这一点的//tmp/var等等,但你可能要为文件系统,仅作为用户存储(说一个全球性的文件-共享)或只保存固定大小的文件(如固定大小的虚拟机),这些文件只会在您创建新文件时增长。