Booten Sie von GRUB2 aus ein ISO in einem logischen LVM2-Volume

Booten Sie von GRUB2 aus ein ISO in einem logischen LVM2-Volume

tl;dr – Ist es möglich, von einer ISO-Datei zu booten, die sich in einem unverschlüsselten logischen LMV2-Volume befindet? Wie?

Ich versuche, dies in einer VirtualBox-VM einzurichten, bevor ich es tatsächlich mit meinem Laptop mache. Ich habe Folgendes eingerichtet:

  • 4 GPT-Partitionen
    • gpt1 - 2M ef02 BIOS-Boot
    • gpt2 – 5G unverschlüsselt, kein LVM, für verschiedene Daten, ISOs usw.
    • gpt3 – 5G unverschlüsseltes LVM, für /boot, ISOs usw.
    • gpt4 – verbleibend, lvm, verschlüsselt mit dm-crypt/luks, für Root, Swap, Home usw.
  • in gpt2 habe ich Kopien der aktuellen Arch- und Xubuntu-ISOs
  • in gpt3 habe ich ein lvm2 lv mit den gleichen Kopien der gleichen ISOs

Bei mir läuft folgendes:

  • in gpt4 funktionierende Installationen von Arch und Xubuntu (und ich würde gerne irgendwann andere Distributionen in anderen logischen Volumes hinzufügen)
  • grub2 von Arch auf /dev/sda installiert
  • mit dem configfile-Befehl von grub2 können Sie zwischen den Grub2-Menüs beider Distributionen wechseln und booten
  • kann ISOs aus dem Grub-Menü von nicht-LVM gpt2 booten

Ich möchte von den ISOs im GPT3-LVM booten (und letztendlich die Nicht-LVM-GPT2-Partition überhaupt nicht haben).

Mein Grub-Eintrag ist:

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
}

Die beiden Loopback-Zeilen verweisen auf zwei verschiedene Kopien desselben ISO. Ich habe in der Grub-Befehlszeile überprüft, dass beide Loopback-Zeilen funktionieren.

Beim Booten vom ISO in der Nicht-LVM-Partition funktioniert alles einwandfrei.

Beim Booten vom ISO in der LVM-Partition wird der Bootvorgang gestartet und es tritt schließlich dieser Fehler auf:

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

Für den Bogeneinstieg:

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
}

Das Booten von einem GPT2-ISO funktioniert, aber ich weiß nicht, in was ich „/dev/sda2“ für den LVM-Boot ändern muss.


EDIT: Kann das gemacht werden? FürbeliebigOffizielle .iso-Datei der aktuellen Linux-Distribution? Fedora? Debian? openSUSE? CentOS?

Ist das unmöglich? Oder ist es etwas, auf das noch niemand zuvor gekommen ist?


EDIT2: Meine Prämie ist längst abgelaufen und nach 9 Monaten gehe ich davon aus, dass dies mit keiner Linux-Distribution einfach möglich ist. Ich lasse die Frage offen, aber ich bezweifle, dass es in naher Zukunft eine funktionierende Lösung geben wird.

Antwort1

Mit dem Fedora 21 ISO habe ich gerade erfolgreich Folgendes ausprobiert:

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=1weist Linux an, alle LVMs zu laden undIso-Scandurchsucht sie.

Antwort2

Inspiriert vondiese einfache Lösung für UbuntuIch habe Folgendes verwendet, womit ein Fedora 27 KDE-ISO und ein Ubuntu 17.10-ISO geladen werden können.

Ich habe einfach die folgenden Zeilen in die Datei angehängt/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
}

Erläuterung

  • Die Zeile, die mit beginnt, set iso_pathgibt den Pfad an, in dem sich die ISO-Datei auf dem logischen Volume befindet. Wenn ich mein System starte, liegt sie in /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", ist aber /homedas gemountete logische Volume, also lasse ich diese Zeile weg und beginne den Pfad mit/erik/Downloads/…
  • Die Zeile, die mit beginnt, searchhat am Ende eine seltsame alphanumerische Variable (eine sogenannte UUID), die mit beginnt 6340. Ich habe diese Nummer aus dem Befehl

    sudo blkid
    

    was mir unter anderem die folgende Zeile gab

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • linuxWenn Sie andere ISO-Dateien booten möchten, sind die Zeilen, die mit und beginnen, ebenfalls wichtig initrd. Ich habe sie durchÖffnen der ISO-Dateimit file-roller(GUI zum Extrahieren komprimierter Archive) oder mc(Konsolen-Dateimanager).

    • Fedora und ähnliche:Dort geht man in das Verzeichnis /isolinux, wo man eine Datei namens findet isolinux.cfg. Dort fand ich einige Zeilen, die mit beginnen label, und darunter die folgenden wichtigen Zeilen

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

      mit dem Sie die letzten beiden Zeilen meines grub2 ausfüllen werden menuentry.

    • Ubuntu und ähnliche:Dort gehst du in das Verzeichnis /boot/grub, in dem du eine Datei namens findest grub.cfg. Hier findest du einige Zeilen, die mit beginnen menuentry, und darunter die folgenden wichtigen Zeilen

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

      die Sie einfach kopieren können.

Antwort3

Ich glaube, dass dies für die offizielle ISO-Datei der meisten Distributionen nicht möglich ist.

Der Fehler, den Sie erhalten:

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

bedeutet, dass das von Ihnen gestartete Live-System beim Booten nach einem CD/DVD-Laufwerk sucht und keines findet.

Live-CDs sind nicht so konfiguriert, dass sie auf einem LVM nach ihrem Quell-ISO suchen. Sie können vielleicht die Boot-Skripte des Images ändern, um dies zu tun, aber ich glaube nicht, dass eine der aktuellen offiziellen ISO-Dateien der Distribution das tut. Sie können versuchen, die Entwickler Ihrer bevorzugten Distribution zu kontaktieren, um dies vielleicht zu integrieren?

Antwort4

Nur eine Anmerkung dazu:

Beim Booten muss das ISO gemountet werden; Sie müssen also wissen, wie es zu finden ist.

Grub2 kann das ISO mit insmod...-Befehlen sehen, aber das bewirkt nichts anderes, als dass Grub2 das ISO liest, es in einer Schleife mountet usw., aber sobald das Linux im ISO startet, ist das LVM / LUKS / die Schleife / usw. nicht da (nicht gemountet), die Boot-Skripte im ISO müssen wissen, wie dieses LVM / LUKS / die Schleife gemountet wird; wenn dieses Linux also nicht dazu bereit ist, wird es nicht möglich sein, davon zu booten.

Beispiel ohne LVM, LUKS usw. ... Wenn eine normale Linux LiveCD ISO nicht dafür ausgelegt ist, beim Booten eine Schleife zu suchen und in einer .iso-Datei zu mounten, wird es nie möglich sein, von Grub2 aus (mit .iso als Datei) in sie zu booten.

In solchen Fällen benötigen Sie einen Hardware-CD/DVD-Emulator (bei echter Hardware) oder können die ISO-Datei einfach auf der virtuellen CD/DVD-Einheit einer virtuellen Maschine mounten.

Die andere Möglichkeit besteht natürlich darin, ein solches ISO zu „bearbeiten“, um beim Booten einige Skripte zum Suchen und Mounten von LVM/LUKS usw. einzubinden.

verwandte Informationen