systemd 업데이트가 initramfs 구축을 트리거하는 이유는 무엇입니까?

systemd 업데이트가 initramfs 구축을 트리거하는 이유는 무엇입니까?

systemd-242.0-3오늘 업데이트를 받았습니다 (몇 가지 관련 업데이트도 포함). 패키지를 설치한 후 터미널에는 initramfs가 처음부터 빌드되었음을 표시합니다. 출력은 다음과 같습니다:

:: Running post-transaction hooks...
(1/9) Updating linux initcpios...
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 5.0.9-arch1-1-ARCH
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [filesystems]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful

~에 따르면선형 FS:

부팅 시 부트로더는 커널 및 initramfs 이미지를 메모리에 로드하고 커널을 시작합니다. 커널은 initramfs가 존재하는지 확인하고, 발견되면 이를 /로 마운트하고 /init를 실행합니다. init 프로그램은 일반적으로 쉘 스크립트입니다. initramfs를 사용하면 부팅 프로세스가 더 오래 걸릴 수 있으며 상당히 걸릴 수도 있습니다.

gzip 및 cpio 도구를 사용하여 열었고 /boot/initramfs-linux.img전체 /usr/lib/systemd폴더가 포함되어 있습니다. 커널만 포함하면 안 되나요? initramfs에도 systemd가 존재하는 이유는 무엇입니까? 커널을 RAM에 넣고 디스크에서 시스템을 로드하는 것이 더 빠르지 않습니까?

답변1

즉각적인 이유는 일부 패키지(내 생각엔 커널 패키지라고 생각하며 systemd와는 아무 관련이 없음)에 설치 스크립트가 있기 때문입니다. initramfs에는 해당 패키지에 후크/바이너리/커널 모듈 등이 포함되어 있을 수 있으므로 다시 빌드해야 합니다. 그렇지 않으면 이전 버전을 사용하게 됩니다(대부분의 initramfs에는 후크할 필수 커널 모듈이 포함되어 있다는 점에 유의하세요). 다음 부팅 시 이전 버전이 새 커널과 함께 실행될 수 없는 실제 루트).

initramfs에는 커널이 포함되어 있지 않지만(모든 파일을 포함할 수 있지만 의미는 없습니다) 커널은 이미 부트로더를 통해 RAM에 로드되어 있으며 initramfs는 첫 번째 마운트된 파일 시스템으로만 사용됩니다.

일반적인 시스템에서 initramfs의 작업은 "실제 루트 파일 시스템"(에서 사용하는)을 마운트하는 첫 번째 PID=1 프로세스를 실행하기 위해 init 프로그램(다른 종속 라이브러리 또는 스크립트 해석기를 포함할 수 있음)을 제공하는 것입니다. 컴퓨터의 "일반 루트 파일 시스템) 하드 디스크 파티션)"을 선택한 다음 피벗 루트로 이동하여 실제 루트 파일 시스템에서 init를 수행합니다.

PID=1로 실행되도록 설계된 프로그램인 Systemd는 initramfs에서는 init로, 실제 루트 파일 시스템에서는 init로 실행되는 기능을 제공합니다.

답변2

커널은 RAM에 배치되고 별도의 initramfs가 커널의 첫 번째 파일 시스템인 rootfs(=ramfs)로 추출됩니다.

Initramfs는 임베디드 애플리케이션과 같은 미니 Linux 시스템으로 사용될 수 있습니다.

systemd-init를 사용하는 경우 systemd 파일은 initramfs에 위치합니다.

HOOKSmkinitcpio.conf포함 된후크 스크립트, 파일을 initramfs(커널 모듈, 프로그램, 시작 스크립트...)에 넣지만 그렇지 않습니다.후크 스크립트그들 자신. systemd-init후크 대신 후크 가 있습니다 busybox.

pacman -Syu linux최신 커널로 업데이트 /boot하지만 initramfs의 재생성도 트리거합니다.

pacman -Syu systemdinitramfs(마지막 링크)의 재생성을 트리거할 수도 있지만 커널 설치처럼 자동으로 수행되지는 않습니다. systemd-init대안이 있기 때문이다 busybox. Archlinux는 busybox기본적으로 파일과 해당 후크를 사용합니다.

링크:

관련 정보