종료 시 initramfs로 돌아가기

종료 시 initramfs로 돌아가기

나는 내 자신의 init 스크립트를 실행하는 내 자신의 initramfs를 가지고 있습니다. 몇 가지 작업을 수행한 후 마지막으로 switch_root를 호출하고 /mnt에 마운트된 시스템의 init 스크립트를 실행합니다.
지금 나는 원한다initramfs의 초기화 스크립트로 돌아가기Linux가 종료될 때(Linux의 init 스크립트가 종료됨)

하지만 을(를) 호출하고 있기 때문에 exec switch_root /mnt /blah/initLinux가 종료되면 스크립트가 종료됩니다. 하지만 그 후에 initramfs에서 뭔가를 하고 싶은데 그건 불가능합니다.

chroot /mnt대신 내가 할 수 있는 일은 switch_root ...Linux가 종료되면 init 스크립트로 돌아가는 것입니다. 그러나 여기에는 일부 응용 프로그램(예: netctl)이 chroot된 시스템 내부에서 호출되기 때문에 작동을 거부한다는 불쾌한 부작용이 있습니다.

그래서나는 필요하다switch_root시스템에 들어가서 결국 initramfs로 돌아가는 방법입니다.

답변1

pivot_root대신 그렇게 할 수 있습니다 switch_root(이렇게 하면 모든 것이 삭제됩니다!).

초기화 시스템이 존재하지 않는다고 불평하지 않는다면 pid 1아마도 완료된 것입니다.

또 다른 해결책은 초기화 시스템을 pivot_root그 자체로 충분히 좋게 만드는 것입니다. 이를 뭐라고 부르나요? RAMF를 닫으시겠습니까? 이는 initramfs와는 아무런 관련이 없지만 종료 작업이나 다른 작업을 수행할 수 있는 것과 동일한 원리입니다.

종료 시 아무것도 할 필요가 거의 없기 때문에 표준 솔루션이 없다고 생각합니다.

답변2

이것을 사용할 수 있습니다 dracut.

  1. 문제가 발생할 경우(예: 시스템이 부팅되지 않는 경우)에 대비해 백업을 만드세요.

  2. dracut(대신 ) 으로 전환합니다 initramfs-tools.

    sudo apt 업데이트 sudo apt install --no-install-recommends dracut

  3. 맞춤 작성dracut기준 치수요구될 것입니다.

  4. Hooks는 함수를 dracut cleanup실행해야 합니다 .dracutneed_shutdown

이로 인해 dracut파일이 생성됩니다 /run/initramfs/.need_shutdown.

shutdown 시 /lib/systemd/system/dracut-shutdown.service실행하면 /usr/lib/dracut/dracut-initramfs-restoreinitramfs가 복원되고 한 단계씩 실행됩니다.

  1. dracut shutdown후크가 필요합니다. 구현되면 initramfs 내의 종료 프로세스에서 매우 늦게 실행됩니다.

cold-boot-attack-defensedracut이 모든 작업을 수행하는 샘플 모듈 입니다 .

인용하다:

전체 공개:

cold-boot-attack-defense제가 개발한 것입니다.

이 작업을 수행하는 것은 어떻습니까 initramfs-tools?

비슷한 메커니즘을 직접 구현해야 합니다 initramfs-tools.그것이 바로 꼬리가 하는 일입니다.. 이를 시뮬레이션하는 것은 위에 설명된 작업을 수행하는 것보다 훨씬 더 어려울 수 있습니다 dracut. 아니면 솔루션이 게시되었을 수도 있습니다.initramfs-tools데비안 기능 요청: 종료 시 initrd 복원 및 리디렉션 지원 를 사용할 때 더 쉬운 경로를 제공합니다 initramfs-tools. 그러나 이것이 기본 기능 이므로 사용하기가 dracut더 쉽습니다 .dracut

관련 정보