关于 /proc/sys/fs/ 的文档

版权所有 (c) 1998, 1999, Rik van Riel <riel@nl.linux.org>

版权所有 (c) 2009, Shen Feng<shen@cn.fujitsu.com>

有关常规信息和法律信息,请查看 intro.rst。


此文件包含 /proc/sys/fs/ 中 sysctl 文件和目录的文档。

此目录中的文件可用于调整和监视 Linux 内核操作中的各种杂项和常规事项。由于某些文件可以用来搞乱您的系统,因此建议在实际进行调整之前阅读文档和源代码。

1. /proc/sys/fs

目前,这些文件可能会(取决于您的配置)出现在 /proc/sys/fs

aio-nr & aio-max-nr

aio-nr 显示当前系统范围内的异步 IO 请求数。aio-max-nr 允许您更改 aio-nr 可以增长到的最大值。如果 aio-nr 达到 aio-nr-max,则 io_setup 将失败并显示 EAGAIN。请注意,提高 aio-max-nr 不会导致任何内核数据结构的预分配或调整大小。

dentry-negative

负 dentry 的策略。设置为 1 以在删除文件时始终删除 dentry,设置为 0 以禁用它。默认情况下,此行为被禁用。

dentry-state

此文件显示 fs/dcache.c 中定义的 struct dentry_stat_t 中的值

struct dentry_stat_t dentry_stat {
      long nr_dentry;
      long nr_unused;
      long age_limit;         /* age in seconds */
      long want_pages;        /* pages requested by system */
      long nr_negative;       /* # of unused negative dentries */
      long dummy;             /* Reserved for future use */
};

Dentry 是动态分配和释放的。

nr_dentry 显示分配的 dentry 总数(活动 + 未使用)。nr_unused shows 显示未积极使用但保存在 LRU 列表中以供将来重用的 dentry 数量。

age_limit 是以秒为单位的期限,在此期限之后,当内存不足时可以回收 dcache 条目,并且当调用 shrink_dcache_pages() 且 dcache 尚未修剪时,want_pages 为非零。

nr_negative 显示未使用的 dentry 的数量,这些 dentry 也是不映射到任何文件的负 dentry。相反,它们有助于加快拒绝用户提供的非现有文件。

file-max & file-nr

file-max 中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量关于文件句柄耗尽的错误消息时,您可能需要增加此限制。

历史上,内核能够动态分配文件句柄,但不能再次释放它们。file-nr 中的三个值表示已分配的文件句柄数、已分配但未使用的文件句柄数以及最大文件句柄数。Linux 2.6 及更高版本始终报告 0 作为空闲文件句柄的数量 - 这不是错误,它只是意味着已分配的文件句柄数与使用的文件句柄数完全匹配。

尝试分配超过 file-max 的文件描述符会使用 printk 报告,请在内核日志中查找

VFS: file-max limit <number> reached

在内核日志中。

inode-nr & inode-state

与文件句柄一样,内核动态分配 inode 结构,但尚无法释放它们。

文件 inode-nr 包含 inode-state 中的前两项,因此我们将跳到该文件...

inode-state 包含三个实际数字和四个虚拟数字。实际数字按出现顺序依次为 nr_inodesnr_free_inodespreshrink

nr_inodes 代表系统已分配的 inode 数量。

nr_free_inodes 表示空闲 inode 的数量 (?),当系统需要修剪 inode 列表而不是分配更多 inode 时,preshrink 为非零。

mount-max

这表示挂载命名空间中可能存在的最大挂载数。

nr_open

这表示一个进程可以分配的最大文件句柄数。默认值为 1024*1024 (1048576),这对于大多数机器来说应该足够了。实际限制取决于 RLIMIT_NOFILE 资源限制。

overflowgid & overflowuid

某些文件系统仅支持 16 位 UID 和 GID,尽管在 Linux 中 UID 和 GID 为 32 位。当以启用写入的方式挂载这些文件系统之一时,任何将超过 65535 的 UID 或 GID 在写入磁盘之前都会转换为固定值。

这些 sysctl 允许您更改固定 UID 和 GID 的值。默认值为 65534。

pipe-user-pages-hard

非特权用户可以为管道分配的最大页面总数。一旦达到此限制,将无法分配新的管道,直到使用量再次低于该限制。当设置为 0 时,不应用任何限制,这是默认设置。

pipe-user-pages-soft

非特权用户在管道大小被限制为单个页面之前,可以为管道分配的最大总页数。一旦达到此限制,为了限制总内存使用,该用户的新管道大小将被限制为单个页面,并且使用 fcntl() 尝试增加管道大小的操作将被拒绝,直到使用量降至限制以下。默认值允许分配多达 1024 个默认大小的管道。设置为 0 时,不应用任何限制。

