首页 > 解决方案 > 如何使 /var/log 符号链接到 Yocto Rocko 中的持久存储

问题描述

我正在构建一个基于 Yocto 的发行版,其核心是 systemd 和 journald。

不幸的是,我无法让 Yocto 将所有日志存储在/var/log -> /data/log. 我需要记录日志以及在之后写入的其他一些日志multi-user.target才能持久化。/data 是持久分区。

我有一个非常相似的问题,不幸的是我无法修改它以在我的设置中正常工作。

据我了解,我需要修改两件事:

L+ root root 0755 /var/log /data/log

${localstatedir}/log link /data/log

我还尝试使用VOLATILE_LOG_DIRset "no"(fs-perms-persistent-log.txt modified but to no avail. And also adding some kind ofvar.conf to/etc/tmpfiles.d` 来完成它,其配置类似于上述配置。它也没有工作。

我启动 awatch ls -l on the resulting rootfs/var并看到它var/log在短时间内被符号链接到 `/data/log 但后来它在某个地方被覆盖以再次指向 volatile/log。

我将不胜感激任何建议,因为我似乎把这件事复杂化了。这应该很容易。毕竟它只是让 Yocto 做一个符号链接。但我想这是一个让我相当重要的目录ln -sf /data/log /var/log

我也想听听这种方法的影响。除了磨损我的 eMMC。我们可以忍受这一点,因为与设备上执行的其他一些操作相比,日志活动非常低。我最感兴趣的是安装顺序和东西。如果我没记错的话,journald 将使用一个内存缓冲区,直到它/var/log/journal为它创建,所以我应该没问题。但是在刷新日志之前我应该​​怎么做才能确保一切就绪?我是否需要修改 systemd 服务以包含RequireMountsForAfter=

我想尽可能地防守,所以我期待你们对这个话题的看法。

编辑:

也许我可以从 /var/log 添加绑定挂载到 /data/log?如果这实际上是解决方案,我还想知道路上是否没有隐藏的障碍?

标签: embeddedembedded-linuxyoctosystemd

解决方案


您可以通过调整基本文件配方 (base-files_%.bbappend) 来挂载持久分区

do_install_append () {
    cat >> ${D}${sysconfdir}/fstab <<EOF

# Data partition
/dev/mmcblk0p4       /data          auto       defaults,sync,noauto  0  2
EOF
}
dirs755 += "/data"

然后你可以调整 volatile-binds (volatile-binds.bbappend)

VOLATILE_BINDS = "\
    /data/var/lib /var/lib\n\
    /data/var/log /var/log\n\
    /data/var/spool /var/spool\n\
    /data/var/srv /srv\n\
"

这应该会有所帮助,我还没有在这里完全测试过,但我希望这可以为您提供一些起点。


推荐阅读