如何在Yocto Rocko中使用/ var / log符号链接到持久存储

时间:2018-06-08 21:48:09

标签: embedded embedded-linux yocto systemd

我正构建一个以systemd和journald为核心的基于Yocto的发行版。

很遗憾,我无法让Yocto将所有日志存储在/var/log -> /data/log中。我需要记录日志以及multi-user.target之后写入的其他日志以保持持久性。 / data是持久分区。

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

根据我的理解,我需要修改两件事:

    我希望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`的配置类似于上面的配置。它也没有工作。

我启动watch 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创建它,所以我应该没问题。但是,在刷新日志之前,我该怎么做才能确保所有内容都到位?我是否需要修改系统服务以包含RequireMountsForAfter=

我希望尽可能保持防守,所以我期待你们对这个主题的看法。

编辑:

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

1 个答案:

答案 0 :(得分:-1)

你可以通过调整基础文件配方来挂载你的持久分区(base-files _%.bbappend)

import { NgModule } from '@angular/core'

import { SharedModule } from '../../modules/shared.module'
import { ItemModule } from '../item/item.module'

import { ItemDialogComponent } from './item-dialog.component'

@NgModule({
  declarations: [ItemDialogComponent], <== No need to redeclare Item
  imports: [SharedModule, ItemModule], //<== Import the module here
  exports: [SharedModule, ItemDialogComponent],
})
export class ItemDialogModule {}

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

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

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

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