«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 для переустановки разрешений, похоже, не исправляет проблему.

zessx
источник
1
При предоставлении примеров ввода с терминала рассмотрите возможность замены нестандартных псевдонимов, таких как llкоманды, которые они обозначают.
Роман Одайский
2
@RomanOdaisky Это псевдоним по умолчанию в Ubuntu, возможно, не знал, что это не по умолчанию
GammaGames,
В дополнение к тому, что сказал @tecloM, это похоже на ошибку ядра для вашей версии ядра. На 4.19.0-4 поведение нормальное.
V13

Ответы:

20

/ SYS

/sysявляется sysfsполностью виртуальным представлением структур ядра в памяти, которое отражает текущее ядро ​​системы и конфигурацию оборудования и не занимает реального места на диске. Новые файлы и каталоги не могут быть записаны в него обычным способом.

Применение к нему мониторинга дискового пространства не дает полезной информации и является пустой тратой усилий. Он может иметь точки монтирования для других виртуальных файловых систем на основе ОЗУ, в том числе ...

/ SYS / ядро ​​/ отладки

/sys/kernel/debugявляется стандартной точкой монтирования для debugfs, которая является дополнительной виртуальной файловой системой для различных функций отладки и трассировки ядра.

Поскольку он предназначен для отладки функций, предполагается, что он не нужен для производственного использования (хотя вы можете использовать некоторые функции для расширенной статистики системы или аналогичные).

Поскольку использование функций, предлагаемых debugfsв большинстве случаев, в rootлюбом случае потребует , и его основная цель заключается в том, чтобы разработчики ядра могли легко предоставлять отладочную информацию, она может быть немного «грубой по краям».

Когда ядро ​​было загружено, подпрограмма инициализации подсистемы трассировки ядра, зарегистрированная /sys/kernel/debug/tracingдля себя как точка доступа debugfs, откладывает любую дальнейшую инициализацию до фактического доступа к ней в первый раз (сводя к минимуму использование ресурсов подсистемы трассировки в случае, если выясняется, что она не требуется). Когда вы cdпопали в каталог, эта отложенная инициализация была запущена, и подсистема трассировки подготовилась к использованию. По сути, оригинал /sys/kernel/debug/tracingизначально был миражом без содержания, и он стал «реальным» только тогда, когда (и потому что) вы получили к нему доступ с помощью своей cdкоманды.

debugfs вообще не использует никакого реального дискового пространства: вся информация, содержащаяся в нем, исчезнет при выключении ядра.

/ SYS / фс / контрольная группа

/sys/fs/cgroupэто tmpfsфайловая система на основе ОЗУ, используемая для группировки различных запущенных процессов в контрольные группы . Он вообще не использует реальное дисковое пространство. Но если эта файловая система по какой-то причине почти заполнена, это может быть более серьезным, чем просто нехватка места на диске: это может означать, что

а) у вас заканчивается свободное ОЗУ,

б) какой-то коренной процесс пишет мусор /sys/fs/cgroup, или

c) что-то вызывает создание действительно абсурдного числа контрольных групп, возможно, в стиле классической «бомбы-вилки», но с systemdуслугами на основе или аналогичными.

Нижняя граница

Проверка использования диска должна была быть /sysисключена, потому что /sysна каком-либо диске ничего не хранится.

Если вам необходим мониторинг /sys/fs/cgroup, вы должны предоставить для него специальный зонд, который будет предоставлять более значимые предупреждения, чем общий зонд дискового пространства.

Телком
источник
1
Спасибо за этот ответ с таким количеством деталей, сколько мне нужно! Я исключу /sysиз моего диапазона мониторинга.
Zessx
1
@zessx: также исключить /procи, вероятно, /dev(потому что, даже если он не поддерживает 100% оперативной памяти, с одной стороны, он содержит несколько файлов и каталогов, которые являются «странными» по-разному, а с другой, если вы на самом деле потребляя тонну дискового пространства /dev, ваша установка ужасно сломана, и вы должны зажечь весь беспорядок).
Кевин
« /sysЭто sysfs, полностью RAM на основе виртуальной файловой системы» - я уверен , что содержание sysfsявляются 100% синтезируется из находящихся в ядре структур данных и делать не живут в памяти где - то. Фактически, я бы сказал, что «виртуальная файловая система на основе ОЗУ» является оксюмороном: либо она основана на ОЗУ, то есть имеет резервное хранилище (даже если это очень нетрадиционное резервное хранилище для файловой системы), то не виртуальный или виртуальный, то у него нет резервного хранилища.
Йорг Миттаг
1
@ JörgWMittag Обратите внимание, что я очень осторожно избегал говорить, sysfsчто это RAM-диск. Где будут жить структуры данных в ядре, если не в ОЗУ? Я согласен с тем, что слово «виртуальный» здесь проблематично, поскольку вы, возможно, знаете, что поверх всех драйверов файловой системы в ядре Linux находится уровень VFS (Virtual File System), который использует «виртуальный» в еще одном смысле, как единая абстракция для всех возможных файловых систем. Но сложно кратко описать, как procи чем sysfsони отличаются от реальных файловых систем, так как это была просто справочная информация, чтобы сделать основной вопрос.
Телеком
1
@ Grawity Я немного подправил формулировку, теперь будет лучше?
Телеком