GRUB2에서 LVM2 논리 볼륨으로 ISO 부팅


8

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

내 랩톱에서 실제로하기 전에 VirtualBox VM에서이를 설정하려고합니다. 다음과 같이 설정했습니다.

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

나는 다음과 같은 일을하고있다 :

  • gpt4에서 Arch 및 Xubuntu의 기능적인 설치 (그리고 다른 논리적 볼륨에 다른 배포판을 추가하고 싶습니다)
  • / dev / sda의 Arch에서 설치된 grub2
  • grub2의 configfile 명령을 사용하여 두 배포판의 grub2 메뉴에서 전환하고 부팅 할 수 있습니다
  • 비 LVM GPT2에서 GRUB 메뉴에서 ISO를 부팅 할 수 있습니다

내가하고 싶은 것은 gpt3 lvm의 iso에서 부팅하는 것입니다.

내 grub 항목은 다음과 같습니다

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"를 무엇으로 변경해야할지 모르겠습니다.


편집 :이 할 수 있습니까? 들어 있는 현재의 리눅스 배포판의 공식 .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 = 1 은 Linux가 모든 LVM을로드하고 iso-scan 검색하도록 지시 합니다.


로 시작하는 줄 의 UUIDsearch 는 iso 파일을 포함하는 논리 볼륨 중 하나입니까? 그것을 얻으려면해야 sudo blkid합니다.
erik

이것은 훨씬 쉽게 할 수 있습니다. LVM에서 Fedora 및 Ubuntu를 부팅하는 방법에 대한 대답을 참조하십시오.
erik

1

이 간단한 Ubuntu 솔루션에서 영감을 얻어 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 파일을 부팅하려는 경우 또 다른 중요한 것은 linuxand로 시작하는 줄입니다 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
      

      복사 만하면됩니다.


0

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

당신이 얻는 오류 :

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

부팅 할 때 시작중인 라이브 시스템이 CD / DVD 드라이브를 검색하고 찾지 못함을 의미합니다.

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


그것은 이다 가능한, 제가 페도라 27 우분투 17.10에서 부팅 내 간단한 대답을 참조하십시오.
erik

0

당신은 이것을 시도 할 수 있습니다 :

메뉴 항목의 시작 부분에 이것을 추가하십시오 :

insmod lvm

그런 다음 다음을 사용하여 LVM 파티션을 지정하십시오.

set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>

따라서 Xubuntu ISO 항목은 다음과 같습니다.

menuentry "Xubuntu ISO" {
  insmod lvm
  set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  loopback loop $lvmpart$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

필요에 따라 수정하십시오.

GRUB이 lvm2 볼륨을 인식하게하여 ISO 파일을 읽을 수있게합니다. 그러나 아마도 ISO를 여전히 찾을 수 없을 것입니다 ...


나는 당신의 제안을 시도했지만, 당신이 말했듯이, iso는 여전히 발견되지 않습니다.
snapshoe

0

그것에 대한 요점 :

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

Grub2는 insmod ... 명령을 사용하여 ISO를 볼 수 있지만, Grub2가 ISO 내부에서 읽거나 루프 마운트하는 등의 작업을 수행 할 수 있습니다. 그러나 ISO 내부의 Linux가 LVM / LUKS / loop / etc 등을 시작하자마자 ISO 내부의 부트 스크립트는 LVM / LUKS / 루프를 마운트하는 방법을 알아야합니다 (마운트되지 않음). 따라서 Linux가 준비가되어 있지 않으면 부팅 할 수 없습니다.

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

이러한 경우 하드웨어 CD / DVD 에뮬레이터가 필요하거나 (실제 하드웨어 인 경우) 가상 머신의 가상 CD / DVD 장치에 .iso를 마운트하십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.