무슨 일이 일어나고 있는지 "구식"방식으로 리눅스를 부팅하려고합니다. initrd
램 디스크에서 커널에 의해 압축이 풀린 압축 된 cpio 아카이브와는 달리 램 디스크 가있는 곳 이며, 엔드 디바이스로 전환하는 오래된 방법이 있습니다.
이 모드에서 커널은 disk.img를 루트 파일 시스템으로 램 디스크로 마운트 한 다음 /linuxrc
거기서 실행 합니다. 귀하의 경우에는 그러한 파일이 없습니다. 시 /linuxrc
종료 (실제 루트 파일 시스템의 블록 장치를 가지고하는 것이 필요 무엇이든 가정되는) 커널은 실제 루트 파일 시스템을 마운트합니다.
위의 메시지는 램 디스크를 성공적으로 마운트하지만 (1,0 : 1은을위한 ram
것이므로 /dev/ram0
) 실제 루트 파일 시스템 / dev / sda1 (8,1 : 8은 sd
, 1은 a1
) 이 아니라는 것을 보여줍니다 . 커널 명령 줄 ( -append
)을 지정하지 않았기 때문에 /dev/sda1
커널 컴파일 타임에 또는을 사용하여 전달 된 CONFIG_CMDLINE에서 가져옵니다 rdev
.
disk.img에 /sbin/init
...를 사용 하여 작은 Linux 배포판과 같은 루트 파일 시스템을 포함 하려는 경우 대신 다음과 같이 작성하십시오.
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
그런 다음 커널은 램 디스크를 실제 루트 파일 시스템으로 취급 할 것입니다 (여전히 pivot_root
다른 시스템에 할 수는 있음 ).
커널 메시지를 더 쉽게 볼 수 있도록 직렬 출력을 사용하는 것이 좋습니다.
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
대안으로 init 램 디스크 대신 init ramfs를 사용할 수 있습니다 :
mkdir -p RAMFS/{bin,dev}
cd RAMFS/bin
cp /bin/busybox .
"$PWD/busybox" --install .
cd ..
cp -a /dev/{null,tty,zero,console} dev
printf '%s\n' "#! /bin/sh" "exec /bin/sh" > init
chmod +x init
find . | cpio -oHnewc | gzip > ../initramfs.gz
cd ..
kvm -kernel kernel.img -initrd initramfs.gz
( busybox
정적으로 링크 된 버전이 제공됨 ) 해당 커널에 셸 및 다른 busybox 유틸리티가 제공됩니다.
커널은 이제 해당 모드 /init
와 반대로 /linuxrc
또는 /sbin/init
해당 모드에서 실행 됩니다.