USB의 ISO 이미지에서 KALI를 부팅할 때 GRUB가 initramfs에서 중지됩니다.

USB의 ISO 이미지에서 KALI를 부팅할 때 GRUB가 initramfs에서 중지됩니다.

제가 하려는 일은 다음과 같습니다.

USB Stick Boots to -> GRUB Loader -> GRUB boots one of many ISO files on the USB into LIVE mode.

이것은 내 디렉토리 구조입니다. 매우 간단합니다.

MULTIBOOT(USB stick) ->
- ubuntu-14.04.1-desktop-i386.iso (ISO File)
- Parrot-full-3.6_amd64.iso (ISO File)
- kali-linux-2017.1-amd64.iso (ISO File)
- boot (FOLDER)
- boot/grub (FOLDER)

unbutu iso는 내 컴퓨터와 VM 앵무새에서 제대로 부팅되고 kali iso는 커널을 로드하지만 initramfs에서 멈추고 "설치 미디어를 찾을 수 없습니다"라고 불평합니다.

이것은 내 grub.cfg 파일입니다.

menuentry "ubuntu-14.04.1-desktop-i386 Desktop ISO" {
 loopback loop /ubuntu-14.04.1-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-14.04.1-desktop-i386.iso noeject noprompt splash --
 initrd (loop)/casper/initrd.lz
}

menuentry "Parrot-full-3.6_amd64 ISO" {
 loopback loop /Parrot-full-3.6_amd64.iso
 linux (loop)/live/vmlinuz boot=live iso-scan/filename=/Parrot-full-3.6_amd64.iso noeject noprompt splash --
 initrd (loop)/live/initrd.img
}


menuentry "kali3-amd64 Live system" {
    loopback loop /kali-linux-2017.1-amd64.iso
    linux   (loop)/live/vmlinuz boot=live iso-scan/filename=/kali-linux-2017.1-amd64.iso splash username=root hostname=kali
    initrd  (loop)/live/initrd.img
}

저는 가상 머신과 직장에서 이러한 ISO를 사용해 보았습니다. 또한 컴퓨터에서 RUFUS를 사용하여 USB에 넣고 직접 부팅해 보았습니다. 그들은 일합니다. RUFUS의 문제점은 단일 ISO를 사용할 때 작동한다는 것입니다. 하지만 ISO마다 USB를 만들고 싶지는 않습니다. 모든 ISO를 담을 USB를 만들고 싶고 원한다면 라이브 모드로 부팅할 수 있어야 합니다. 그래서 GRUB으로 전환했습니다. 그러나 GRUB이 나쁘지는 않지만 문서가 매우 제한적이고 단편적이라는 점을 말씀드리고 싶습니다. 나에게 이것이 필요하다면 다른 많은 사람들에게도 이것이 필요할 것이라고 생각합니다.

답변1

문제를 해결했습니다! ! ! 해결책:

루트 파일 시스템을 로드할 iso 파일을 찾으려면 부팅 중에 findiso 커널 매개변수를 사용해야 합니다. 아래에서 최신 실행 중인 grub.config 항목을 참조하세요.

참고: superGrub 테스트를 위해 ISO 파일을 /boot-isos/ 폴더로 옮겼습니다. 하지만 그들은 어디에나 있을 수 있습니다. 다음 사항을 확인하세요.

1. to give correct path name to the iso file
2. MUST USE findiso kernel parameter to let boot process find the iso file. Else it will NOT work.

현재 USB의 디렉토리 구조는 다음과 같습니다.

USB STICK ->
/boot (folder that holds GRUB)
/boot-isos (folder that holds isos below)
- KALI iso file
- Parrot iso file
- Ubuntu iso file

menuentry "[loopback]Parrot-full-3.6_amd64" {
    set isofile='/boot-isos/Parrot-full-3.6_amd64.iso'
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=parrot
    initrd (loop)/live/initrd.img
}


menuentry "[loopback]kali-linux-2017.1-amd64" {
    set isofile='/boot-isos/kali-linux-2017.1-amd64.iso'
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=kali
    initrd (loop)/live/initrd.img
}

답변2

나는 이것에 많은 시간을 보냈습니다. 명령줄과 grub.cfg 매개변수를 사용하여 루프백에서 부팅하는 다양한 방법을 사용하여 테스트되었습니다. Kali 또는 Parrot을 시작할 수 없습니다. 우분투는 매번 정상적으로 부팅됩니다. 다른 Linux 배포판을 선주문할 수 있습니다. SuperGrub으로 테스트했는데 결과는 동일했습니다. 나는 이 문제가 kali-linux-2017.1-amd64.iso 및 Parrot-full-3.6_amd64.iso와 관련이 있다고 생각합니다. 루트 파일 시스템이 마운트된 CD/DVD 드라이브에서 로드될 것으로 예상하기 때문에 두 가지 모두의 부팅 프로세스가 손상되었습니다. RUFUS와 같은 도구는 ISO의 내용을 별도의 램디스크 /mnt/cd로 로드하고 마운트할 수 있는 /cd 파일로 확장하여 이 문제를 해결합니다. KALI와 PARROT이 이 문제를 해결해야 합니다.

답변3

멀티부팅 USB 스틱에서 라이브 데비안을 부팅하는 것과 같은 문제가 있었습니다. 매개변수를 추가하여 문제를 해결했습니다 findiso=$isofile.

메인 메뉴 항목은 다음과 같습니다.

menuentry "Debian 12 testing Live ISO" --class debian --class linux {
    set root='(hd0,1)'
    set isofile="/debian-live-testing-amd64-gnome.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile iso-scan/filename=${isofile} components noeject  noprompt splash  "${loopback}"
    initrd (loop)/live/initrd.img
}

관련 정보