我想将默认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
正如您所看到的,它占用了近 800 MB,这填满了主分区。因此,将其存储在不同的文件系统上的想法。
答案1
据我所知,无法更改 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,或者指向与/var/log
当前相同的 fs,那么这不会成为问题,并且作为更改日志数据所在路径的一种方法,它可以很好地工作。
这种排序方式(挂载文件系统然后刷新日志)通常是通过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
如果安装点尚不存在,则会自动创建安装点。
答案2
从systemd 日志手册页:
日志服务将日志数据永久存储在 /var/log/journal 下,或者以易失性的方式存储在 /run/log/journal/ 下(在后一种情况下,日志数据在重新启动时会丢失)。默认情况下,如果启动期间 /var/log/journal/ 存在,则日志数据将永久存储,否则隐式回退到易失性存储。使用journald.conf(5)中的Storage=配置日志数据的放置位置,与/var/log/journal/是否存在无关。
因此,将日志存储在其他地方是可能且安全的。您只需添加/更改
Storage=/some-filesystem-with-free-space/some-dir/
在日志配置文件之一。