fsckが呼び出される前または理想的には、rootfsデバイスが作成された直後に作業を実行するためにsystemdサービスを追加してcentos7.6 initramfsをカスタマイズしようとしています。直接設定、.wantsディレクトリ、ジェネレータなどのシステムサービスを設定する方法についての経験があります。
しかし、奇妙なことは、すべての体系化された経験がうまくいかないということです。
私はinitramfsが(from公式ウェブサイト) systemdを使用している場合は、/init -> /usr/lib/systemd/systemd
initramfsを解凍したファイルで見ることができます。
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.sh
。usr/bin/fsck.ext4
usr/lib/systemd/system/systemd-udevd.service.wants
たぶん別の依存関係を使用する必要がありますか?たとえば、sysinit.target?しかし、私はsystemd-fsck-root.serviceの前に実行したいと思います。
申し訳ありません。これは複雑でまれなケースです。 initramfsに追加された単純なサービスが機能しない理由を知っている人はいますか?
編集:Drop-in confなどの他のシステムエクスペリエンスも試しましたが、どちらも機能しませんでした。