すべてのシステムエクスペリエンス(直接設定、新しいサービスの追加など)がinitramfsで機能しないのはなぜですか?

すべてのシステムエクスペリエンス(直接設定、新しいサービスの追加など)がinitramfsで機能しないのはなぜですか?

fsckが呼び出される前または理想的には、rootfsデバイスが作成された直後に作業を実行するためにsystemdサービスを追加してcentos7.6 initramfsをカスタマイズしようとしています。直接設定、.wantsディレクトリ、ジェネレータなどのシステムサービスを設定する方法についての経験があります。

しかし、奇妙なことは、すべての体系化された経験がうまくいかないということです。

私はinitramfsが(from公式ウェブサイト) systemdを使用している場合は、/init -> /usr/lib/systemd/systemdinitramfsを解凍したファイルで見ることができます。

lrwxrwxrwx 1 root root    7 Dec  9 21:49 bin -> usr/bin/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 dev/
-rw-r--r-- 1 root root    2 Dec  9 21:49 early_cpio
drwxr-xr-x 9 root root 4.0K Dec  9 21:49 etc/
lrwxrwxrwx 1 root root   23 Dec  9 21:49 init -> usr/lib/systemd/systemd*
drwxr-xr-x 3 root root 4.0K Dec  9 21:49 kernel/
lrwxrwxrwx 1 root root    7 Dec  9 21:49 lib -> usr/lib/
lrwxrwxrwx 1 root root    9 Dec  9 21:49 lib64 -> usr/lib64/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 proc/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 root/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 run/
lrwxrwxrwx 1 root root    8 Dec  9 21:49 sbin -> usr/sbin/
-rwxr-xr-x 1 root root 3.1K Dec  9 21:49 shutdown*
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 sys/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 sysroot/
drwxr-xr-x 2 root root 4.0K Dec  9 21:49 tmp/
drwxr-xr-x 7 root root 4.0K Dec  9 21:49 usr/
drwxr-xr-x 3 root root 4.0K Dec  9 21:49 var/

最後にdracut Hookを追加しましたが、usr/lib/dracut/hooks/pre-mount/remove_fs_metadata_csum.shまだsystemdサービスが機能しない理由は何ですか?

これが私がinitramfsで行ったことです。

+ rm -fr /root/initramfs.tmp
+ mkdir -p /root/initramfs.tmp/usr/lib/systemd/system/initrd-root-device.target.wants
+ cd /root/initramfs.tmp
+ sed 's/^  //g'
+ tee usr/lib/systemd/system/test.service
[Service]
ExecStartPre=bash -c -x 'echo ================hihi==========='
+ ln -s ../test.service usr/lib/systemd/system/initrd-root-device.target.wants/
++ uname -r
+ INITFAMFS_PATH=/boot/initramfs-3.10.0-957.27.2.el7.x86_64.img
+ cp /boot/initramfs-3.10.0-957.27.2.el7.x86_64.img.old /boot/initramfs-3.10.0-957.27.2.el7.x86_64.img
+ find . '!' -type d
+ cpio --format=newc --create --verbose
+ tee --append /boot/initramfs-3.10.0-957.27.2.el7.x86_64.img
./usr/lib/systemd/system/initrd-root-device.target.wants/test.service
./usr/lib/systemd/system/test.service
2 blocks
+ rm -fr /root/initramfs.tmp

機能せず、次回の再起動時に出力====hihi====を確認できません。 initramfsにcpioが接続されていることに注意してください。これは意図的に設計されています。ファイルを追加したり(たとえば) 、ファイルを上書きするためにこの方法を正常に使用しましたusr/lib/dracut/hooks/pre-mount/remove_fs_metadata_csum.shusr/bin/fsck.ext4usr/lib/systemd/system/systemd-udevd.service.wants

たぶん別の依存関係を使用する必要がありますか?たとえば、sysinit.target?しかし、私はsystemd-fsck-root.serviceの前に実行したいと思います。

申し訳ありません。これは複雑でまれなケースです。 initramfsに追加された単純なサービスが機能しない理由を知っている人はいますか?

編集:Drop-in confなどの他のシステムエクスペリエンスも試しましたが、どちらも機能しませんでした。

ベストアンサー1

おすすめ記事