为什么 lsof 会对 tracefs 提出抱怨?

为什么 lsof 会对 tracefs 提出抱怨?

每次执行都会lsof发出有关 TraceFS 的警告:

$ lsof any-file
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.

$ mount | grep trace
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)

(这是在 Ubuntu 15.10 上完全更新的)

在正常运行期间安装 TraceFS 是否正常?
如果是,我该如何lsof跳过它?

答案1

您的问题的答案在文件权限中:

尝试:

$ ls -l /sys/kernel/debug/tracing
ls: cannot access '/sys/kernel/debug/tracing': Permission denied
$ ls -l /sys/kernel
total 0
...
drwx------  31 root root    0 2016-06-15 11:06:47 debug
...

因此,普通用户无权访问/sys/kernel/debug/tracing,而且似乎没有办法lsof避免访问。

然后我们可以讨论这是否是一个错误,但你的问题的答案归结为这一点。

答案2

我也遇到了同样的问题,回答帮助我更好地理解了这个问题。

我发现消除烦人的警告的一种方法是卸载 debugfs

mount | grep debugfs 
none on /sys/kernel/debug type debugfs (rw,_netdev)

sudo umount $(mount | grep debugfs | awk '{print $3}')

如果您现在运行,lsof则不会有任何警告。

答案3

问题是您没有权限访问 debugfs 目录。创建 tracefs 目录是为了允许人们直接在 /sys/kernel/tracing 上挂载跟踪目录,而无需启用 debugfs。但为了向后兼容,在挂载 debugfs 目录时,它会自动在 debugfs 的“跟踪”目录中挂载 tracefs。

现在,当您执行 lsof 时,它会查看 /proc/filesystems 文件以及 /proc/mounts。它看到 tracefs 已挂载在 /sys/kernel/debug/tracing 上,因此尝试对其进行统计。不幸的是,由于 /sys/kernel/debug 不允许非 root 用户查看其内部,因此当您尝试从 /sys/kernel/debug 内部统计目录“tracing”时会收到错误消息。如果您卸载 debugfs 目录,警告将消失。

答案4

警告将写入 stderr。您始终可以将其重定向到 /dev/null:

lsof <any-file> 2>/dev/null

干杯,

相关内容