initramfs는 루트 파일 시스템을 어떻게 마운트합니까?

initramfs는 루트 파일 시스템을 어떻게 마운트합니까?

iniramfs는 루트 파일 시스템을 마운트하고 제어권을 systemd에 넘겨주는 작은 운영 체제와 같습니다. 그렇다면 initramfs는 내부적으로 어떻게 작동합니까? Linux에서 루트를 마운트하는 스크립트가 있습니까?

답변1

initrd/initramfs(역사적 차이점만)를 추출하고 설치한 후 script/init가 실행됩니다. 대부분 initramfs의 모듈을 통해서만 실제 루트를 설치합니다.

그런 다음 루트를 새 파티션으로 회전/전환해야 하며 이는 pid 1에서만 가능합니다.

다음은 최소한의 /init 스크립트입니다:

mkdir /newroot
mount /dev/sda2 /newroot
mount --move /sys /newroot
mount --move /dev /newroot
mount --move /proc /newroot

switch_root /newroot /bin/bash

(또는 정상적인 연속을 위해서는 /sbin/init)

문제는 필요한 모듈이 내장되어 있지 않으면 커널이 /dev/sda2를 마운트할 수 없다는 것입니다. sda2에 모듈을 올려도 도움이 되지 않습니다. 계란과 암탉 문제입니다.

따라서 커널은 모듈과 스크립트가 포함된 루트 파일 시스템이 포함된 cpio 아카이브를 얻습니다. 커널은 단순히 /init에 넘겨주고 자체 부팅을 완료합니다.


젠투 링크는 다음으로 시작됩니다:

initramfs는 루트 파일 시스템입니다커널에 내장됨...

그게 무슨 의미 일까?


다음은 최소한의 커널 명령줄입니다:

vmlinuz root=/dev/sdaX

부트로더에게 "vmlinuz" 커널을 로드하고 커널에 /dev/sdaX를 마운트하라고 지시합니다.

이:

vmlinuz initrd=initramfs.img root=/dev/sdaX

부트로더가 커널이 루트로 찾아서 마운트할 initrd를 로드하도록 하고 (기본) /init 스크립트에 /dev/sdaX로 회전/전환하도록 지시합니다(그런 다음 기본 /sbin/init를 실행합니다).

관련 정보