При отладке тупика - systemd теряет мои журналы

Все следующие причины, польза, которую Вы извлекаете из ядра FreeBSD:

  • Стандартизированные интерфейсы ядра:

    • Единственная/dev реализация через devfs, вместо 3 противоречащих способов обработать/dev, который обеспечивает Linux.

    • OSS как аудиосистема по умолчанию (т.е. стандартный интерфейс
      поддерживаемый почти каждой подобной Unix системой вокруг).

    • Фильтр пакетов OpenBSD (pf).

  • Средства защиты, как тюрьмы.

  • Поддержка драйверов NDIS в ядре магистрали. На Linux NdisWrapper вряд ли превратит его в ядро магистрали.

  • Поддержка ZFS в ядре магистрали. Должный лицензировать и запатентовать проблемы, ZFS вряд ли появится на Linux.

  • kFreeBSD менее уязвим для юридических вопросов. Лицензиями управляют централизованным способом по сравнению с подобной базару моделью разработки ядра Linux.

  • у разработчиков kFreeBSD часто есть больше интереса к слиянию новых возможностей вместо того, чтобы породить ветвления все время (порт к Xbox является очень хорошим примером).

  • kFreeBSD может иметь лучшую производительность и/или устойчивость особенно в областях диска/файловой системы с ZFS.

  • Ядро FreeBSD могло бы поддерживать некоторые аппаратные средства, которые не поддерживает Linux, и/или поддержка ядра FreeBSD могла бы быть лучше (меньше ошибок).

Почему Вы предпочли бы Debian GNU/kFreeBSD FreeBSD?

  • если Вам нравится система пакета Debian (или ее набор пакета) больше, чем порты FreeBSD (просто вопрос предпочтения).

  • Если Вам нравится пространство пользователя GNU больше, чем BSDish один (снова, просто вопрос предпочтения).

  • Если у Вас ничего не будет против GPL или других copylefted лицензий бесплатного программного обеспечения, то Вы будете ценить, что полезные модули ядра как ext2fs драйвер, предстоящий reiserfs и xfs или предстоящий драйвер Ethernet для Xbox (или будет), скомпилированный в на ядре по умолчанию.

  • Если Вы будете обеспокоены выполнением 100%-й свободной системы, то наша приверженность Инструкциям по бесплатному программному обеспечению Debian (DFSG) гарантирует, что Debian GNU/kFreeBSD не содержит небесплатного программного обеспечения. На самом деле мы удалили некоторые несвободные драйверы только для двоичного файла, которые содержатся в восходящем дереве FreeBSD.

От официальной Wiki там можно найти больше точек на том, почему предпочесть GNU/Linux Debian и не быть полностью FreeBSD.

8
23.09.2017, 23:16
2 ответа

Таким образом, я спросил относительно #systemd канала IRC, и оказывается, что журналировал (регистрирующийся демон systemd) периодически не сбрасывает журналы к диску вообще. Это означает, что Ваши журналы всегда находятся в опасности в любое время.

Отправка SIGUSR2 к journald причины регистрируются, чтобы быть записанными в диск, но если Вы сделаете это многократно, то много файлов будут созданы. (опция на самом деле описана как "вращение журнала").

В конце я решил пойти с другим предложением: использование преданного демона системного журнала для сбора журналов ядра. Поскольку rsyslog был предложен (и у меня уже был опыт с ним), я исследовал ту опцию далее. Я записал еще некоторые детали в Дуге Wiki об использовании rsyslog.

Идея состоит в том, чтобы выполнить rsyslog, собрав только данные из средства ядра. Поскольку rsyslog читает из /proc/kmsg (который позволяет только единственному читателю), и журналируемые чтения от /dev/kmsg (несколько читателей позволили), нет никакого способа, которым демоны теряют журналы (очень важный для меня!). Настройте rsyslog, чтобы записать сообщения ядра в файл и удостовериться, что этот файл повернут для предотвращения еды дискового пространства.

Это решение не идеально:

  • Другие журналы (например, от NetworkManager) потеряны. Это могло быть решено путем передачи большего количества журналов от системного журнала до журналируемого (это означает дублирование!)
  • Дублирование журналов. Сообщения ядра записаны в два файла. Это - надуманный вопрос, в целом количество журналов является небольшим, и у Вас было бы больше копий журналов, чем ни одного. Можно также использовать быстрые инструменты как grep на единственном файле журнала или более более медленном, но более необычный journalctl.

Существует объект TODO для сбрасывания журналов более часто, но это все еще не достаточно надежно:

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

Теперь, надо надеяться, systemd/journald получит опцию записать журналы в диск, но между тем мы можем объединить инструменты для достижения цели.

4
27.01.2020, 20:12

Есть два обновления:

  1. Теперь, надеюсь, systemd / journald получит возможность записывать журналы на диск, но Между тем мы можем комбинировать инструменты для достижения цели.

Есть опция - sync :

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

- sync , доступная с v228 :

journalctl получил новый переключатель «--sync», который просит демон журнала записывать все пока незаписанные сообщения журнала на диск и синхронизировать файлы, прежде чем вернуться.

  1. Оказывается, journald (демон ведения журнала systemd) вообще не периодически сбрасывает журналы на диск.Это означает, что ваши журналы всегда под угрозой.

man journald.conf (5) говорит:

SyncIntervalSec =

Тайм-аут перед синхронизацией файлов журнала на диск. После синхронизации файлы журнала переводятся в состояние OFFLINE. Обратите внимание, что синхронизация безоговорочно выполняется сразу после регистрации сообщения журнала с приоритетом CRIT, ALERT или EMERG. Таким образом, этот параметр применяется только к сообщениям уровней ERR, WARNING, NOTICE, INFO, DEBUG. Тайм-аут по умолчанию составляет 5 минут.

SyncIntervalSec = доступно с v199 :

journald теперь явно сбрасывает файлы журнала на диск не позднее, чем через 5 минут после каждой записи. Затем файл также будет помечен как автономный до следующей записи. Это должно повысить надежность в случае аварии. Задержку синхронизации можно настроить с помощью SyncIntervalSec = в journald.conf.

См. Также:

journald: отправка SIGTERM / SIGINT с низким приоритетом

Давайте обязательно обработаем все данные журнала в очереди перед выходом, чтобы мы не теряли ненужные сообщения при закрытии вниз.

2
27.01.2020, 20:12

Теги

Похожие вопросы