protected_fifos

此保护的目的是避免意外写入攻击者控制的 FIFO,而程序本应创建一个常规文件。

设置为“0”时,对 FIFO 的写入不受限制。

设置为“1”时,不允许在全局可写粘性目录中对我们不拥有的 FIFO 进行 O_CREAT 打开操作,除非它们的所有者是该目录的所有者。

设置为“2”时,它也适用于组可写粘性目录。

此保护基于 Openwall 中的限制。

protected_regular

此保护类似于 protected_fifos,但它可以避免写入攻击者控制的常规文件,而程序本应创建一个常规文件。

设置为“0”时,对常规文件的写入不受限制。

设置为“1”时,不允许在全局可写粘性目录中对我们不拥有的常规文件进行 O_CREAT 打开操作,除非它们的所有者是该目录的所有者。

设置为“2”时,它也适用于组可写粘性目录。

suid_dumpable

此值可用于查询和设置 setuid 或其他受保护/污染的二进制文件的核心转储模式。模式包括:

0

(默认)

传统行为。任何更改了特权级别或仅可执行的进程都不会被转储。

1

(调试)

所有进程在可能时都会转储核心。核心转储归当前用户所有,并且不应用任何安全措施。这仅适用于系统调试情况。Ptrace 未选中。这是不安全的,因为它允许普通用户检查特权进程的内存内容。

2

(suidsafe)

任何通常不会被转储的二进制文件都会被转储,但前提是 core_pattern 内核 sysctl(请参阅 Documentation/admin-guide/sysctl/kernel.rst)设置为管道处理程序或完全限定的路径。(有关此限制的更多详细信息,请参阅 CVE-2006-2451。)当管理员尝试在正常环境中调试问题,并且具有知道如何谨慎处理特权核心转储的核心转储管道处理程序,或者定义了用于捕获核心转储的特定目录时,此模式是合适的。如果核心转储发生在没有管道处理程序或完全限定路径的情况下,则会向系统日志发出一条消息,警告缺少正确的设置。

2. /proc/sys/fs/binfmt_misc

/proc/sys/fs/binfmt_misc 中文件的文档位于 杂项二进制格式的内核支持 (binfmt_misc) 中。

3. /proc/sys/fs/mqueue - POSIX 消息队列文件系统

“mqueue”文件系统提供了必要的内核功能,以启用用户空间库的创建,该库实现了 POSIX 消息队列 API(如 POSIX 1003.1-2001 版系统接口规范中的 MSG 标记所示)。

“mqueue”文件系统包含用于确定/设置文件系统所用资源量的值。

/proc/sys/fs/mqueue/queues_max 是一个读/写文件,用于设置/获取系统上允许的最大消息队列数。

/proc/sys/fs/mqueue/msg_max 是一个读/写文件,用于设置/获取队列中的最大消息数的值。实际上,它是 mq_open 调用中设置的另一个(用户)限制的限制值。队列的此属性必须小于或等于 msg_max

/proc/sys/fs/mqueue/msgsize_max 是一个读/写文件,用于设置/获取最大消息大小值(它是每个消息队列的属性,在创建期间设置)。

/proc/sys/fs/mqueue/msg_default 是一个读/写文件,用于设置/获取队列中消息的默认值(如果 mq_open(2)attr 参数为 NULL)。如果它超过 msg_max,则默认值初始化为 msg_max

/proc/sys/fs/mqueue/msgsize_default 是一个读/写文件,用于设置/获取消息大小的默认值(如果 mq_open(2)attr 参数为 NULL)。如果它超过 msgsize_max,则默认值初始化为 msgsize_max

4. /proc/sys/fs/epoll - epoll 接口的配置选项

此目录包含 epoll(7) 接口的配置选项。

max_user_watches

每个 epoll 文件描述符可以存储许多要监视事件就绪的文件。每个被监视的文件都构成一个“观察”。此配置选项设置每个用户允许的最大“观察”次数。在 32 位内核上,每个“观察”大约花费 90 个字节,在 64 位内核上大约花费 160 个字节。max_user_watches 的当前默认值是可用低内存的 4%,除以“观察”的字节成本。

5. /proc/sys/fs/fuse - FUSE 文件系统的配置选项

此目录包含以下 FUSE 文件系统的配置选项

/proc/sys/fs/fuse/max_pages_limit 是一个读/写文件,用于设置/获取 FUSE 中用于处理请求的最大页数。