Вопрос или проблема
Я выясняю, почему мои файлы дампов памяти удаляются при каждой перезагрузке. Я проверил каталог /etc/tmpfiles.d/ и он пуст. Я проверил /usr/lib/tmpfiles.d/systemd.conf и нашёл:
# Обрабатывать временные файлы потерянных дампов памяти systemd. Они могут быть потеряны на старых файловых системах,
# например, после жесткой перезагрузки.
x /var/lib/systemd/coredump/.#core*.%b*
r! /var/lib/systemd/coredump/.#*
Я пытаюсь понять мануал, но кажется, что первая строка говорит об исключении каталога /var/lib/systemd/coredump/XXX полностью. (Я не понимаю синтаксис .#core..%b). А вторая строка говорит об удалении пустых каталогов в /var/lib/systemd/coredump/XXX и рекурсивно. (Снова, суффикс, который я не могу объяснить).
Удаляет ли какая-либо из этих двух строк мои файлы дампов памяти при каждой перезагрузке? Решу ли я проблему, если скопирую systemd.conf в /etc/tmpdilfes.d/coredump.conf и изменю как показано ниже:
x /var/lib/systemd/coredump/.#core*.%b* 0755 root root 20d
r! /var/lib/systemd/coredump/.#* 0755 root root 20d
Это задокументировано в tmpfiles.d(5)
мануале.
r
строки описывают файлы для удаления. С модификатором типа !
, строка r!
означает, что очистка происходит только во время загрузки, а не во время периодических очисток. Шаблон .#*
соответствует файлам, имя базовой строки которых начинается с литеральных двух символов .#
. Это временные файлы, используемые systemd (здесь, его службой дампов памяти), а не фактические дампы памяти (у них имя, которое не начинается с .#
).
Строки x
являются исключениями, и раньше они не применялись к строкам r
, но с версии systemd v256 они применимы (выпущена в июне 2024 года, поэтому пока не внедрена в большинстве стабильных дистрибутивов). В пути %b
является спецификатором, который заменяется уникальным идентификатором, создаваемым во время загрузки. Таким образом, эта строка x
игнорирует временные файлы, созданные с последней загрузки. Намерение заключается в том, чтобы игнорировать временные файлы для дампа памяти, который хранится в то время, когда выполняется задача очистки.
Если кто-то удаляет ваши файлы дампов, это не контролируется этими строками tmpfiles.d.conf
. Возможно, применяется другая строка конфигурации tmpfiles.d. Попробуйте systemd-tmpfiles --boot --dry-run
, если ваша версия systemd достаточно свежая, или systemd-tmpfiles --boot --cat-config
в противном случае. Либо может быть, это делает другое программное обеспечение. Также обратите внимание, что если вы пытаетесь посмотреть дампы через coredumpctl
, они должны быть ссылками из журнала.
Ответ или решение
Проблема с исчезновением файлов дампов ядра при перезагрузке может быть связана с несколькими аспектами настройки системы, в частности с конфигурацией tmpfiles.d
. Давайте рассмотрим, что происходит и как это можно исправить.
Анализ конфигурации tmpfiles.d
В вашем случае вы указали, что конфигурационный файл /usr/lib/tmpfiles.d/systemd.conf
содержит следующие строки:
x /var/lib/systemd/coredump/.#core*.%b*
r! /var/lib/systemd/coredump/.#*
Строка x
:
- Эта строка используется для определения исключений. Символ
x
указывает системе, что файлы, соответствующие шаблону/var/lib/systemd/coredump/.#core*.%b*
, не должны удаляться во время процесса очистки. Формат%b
представляет собой спецификатор, который заменяется на уникальный идентификатор, сгенерированный во время загрузки. Таким образом, строка исключает временные файлы, созданные после последней загрузки.
Строка r!
:
- Эта строка указывает на удаление файлов, соответствующих шаблону
/.#*
. Здесь!
означает, что удаление будет происходить только во время загрузки, а не во время периодической очистки. Этот шаблон на самом деле соответствует временным файлам, которые создает система для системного дага, и не затрагивает настоящие дампы ядра, так как у последних имена не начинаются с точки и решетки.
Выводы
- Ни одна из указанных строк не удаляет ваши файлы дампов ядра, так как они не соответствуют условию поиска для удаления.
- Если ваши дампы все равно исчезают, проблема может заключаться в другой конфигурации
tmpfiles.d
или в стороннем процессе, который управляет этими файлами.
Рекомендации
-
Проверка других конфигурационных файлов:
Изучите директории/etc/tmpfiles.d/
и/usr/lib/tmpfiles.d/
, чтобы выяснить, есть ли другие файлы с правилами, которые могут затрагивать дампы ядра:grep -R 'coredump' /etc/tmpfiles.d/ /usr/lib/tmpfiles.d/
-
Тестирование с
systemd-tmpfiles
:
Вы можете использовать команду для проверки, что произойдет с файлом при запуске очистки:systemd-tmpfiles --boot --dry-run
Это позволит вам увидеть, какие файлы будут тронуты во время следующей загрузки, не применяя изменения.
-
Проверка на другие процессы:
Существует вероятность, что другие службы или программное обеспечение также могут удалять файлы. Обратите внимание на настройки вашей системы, особенно в конфигурациях, связанных сsystemd
, и другие механизмы управления временными файлами. -
Настройка конфигурации:
Если вы хотите изменить параметры, скопировав файлsystemd.conf
в папку/etc/tmpfiles.d/
и изменив его, это также допустимо. Однако изменения, которые вы предлагаете, не приведут к отмене удаления временных файлов, так как они снова касаются только этих временных файлов. Основная проблема может быть решена путем изменения конфигурации или выяснения, какие другие услуги могут влиять на ваши дампы.
Заключение
Итак, основанная на вашем вопросе проблема удаления дампов ядра не связана с конфигурацией tmpfiles.d
, указанной вами. Рекомендуем вам провести более детальный анализ других конфигурационных файлов и программ, которые могут взаимодействовать с этими файлами. Если после этих шагов проблема не решится, возможно, стоит рассмотреть более глубокое исследование с помощью логов системы, чтобы понять, какие процессы пытаются удалять файлы.