systemd:読み取り専用ファイルシステムにコアダンプを生成できません

systemd:読み取り専用ファイルシステムにコアダンプを生成できません

組み込みLinux設定を使用しています。書き込み可能なオーバーレイを持つsquashfsをインストールし(使用してoverlayfs)、ここにchrootして制御をsystemdに移動しました。

コアダンプを/var/log/var/lib/systemd/coredump

coredumpを要求するとsystemd-coredump呼び出されますが、このエラーが発生します。

Jul 30 08:54:14 evo4k-e6872f kernel: ClearApp[803]: segfault at 0 ip 000000000042bcb0 sp 00007ffcd4915f18 error 6 in ClearApp[400000+868000]
Jul 30 08:54:14 evo4k-e6872f kernel[359]: ClearApp[803]: segfault at 0 ip 000000000042bcb0 sp 00007ffcd4915f18 error 6 in ClearApp[400000+868000]
Jul 30 08:54:14 evo4k-e6872f systemd[1]: Started Process Core Dump (PID 804/UID 0).
Jul 30 08:54:14 evo4k-e6872f systemd-coredump[805]: Failed to create temporary file for coredump /var/log/coredump/core.ClearApp.0.54a13c5624ad4ed6b3>
Jul 30 08:54:14 evo4k-e6872f systemd-coredump[805]: Process 803 (ClearApp) of user 0 dumped core.
Jul 30 08:54:14 evo4k-e6872f systemd[1]: clearapp.service: Main process exited, code=dumped, status=11/SEGV
Jul 30 08:54:14 evo4k-e6872f systemd[1]: clearapp.service: Failed with result 'core-dump'.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: clearapp.service: Service hold-off time over, scheduling restart.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: clearapp.service: Scheduled restart job, restart counter is at 5.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: Stopped MedX ClearApp.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: clearapp.service: Start request repeated too quickly.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: clearapp.service: Failed with result 'core-dump'.
Jul 30 08:54:15 evo4k-e6872f systemd[1]: Failed to start MedX ClearApp.

私の/proc/sys/kernel/core_patternもの|/lib/systemd/systemd-coredump %P %u %g %s %t %c %ecore_patternに設定すると/tmp/cores/core.%e.%p.%h.%t機能します。したがって、これは確かに体系的なものです。

私はsystemdバージョン237を使用しています。これは以前はsystemdバージョン234で機能しました。

私のファイルシステムは正確でクリーンです。いかなる方法でも破損していません(きれいにfsck復元されました)。

エラーなしでコアダンプを生成するようにシステム化するにはどうすればよいですか?

編集#1

systemd-coredump別のディレクトリ、さらにマウントされたサムドライブにログインするために再コンパイルしたところ、同じエラーが発生しました。

Jul 30 10:43:39 evo4k-e6872f systemd-coredump[1910]: Failed to create temporary file for coredump /run/media/Pauls/core.ClearApp.0.dd6557bb31264bf2b3773b534fd6e2b1.1908.1532961819000000: Read-only file system

カーネルやsystemdが単に一時ファイルを生成する以外の作業をしていると考え始めました。

編集#2

私はユーザースペースで作成された正確な呼び出しシステムを実行し、動作しopenました。カーネルがコアダンパーを呼び出すコンテキストはありますか?

この行をsystemdに追加しました。

    fd = open(tmp, O_CREAT|O_EXCL|O_NOFOLLOW|O_NOCTTY|flags, 0640);
    if (fd < 0) {
            log_error("Couldn't open: %d: %s", fd, tmp);
            return -errno;
    }

この出力を取得します。

Couldn't open: -1: /run/media/Pauls/.#core.ClearApp.0.7833dca6d3354c0e959b366df731bf9f.879.15329633730000000f174d1155a09d96

ベストアンサー1

この質問はGitHub(9756)。

子孫の場合:「coredumpサービスが実行ProtectSystem=strictおよびProtectHome=yes設定されます。これは、StateDirectory=IEにリストされているパス以外の場所に書き込めないことを意味します/var/lib/systemd/coredump/。」

コアダンプを別の場所(サブディレクトリなど/var/log/)に保存するための推奨される方法は、そのディレクトリをにバインドマウントすることです/var/lib/systemd/coredump/

おすすめ記事