Созданный вами каталог - это просто пустая оболочка. Независимо от того, какое имя вы ему дали и какой владелец, как только появится новая файловая система, единственное, что будет интересно, - это имя каталога. Новая файловая система накладывается на эту точку монтирования, и все права собственности и разрешения остаются теми же, что и на этом новом диске. Старая информация о каталоге, а также наличие в нем какого-либо содержимого теперь невидима для операционной системы
Из справочной страницы systemd -journald :
The journal service stores log data either persistently below /var/log/journal or in a volatile way below /run/log/journal/ (in the latter case it is lost at reboot). By default, log data is stored persistently if /var/log/journal/ exists during boot, with an implicit fallback to volatile storage otherwise. Use Storage= in journald.conf(5) to configure where log data is placed, independently of the existence of /var/log/journal/.
Таким образом, журнал можно и безопасно хранить в другом месте. Вам останется только добавить/изменить
Storage=/some-filesystem-with-free-space/some-dir/
Насколько я могу судить, нет способа изменить расположение предопределенных каталогов журналов systemd, /run/log/journal
и /var/log/journal
. С помощью опции конфигурации Storage
можно выбрать, какая из этих двух опций будет использоваться. Но вы не можете изменить путь к /anotherfs/log/journal
.
Что вы можете сделать, так это сделать /var/log/journal символической ссылкой на другой каталог, и чтобы этот каталог находился в другой файловой системе. Systemd -tmpfiles может автоматически сделать эту ссылку.
Перетащите файл с этим в/etc/tmpfiles.d/
:
L /var/log/journal - - - - /anotherfs/journal
Теперь, если /var/log/journal
не существует, это будет ссылка на другую файловую систему, и журнал будет идти туда.
Но тогда вы, скорее всего, столкнетесь с другой проблемой. Journald переключится с использования постоянного журнала, отличного от -, в /run на постоянный журнал в /var во время загрузки и сбросит данные журнала из /run в /var. Очевидно, нам нужно, чтобы этот переключатель произошёл после монтирования /anotherfs
! Если бы символическая ссылка указывала на rootfs или на ту же fs, что и /var/log
, то это не было бы проблемой, и она отлично работала бы как способ изменить путь, по которому находятся данные журнала.
Способ, которым этот порядок, монтирование файловой системы, затем сброс журнала, обычно достигается за счет systemd-journal-flush.service
наличия свойства RequiresMountsFor=/var/log/journal
. Если /var/log/journal
является символической ссылкой, systemd ожидает монтирования только файловой системы, в которой находится сама ссылка, а не того, на что указывает ссылка. Так что заказ не работает.
Мы можем обойти это с помощью бинд-маунтов. Вместо символической ссылки /var/log/journal
на другую фс мы привязываем монтирование каталога из другой фс (или напрямую монтируем другую фс, если другая фс предназначена только для журнала )на /var/log/journal
.
Создайте юнит-файл, который должен быть названvar-log-journal.mount
:
[Unit]
Description=Persistent Journal Storage Bind
[Mount]
What=/anotherfs/journal
Where=/var/log/journal
Type=none
Options=bind
[Install]
WantedBy=local-fs.target
Установите и включите это. Теперь блок промывки журнала увидит, что дляvar-log-journal
(есть блок крепления, он ищет только это точное имя! )и подождите. Модуль монтирования привязывает монтирование каталога /anotherfs/journal
к /var/log/journal
.Systemd автоматически добавит упорядоченные зависимости для ожидания монтирования /anotherfs
, если это необходимо, и автоматически создаст точку монтирования /var/log/journal
, если ее еще нет.