GRUB2에서 LVM2 논리 볼륨의 ISO를 부팅합니다.

GRUB2에서 LVM2 논리 볼륨의 ISO를 부팅합니다.

tl;dr - 암호화되지 않은 lmv2 논리 볼륨에 있는 .iso 파일에서 부팅할 수 있습니까? 어떻게?

랩톱에서 실제로 수행하기 전에 VirtualBox VM에서 설정하려고 합니다. 다음과 같이 설정되어 있습니다.

  • 4개의 GPT 파티션
    • gpt1 - 2M ef02 BIOS 부팅
    • gpt2 - 기타 데이터, iso 등의 경우 암호화되지 않은 5G 비lvm입니다.
    • gpt3 - /boot, iso 등에 대한 5G 암호화되지 않은 lvm
    • gpt4 - 루트, 스왑, 홈 등에 대해 dm-crypt/luks로 암호화된 나머지 lvm입니다.
  • gpt2에는 현재 Arch 및 Xubuntu iso의 복사본이 있습니다.
  • gpt3에는 동일한 iso의 동일한 복사본이 있는 lvm2 lv가 있습니다.

나는 다음과 같은 작업을 수행하고 있습니다.

  • gpt4에서 Arch 및 Xubuntu 설치 작동(그리고 어느 시점에 다른 논리 볼륨에 다른 배포판을 추가하고 싶습니다)
  • /dev/sda의 Arch에서 grub2 설치
  • grub2의 configfile 명령을 사용하면 distro의 grub2 메뉴 모두에서 전환하고 부팅할 수 있습니다.
  • lvm이 아닌 gpt2의 grub 메뉴에서 iso를 부팅할 수 있습니다.

내가 하고 싶은 것은 gpt3 lvm의 iso에서 부팅하는 것입니다(궁극적으로는 lvm이 아닌 gpt2 파티션도 전혀 갖지 않습니다).

내 그럽 항목은 다음과 같습니다

