GRUB2에서 LVM에 있는 부팅 ISO 파일

GRUB2에서 LVM에 있는 부팅 ISO 파일

LVM 파티션에 있는 Live iso 파일(특히 Kali Linux)에서 grub을 통해 부팅하려고 합니다.

iso 파일에서 커널과 initrd를 로드했지만 루트 파티션을 마운트하는 방법을 모르겠습니다. 이것이 현재 grub.cfg에 있는 것입니다.

menuentry "Kali Live ISO" --class gnu-linux {
  insmod lvm
  insmod ext2
  set root="lvm/Fedora-root"
  search --no-floppy --fs-uuid --set=root --hint=${root} 29e2f518-5fad-49c9-90ef-966b0c033c5e
  set isofile="/ISO/kali-linux-2019.1a-amd64.iso"
  loopback loop $isofile
  linux (loop)/live/vmlinuz boot=live iso-scan/filename=${isofile} noconfig=sudo username=root hostname=kali
  initrd (loop)/live/initrd.img
}

위의 uuid는 ISO 파일이 있는 파티션의 uuid 번호입니다 blkid. 여기서는 멈췄습니다.

답변1

Frost Schutz가 말했듯 live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.iso이 커널 명령줄 인수에 추가하면 작동합니다. 새 메뉴 항목의 작동 방식은 다음과 같습니다.

menuentry "Kali Live ISO - findiso" --class gnu-linux {
  insmod lvm
  insmod ext2
  set root="lvm/Fedora-root"
  search --no-floppy --fs-uuid --set=root --hint=${root} 29e2f518-5fad-49c9-90ef-966b0c033c5e
  set isofile="/ISO/kali-linux-2019.1a-amd64.iso"
  loopback loop $isofile
  linux (loop)/live/vmlinuz boot=live live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.iso noconfig=sudo username=root hostname=kali
  initrd (loop)/live/initrd.img
}

kali initramfs는 매개변수를 지원하지 않는 것으로 나타났습니다 iso-scan/filename=.

답변2

오해로 인해 어려움을 겪을 수도 있습니다.

Grub은 본질적으로 ISO를 부팅할 수 없습니다.

예, (제한 내에서) Grub은 암호화된 장치를 해독하고, RAID 및 LVM을 이해하고, 대용량 파일 시스템을 마운트하고, ISO를 루프 마운트할 수도 있습니다. 하지만 이 모든 멋진 기능의 목적은 단 하나뿐입니다.

커널과 initrd를 로드합니다.

결국 Grub은 여전히 ​​부트로더일 뿐입니다.

커널과 initrd를 로드할 수 있게 되면 Grub이 어떤 과정을 거쳐야 하는지는 중요하지 않습니다. 결과는 이 두 파일을 암호화되지 않은 단순 파티션에 직접 복사하는 것과 정확히 동일합니다 /boot.

mount -o loop kali-linux-2019.1a-amd64.iso /mnt/iso
cp /mnt/iso/live/{vmlinuz,initrd.img} /boot/kali

그런 다음 다음과 같이 시작하십시오.

menuentry "Kali Live ISO" {
    linux kali/vmlinuz ...parameters...
    initrd kali/initrd.img
}

위와 동일합니다. 단, 두 파일(vmlinuz 및 initrd.img)을 해당 ISO 파일에서 가져옵니다.


정말 똑같습니다. 어쨌든 Grub은 이 두 파일만 원합니다. Grub의 고급 기능에 의존하지 않고도 커널과 initrd를 로드할 수 있는 부트 로더를 사용하여 ISO를 부팅할 수 있습니다(더 편리할 수도 있음).

따라서 Grub은 커널을 로드하고 커널 매개변수와 initrd를 전달하기만 하면 됩니다. 커널이 로드되면 LVM, 루프 및 ISO가 없습니다. Grub이 수행한 모든 작업은 사라지고 커널 자체로 대체되었습니다.


그렇다면 ISO는 어떻게 시작되나요?

그것은 저절로 시작될 것입니다. 그렇기 때문에 ISO의 파일 이름을 커널 인수로 전달하여 찾아야 할 파일을 알아야 합니다. 음, 기본 파일 이름이 ISO initramfs에 하드코딩되어 있는 경우에도 이는 선택 사항입니다.

그런 다음 ISO의 initramfs에는 모든 저장 장치를 통과하고 모든 파일 시스템을 마운트하고 파일을 검색하는 일부 코드가 있습니다. 파일을 찾으면 루프에 설치합니다.

그것이 작동하는 방식입니다. 이를 구현하는 것은 Grub이 아니라 ISO 자체이며, 이 구현에 따라(있는 경우 - 그렇지 않으면 작동하지 않음) LVM 논리 볼륨에서 이 파일을 찾는 것을 지원할 수도 있고 지원하지 않을 수도 있습니다. RAID 및 암호화를 지원합니다.


특히 Kali의 경우 이것이 가능한지 모르겠습니다. Kali의 initramfs 코드를 조금 읽어보았지만 iso-scan/filename=전혀 없는 것 같습니다. 대신에 있어야 하며 경로 findiso=앞에 접두사를 붙이 거나 별도로 제공하면 LVM 지원이 활성화될 수 있습니다./dev/mapper/live-media=

하지만 실제로 직접 시도한 적은 없고 initramfs는 해독하기 어렵기 때문에 직접 실험/조사하거나 Kali 커뮤니티에 이 질문을 가져와야 합니다.

또는 ISO 파일을 더 접근하기 쉬운 위치(일반 파티션)에 넣으십시오.

답변3

Grub 2.00을 사용하여 논리 볼륨에서 ISO를 부팅할 수 있음을 확인했습니다. 제 경우에는 LVM 유형의 단일 파티션 MBR(전체 디스크)이 있었습니다. 저는 2개의 LV(부팅 및 iso)만 가지고 있으며 이 ubuntu-18.04.2-desktop-amd64.iso를 사용하여 부팅할 수 있습니다. 안타깝게도 캐스퍼(우분투의 livecd 메커니즘)의 용량이 부족하여 initramfs에서 파일을 복구했습니다(그러나 iso는 수정하지 않았습니다).

Kali의 경우 예, 마지막 솔루션이 작동하고 더 간단합니다.

관련 정보