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를 실행합니다).