모든 시스템 경험(직접 구성, 새 서비스 추가 등)이 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.sh(예 usr/bin/fsck.ext4: usr/lib/systemd/system/systemd-udevd.service.wants.

어쩌면 다른 종속성을 사용해야 할까요? 예를 들어 sysinit.target? 하지만 systemd-fsck-root.service 전에 실행되기를 원합니다.

죄송합니다. 이는 복잡하고 드문 경우입니다. initramfs에 추가된 간단한 서비스가 작동하지 않는 이유를 아는 사람이 있습니까?

편집: Drop-in conf와 같은 다른 시스템 경험도 시도했지만 둘 다 작동하지 않았습니다.

관련 정보