¿Por qué lsof se queja de tracefs?

11

Cada ejecución de lsofproblemas emite una advertencia sobre 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)

(Esto está en Ubuntu 15.10, completamente actualizado)

¿Es normal que TraceFS se monte durante el funcionamiento normal?
Si es así, ¿cómo puedo decir lsofque lo omita?

Zilk
fuente

Respuestas:

12

La respuesta a su pregunta está en los permisos de archivo:

tratar:

$ 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
...

Por lo tanto, los usuarios normales no pueden acceder /sys/kernel/debug/tracingy parece que no hay forma de pedir lsofque eviten acceder a él.

Entonces podríamos discutir si esto es un error o no, pero la respuesta a su pregunta se reduce a esto.

EnzoR
fuente
¿Qué quieres decir con "error"? "lsof" debe ejecutarse con "sudo" o como "root".
Rinzwind
1
lsof no necesita ejecutarse como root. Podemos discutir sobre su seguridad (ver man lsof) pero definitivamente no necesita ejecutarse solo con subvenciones de superusuario. Se encuentra en / usr / bin no en / usr / sbin.
EnzoR
"No hay forma de evitarlo" es una respuesta perfectamente aceptable. Además, parece que TraceFS ya no se monta de forma predeterminada a partir de Ubuntu 16.04; la advertencia cuando se ejecuta lsofcomo un usuario normal ahora ha desaparecido.
Zilk
3
Estoy en 16.04, no ha desaparecido, sigue siendo un problema.
TenLeftFingers
@TenLeftFingers ¡Está funcionando en mi Kubuntu 16.04 actualizado!
EnzoR
3

Tuve el mismo problema y esta respuesta me ayudó a entender el problema un poco mejor.

Descubrí que una forma de eliminar la molesta advertencia es desmontar debugfs

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

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

Si ahora corre, lsofno hay advertencia.

damko
fuente
2
Esto es realmente por qué vine a buscar. No me importa mucho por qué aparece el error. Realmente solo quiero que se vaya. Gracias damko!
cjac
umount: /sys/kernel/debug: target is busy.
msangel
2

El problema es que no tiene permiso para acceder al directorio de debugfs. El directorio tracefs se creó para permitir que las personas monten el directorio de seguimiento directamente en / sys / kernel / tracing y no requieran habilitar debugfs. Pero para la compatibilidad con versiones anteriores, cuando se monta el directorio debugfs, se montaría automáticamente tracefs en el directorio "rastreo" de debugfs.

Ahora, cuando realiza lsof, mira el archivo / proc / filesystems así como / proc / mounts. Se ve que tracefs está montado en / sys / kernel / debug / tracing y, por lo tanto, intenta estadizarlo. Desafortunadamente, debido a que / sys / kernel / debug no permitirá que los usuarios que no son root vean dentro de él, recibirá el mensaje de error cuando intente establecer el "rastreo" del directorio desde / sys / kernel / debug. Si desmonta el directorio debugfs, la advertencia desaparecerá.

nevets
fuente
0

La advertencia se escribe en stderr. Siempre puede redirigir esto a / dev / null:

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

Salud,

QuickPrototype
fuente