Pet*_*RGA 1 logs mount systemd-journald
我想将默认journal
目录存储/var/log/journal/
在已安装的设备上,但我不确定我是否可以这样做,因为这journal
是一项重要的服务,可能在安装任何设备之前已经运行,这会导致突然直接改变。
将journal
目录存储在已安装的设备上是否安全/可能,如果是,如果简单的安装不起作用,该怎么做。
journal
条目中的目录列表:
2019-03-18 22:16:41 root@AAEB-APP206LY:/var/log/journal/d41cf15550e34487abe7103b61fbf794 => ll
total 792M
drwxr-sr-x 1 root systemd-journal 884 Mar 12 06:35 ./
drwxr-sr-x 1 root systemd-journal 64 Feb 26 18:17 ../
-rw-r----- 1 root systemd-journal 96M Mar 18 22:16 system.journal
-rw-r----- 1 root root 120M Feb 26 18:17 system@d5301574c947425cb992f7839ae52cdb-0000000000000001-0005827c7effc14d.journal
-rw-r----- 1 root systemd-journal 96M Mar 5 12:29 system@d5301574c947425cb992f7839ae52cdb-0000000000051acb-000582cf3a7ba719.journal
-rw-r----- 1 root systemd-journal 96M Mar 12 06:35 system@d5301574c947425cb992f7839ae52cdb-00000000000872b4-000583572e31154d.journal
-rw-r-----+ 1 root systemd-journal 128M Mar 18 22:16 user-5000.journal
-rw-r-----+ 1 root root 128M Mar 5 12:29 user-5000@cf6acecdf28e48c790173a36447ec2e7-0000000000051ad9-000582cf3d435013.journal
-rw-r-----+ 1 root systemd-journal 128M Mar 12 06:35 user-5000@cf6acecdf28e48c790173a36447ec2e7-00000000000872b9-000583572e312040.journal
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它占用了将近 800 MB,并且填满了主分区。因此,将它存储在不同的文件系统上的想法。
据我所知,无法更改 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
Run Code Online (Sandbox Code Playgroud)
现在,如果/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
到另一个 fs,而是将挂载来自另一个 fs 的目录(或直接挂载其他 fs,如果另一个 fs 仅用于日志)到/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
Run Code Online (Sandbox Code Playgroud)
安装并启用它。现在日志刷新单元将看到有一个安装单元var-log-journal
(它只查找确切的名称!)并等待它。挂载单元将挂载目录绑定/anotherfs/journal
到/var/log/journal
. /anotherfs
如果需要,Systemd 将自动添加排序依赖项以等待挂载,并且/var/log/journal
如果挂载点尚不存在,它将自动创建挂载点。
小智 -2
从systemd-journald手册页:
日志服务将日志数据永久存储在 /var/log/journal 下,或者以易失性的方式存储在 /run/log/journal/ 下(在后一种情况下,日志数据在重新启动时会丢失)。默认情况下,如果启动期间 /var/log/journal/ 存在,则日志数据将永久存储,否则隐式回退到易失性存储。使用journald.conf(5)中的Storage=配置日志数据的放置位置,与/var/log/journal/是否存在无关。
因此,将日志存储在其他地方是可能且安全的。您只需添加/更改
Storage=/some-filesystem-with-free-space/some-dir/
Run Code Online (Sandbox Code Playgroud)
在日志配置文件之一中。