“ cd”进入/ sys / kernel / debug / tracing导致权限更改


10

我今天遇到了一个非常奇怪的问题,对此我完全无能为力。

我管理的某些服务器由Nagios监控。最近,我看到一个磁盘使用情况探测失败,并显示以下错误:

磁盘严重-/ sys / kernel / debug / tracing无法访问:权限被拒绝

我想调查一下,我的第一个尝试是检查此目录权限,并将其与另一台服务器(运行良好的服务器)进行比较。这是我在工作服务器上运行的命令,您将看到我cd进入目录后,其权限便被更改:

# Here we've got 555 for /sys/kernel/debug/tracing
root@vps690079:/home/admin# cd /sys/kernel/debug
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Jul 19 13:13 ../

dr-xr-xr-x  3 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

# I cd into the folder, and it (./) becomes 700!!
root@vps690079:/sys/kernel/debug# cd tracing/
root@vps690079:/sys/kernel/debug/tracing# ll
total 0
drwx------  8 root root 0 Jul 19 13:13 ./
drwx------ 30 root root 0 Jul 19 13:13 ../
-r--r--r--  1 root root 0 Jul 19 13:13 available_events
-r--r--r--  1 root root 0 Jul 19 13:13 available_filter_functions
-r--r--r--  1 root root 0 Jul 19 13:13 available_tracers


# Next commands are just a dumb test to double-check what I'm seeing
root@vps690079:/sys/kernel/debug/tracing# cd ..
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Sep 27 10:57 ../

drwx------  8 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

您知道什么可能导致此行为吗?
附带说明,使用chmod重新获得权限似乎无法解决此问题。


1
提供终端输入的样本时,请考虑ll使用其代表的命令替换非标准别名。
Roman Odaisky

2
@RomanOdaisky这是Ubuntu中的默认别名,可能不知道它不是默认值
GammaGames

除了@tecloM所说的以外,这看起来像是您的内核版本的内核错误。在4.19.0-4上,行为正常。
V13

Answers:


20

/ sys

/syssysfs,是内存中内核结构的完全虚拟视图,反映了当前系统的内核和硬件配置,并且不占用任何实际的磁盘空间。无法以常规方式将新文件和目录写入其中。

对磁盘空间进行监视不会产生有用的信息,而且很浪费精力。它可能在内部具有其他基于RAM的虚拟文件系统的安装点,包括...

/ sys /内核/调试

/sys/kernel/debug是的标准安装点debugfs,它是用于各种内核调试和跟踪功能的可选虚拟文件系统。

因为它是用于调试功能的,所以对于生产用途来说,它是不必要的(尽管您可以选择使用某些功能来增强系统统计信息或类似功能)。

由于debugfs在大多数情况下都需要使用所提供的功能root,并且其主要目的是成为内核开发人员提供调试信息的简便方法,因此可能有些“困难”。

加载内核后,内核跟踪子系统的初始化例程将/sys/kernel/debug/tracing自己注册为debugfs访问点,将任何进一步的初始化推迟到第一次实际访问时进行(以最小化跟踪子系统的资源使用情况)并不需要)。当您cd进入目录时,将触发此延迟的初始化,并且跟踪子系统已准备就绪以供使用。实际上,原始最初/sys/kernel/debug/tracing是一个没有任何实质的海市rage楼,只有当您(并且因为)使用cd命令访问它时,它才变得“真实” 。

debugfs 根本不使用任何实际的磁盘空间:当内核关闭时,其中包含的所有信息将消失。

/ sys / fs / cgroup

/sys/fs/cgroup是一种tmpfs基于RAM的文件系统,用于将各种正在运行的进程分组控制组。它根本不使用实际磁盘空间。但是,如果由于某种原因该文件系统快要装满了,那可能会比只用完磁盘空间更为严重:这可能意味着

a)您的可用RAM即将用完,

B)一些超级用户拥有的过程被写入到垃圾/sys/fs/cgroup,或

c)某种原因导致创建了非常荒谬的控制组,这很可能是经典的“叉子炸弹”风格,但具有systemd基于服务或类似的功能。

底线

磁盘使用情况调查应/sys排除在外,因为/sys任何磁盘上均未存储任何内容。

如果需要监视/sys/fs/cgroup,则应为其提供专用的探针,该探针将比通用磁盘空间探针提供更有意义的警报。


1
感谢您提供我需要的详细信息,这个答案!我将排除/sys我的监视范围。
zessx

1
@zessx:也要排除,/proc并且可能/dev(因为即使不是100%RAM支持,一方面它包含许多以各种方式“怪异”的文件和目录,另一方面,如果您实际上占用大量的磁盘空间/dev,则您的设置被严重破坏,应该将整个混乱状态点燃。)
凯文

/syssysfs,完全基于RAM的虚拟文件系统” –我非常确定,其内容sysfs是100%由内核数据结构合成的,并且存在于RAM中。实际上,我认为“基于RAM的虚拟文件系统”是一种矛盾:要么基于RAM,即具有后备存储(即使它是文件系统的非常传统的后备存储),不是虚拟的,或者它是虚拟的,则它没有后备存储。
约尔格W¯¯米塔格

1
@JörgWMittag注意,我非常小心地避免说sysfs是RAMdisk。无论如何,内核中的数据结构将存放在哪里(如果不在RAM中)?我同意“虚拟”一词在这里是有问题的,因为您可能已经知道,Linux内核中所有文件系统驱动程序的顶层是VFS(虚拟文件系统)层,该层在另一种意义上使用“虚拟”,例如所有可能的文件系统的统一抽象。但是,很难简明地描述与实际文件系统之间的区别procsysfs区别,因为这只是使重点突出的背景信息。
telcoM

1
@grawity我稍微调整了措辞,现在会更好吗?
telcoM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.