embedded - 如何使 /var/log 符号链接到 Yocto Rocko 中的持久存储
问题描述
我正在构建一个基于 Yocto 的发行版,其核心是 systemd 和 journald。
不幸的是,我无法让 Yocto 将所有日志存储在/var/log -> /data/log
. 我需要记录日志以及在之后写入的其他一些日志multi-user.target
才能持久化。/data 是持久分区。
我有一个非常相似的问题,但不幸的是我无法修改它以在我的设置中正常工作。
据我了解,我需要修改两件事:
volatiles
base-files
我希望其中的文件是systemd-tmpfiles
. 它应该告诉它在运行时创建 journald 需要的所有内容。这里我修改了一行:
L+ root root 0755 /var/log /data/log
fs-perms.txt
${localstatedir}/log link /data/log
我还尝试使用VOLATILE_LOG_DIR
set "no"
(fs-perms-persistent-log.txt modified but to no avail. And also adding some kind of
var.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 服务以包含RequireMountsFor
或After=
?
我想尽可能地防守,所以我期待你们对这个话题的看法。
编辑:
也许我可以从 /var/log 添加绑定挂载到 /data/log?如果这实际上是解决方案,我还想知道路上是否没有隐藏的障碍?
解决方案
您可以通过调整基本文件配方 (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\
"
这应该会有所帮助,我还没有在这里完全测试过,但我希望这可以为您提供一些起点。
推荐阅读
- r - dplyr在r中的多列分组?
- python - 使用 Python 比较 postgres 表中两列中的字符串
- c - 为什么 getnameinfo() 检索重复的地址?
- authentication - 向第三方证明 OAuth 身份验证
- python-3.x - xarray 中的切片给出错误“浮点”对象不能解释为整数
- c# - 如何使用数组中的对象在 dotnet (C#) 文档中建模
- javascript - 从本地存储阵列中删除特定字符串
- swift - AVMutableComposition 中的剪辑之间有间隙
- bash - bash 中的 GROUP BY CSV 列
- javascript - Quill.js 编辑器未显示