Starten Sie von GRUB2 aus eine ISO in einem logischen LVM2-Volume

8

tl; dr - Ist es möglich, von einer ISO-Datei zu starten, die sich auf einem unverschlüsselten logischen lmv2-Volume befindet? Wie?

Ich versuche, dies in einer VirtualBox-VM einzurichten, bevor ich es mit meinem Laptop real mache. Ich habe folgendes eingerichtet:

  • 4 gpt Partitionen
    • gpt1 - 2M ef02 BIOS-Boot
    • gpt2 - 5G unverschlüsselt, nicht lvm, für verschiedene Daten, Isos usw.
    • gpt3 - 5G unverschlüsseltes lvm, für / boot, iso's 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

Ich habe folgende Arbeit:

  • in gpt4 funktionierende Installationen von Arch und Xubuntu (und möchten irgendwann andere Distributionen in anderen logischen Volumes hinzufügen)
  • grub2 installiert von Arch on / dev / sda
  • Mit dem Befehl configfile von grub2 können Sie über die grub2-Menüs beider Distributionen wechseln und booten
  • kann iso's vom grub menu von non-lvm gpt2 booten

Was ich tun möchte, ist von der ISO in gpt3 lvm zu booten (und letztendlich überhaupt nicht die Nicht-lvm gpt2-Partition zu haben).

Mein Madeneintrag 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 2 Loopback-Zeilen zeigen auf 2 verschiedene Kopien derselben ISO. Ich habe an der grub-Befehlszeile überprüft, dass beide Loopback-Zeilen funktionieren.

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

Beim Booten von der ISO in der lvm-Partition wird der Boot gestartet und schließlich wird der folgende Fehler angezeigt:

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

Für den Bogeneintrag:

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 gpt2 iso funktioniert, aber ich weiß nicht, was ich für "lvm boot" in "/ dev / sda2" ändern soll.


EDIT: Kann das gemacht werden? Für die offizielle .iso-Datei einer aktuellen Linux-Distribution? Fedora? Debian? openSUSE? CentOS?

Ist das unmöglich Oder ist es etwas, an das noch niemand gedacht hat?


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

Snapshoe
quelle

Antworten:

1

Mit Fedora 21 ISO habe ich gerade erfolgreich Folgendes versucht:

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 weist Linux an, alle LVMs zu laden, und iso-scan durchsucht sie.

nxxy
quelle
Die UUID in der Zeile, mit der begonnen wird, searchist die des logischen Volumes, das die ISO-Datei enthält, oder? Um es zu bekommen, müssen Sie tun sudo blkid.
Eric
Dies könnte viel einfacher gemacht werden, siehe meine Antwort für das Booten von Fedora und Ubuntu von LVM.
Eric
1

Inspiriert von dieser einfachen Lösung für Ubuntu habe ich Folgendes verwendet, das zum Laden einer Fedora 27 KDE-ISO und einer Ubuntu 17.10-ISO funktioniert.

Ich habe gerade die folgenden Zeilen in die Datei eingefügt /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_pathdefiniert den Pfad, in dem sich die ISO-Datei auf dem logischen Volume befindet. Wenn ich mein System starte, liegt es 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 dies 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 vom Befehl erhalten

    sudo blkid
    

    das gab mir zusammen mit anderen die folgende Zeile

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Eine weitere wichtige Sache, wenn Sie andere ISO-Dateien booten möchten, sind die Zeilen, die mit linuxund beginnen initrd. Ich habe sie durch Öffnen der ISO-Datei mit file-roller(GUI zum Extrahieren komprimierter Archive) oder mc(Konsolendateimanager) erhalten.

    • Fedora und ähnliches: Dort gehen Sie in das Verzeichnis /isolinux, in dem Sie eine Datei namens finden 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 du die letzten beiden Zeilen meines grub2 füllen wirst menuentry.

    • Ubuntu und ähnliches: Dort gehen Sie in das Verzeichnis /boot/grub, in dem Sie eine Datei namens finden grub.cfg. Hier finden Sie 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
      

      was Sie einfach kopieren können.

erik
quelle
0

Ich denke, dass es 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 Live-System, das Sie starten, beim Booten nach einem CD / DVD-Laufwerk sucht und keines findet.

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

Alphatiger
quelle
Es ist möglich, siehe meine einfache Antwort, wo ich von Fedora 27 und Ubuntu 17.10 boote.
Eric
0

Sie könnten dies versuchen:

Fügen Sie dies am Anfang des Menüeintrags hinzu:

insmod lvm

Geben Sie dann Ihre LVM-Partition an mit:

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

Ihr Xubuntu-ISO-Eintrag würde also folgendermaßen aussehen:

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
}

Bitte nehmen Sie die erforderlichen Korrekturen vor.

Dadurch sollte GRUB das lvm2-Volume erkennen und die darin enthaltene ISO-Datei lesen können. Wahrscheinlich wird die ISO jedoch immer noch nicht gefunden ...

Leonardo Dagnino
quelle
Ich habe Ihre Vorschläge ausprobiert, aber wie Sie sagten, wird die ISO immer noch nicht gefunden.
Snapshoe
0

Nur ein Punkt dazu:

Die ISO beim Booten muss die ISO mounten, muss also wissen, wie man sie findet.

Grub2 kann die ISO mit insmod ... -Befehlen sehen, aber das macht nichts anderes, als Grub2 in der ISO lesen zu lassen, sie in einer Schleife zu mounten usw., aber sobald das Linux in der ISO startet, ist LVM / LUKS / loop / etc nicht vorhanden (nicht gemountet), müssen die Boot-Skripte innerhalb der ISO wissen, wie diese LVM / LUKS / Schleife gemountet wird; Wenn Linux nicht dazu bereit ist, kann nicht von dort gebootet werden.

Beispiel ohne LVM, LUKS usw. Wenn eine normale Linux LiveCD-ISO nicht zum Suchen und Mounten einer Schleife in eine ISO-Datei während des Bootens ausgelegt ist, kann sie niemals von Grub2 aus gestartet werden (mit ISO als Datei).

In solchen Fällen benötigen Sie einen Hardware-CD / DVD-Emulator (falls auf realer Hardware) oder montieren Sie einfach die ISO-Datei auf der virtuellen CD / DVD-Einheit einer virtuellen Maschine.

Die andere Möglichkeit besteht natürlich darin, eine solche ISO zu "bearbeiten", um beim Booten einige Skripte zum Suchen und Mounten von LVM / LUKS / usw. einzubeziehen.

Anonimo
quelle