menuentry "Xubuntu ISO" {
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  # from non-lvm
  loopback loop (hd0,gpt2)$isofile
  # from lvm
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

2개의 루프백 라인은 동일한 iso의 2개의 다른 복사본을 가리킵니다. 두 루프백 라인이 모두 작동하는지 grub 명령줄에서 확인했습니다.

lvm이 아닌 파티션의 iso에서 부팅하면 모든 것이 잘 작동합니다.

lvm 파티션의 iso에서 부팅할 때 부팅이 시작되고 결국 다음 오류가 발생합니다.

(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

아치 입구의 경우:

menuentry "Arch ISO" {
  set isofile="/archlinux-2012.09.07-dual.iso"
  loopback loop (hd0,gpt2)$isofile
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

gpt2 iso에서 부팅하는 것은 작동하지만 lvm 부팅을 위해 "/dev/sda2"를 무엇으로 변경해야 할지 모르겠습니다.


편집: 이것이 가능합니까? 을 위한어느현재 Linux 배포판의 공식 .iso 파일은 무엇입니까? 페도라? 데비안? 오픈수세? CentOS?

이것이 불가능합니까? 아니면 이전에 아무도 시도하지 않았던 일인가요?


EDIT2: 내 포상금은 만료된 지 오래되었으며 9개월 후에는 어떤 Linux 배포판에서도 이것이 불가능하다고 가정합니다. 질문은 열어두겠습니다. 하지만 가까운 시일 내에 효과적인 해결책이 나올지는 의심스럽습니다.

답변1

Fedora 21 ISO를 사용하여 다음을 성공적으로 시도했습니다.

menuentry "Fedora 21 Live M6600" --class fedora {
    insmod part_gpt
    insmod lvm
    insmod ext2
    set vg='m6600'
    set lv='F21Live'
    set root="lvm/${vg}-${lv}"
    search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
    set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
    echo "Using ${isofile}..."
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
    initrd (loop)/isolinux/initrd0.img
}

rd.auto=1Linux에게 모든 LVM을 로드하고iso 스캔그들을 검색합니다.

답변2

에서 영감을 받다우분투를 위한 이 간단한 솔루션, Fedora 27 KDE iso 및 Ubuntu 17.10 iso를 로드하는 데 작동하는 다음을 사용했습니다.

방금 파일에 다음 줄을 추가했습니다./etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

설명

  • 로 시작하는 줄은 set iso_path논리 볼륨에서 iso 파일을 찾을 수 있는 경로를 정의합니다. 시스템을 시작하면 에 있지만 마운트된 논리 볼륨 /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"이므로 /home이를 생략하고 다음으로 경로를 시작합니다./erik/Downloads/…
  • 로 시작하는 줄 search끝에 로 시작하는 이상한 영숫자 변수(소위 UUID)가 있습니다 6340. 명령에서 이 번호를 얻었어요

    sudo blkid
    

    다른 사람들과 함께 다음 줄을 나에게주었습니다.

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • 그런 다음 다른 iso 파일을 부팅하려는 경우 또 다른 중요한 점은 linux및 로 시작하는 줄입니다 initrd. 내가 그걸 샀어iso 파일을 여는 중file-roller(압축된 아카이브를 추출하기 위한 GUI) 또는 mc(콘솔 파일 관리자)을 사용합니다 .

    • Fedora 및 이와 유사한 것:거기에서 디렉토리로 이동하면 /isolinux.라는 파일을 찾을 수 있습니다 isolinux.cfg. 거기에서 로 시작하는 몇 줄을 발견했고 label그 아래에는 다음과 같은 중요한 줄이 있었습니다.

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      내 grub2 의 마지막 두 줄을 채우는 데 사용할 것입니다 menuentry.

    • 우분투 및 유사:거기에서 디렉토리로 이동하면 /boot/grub.라는 파일을 찾을 수 있습니다 grub.cfg. 여기서는 로 시작하는 일부 줄을 찾을 수 menuentry있으며 그 아래에는 다음과 같은 중요한 줄이 있습니다.

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      그냥 복사하면 됩니다.

답변3

대부분의 배포판의 공식 iso 파일에서는 불가능하다고 생각합니다.

당신이 받고있는 오류 :

 (initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

이는 부팅 시 시작하려는 라이브 시스템이 CD/DVD 드라이브를 검색하지만 아무것도 찾지 못한다는 것을 의미합니다.

Live CD는 LVM에서 소스 ISO를 검색하도록 구성되어 있지 않습니다. 이를 위해 이미지의 부팅 스크립트를 수정할 수도 있지만 현재 배포판 공식 .iso 파일에서는 그렇게 하지 않는 것 같습니다. 좋아하는 배포판 개발자에게 연락하여 통합할 수 있습니까?

답변4

그것에 대한 요점 :

부팅 시 ISO는 ISO를 마운트해야 하므로 ISO를 찾는 방법을 알아야 합니다.

Grub2는 insmod... 명령을 사용하여 ISO를 볼 수 있지만 Grub2가 ISO 내부를 읽고 루프 마운트하는 등의 작업을 수행하는 것 외에는 아무것도 하지 않지만 ISO 내부의 Linux가 시작되자마자 LVM / LUKS / 루프 / 등은 다음과 같습니다. 거기에 없으면(마운트되지 않음) ISO 내부의 부팅 스크립트는 해당 LVM/LUKS/루프를 마운트하는 방법을 알아야 합니다. 따라서 해당 Linux가 그렇게 할 준비가 되어 있지 않으면 부팅이 불가능합니다.

LVM, LUKS 등이 없는 샘플... 일반 Linux LiveCD ISO가 부팅하는 동안 루프를 검색하고 .iso 파일에 마운트하도록 설계되지 않은 경우 Grub2에서 부팅할 수 없습니다(.iso를 파일).

이러한 경우에는 하드웨어 CD/DVD 에뮬레이터(실제 하드웨어에 있는 경우)가 필요하거나 가상 머신의 가상 CD/DVD 장치에 .iso를 마운트하기만 하면 됩니다.

물론 다른 옵션은 이러한 ISO를 '편집'하여 부팅 시 일부 스크립트를 통합하여 LVM/LUKS 등을 검색하고 마운트하는 것입니다.

관련 정보