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_path
gibt 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/home
das gemountete logische Volume, also lasse ich diese Zeile weg und beginne den Pfad mit/erik/Downloads/…
Die Zeile, die mit beginnt,
search
hat am Ende eine seltsame alphanumerische Variable (eine sogenannte UUID), die mit beginnt6340
. Ich habe diese Nummer aus dem Befehlsudo blkid
was mir unter anderem die folgende Zeile gab
/dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
linux
Wenn Sie andere ISO-Dateien booten möchten, sind die Zeilen, die mit und beginnen, ebenfalls wichtiginitrd
. Ich habe sie durchÖffnen der ISO-Dateimitfile-roller
(GUI zum Extrahieren komprimierter Archive) odermc
(Konsolen-Dateimanager).Fedora und ähnliche:Dort geht man in das Verzeichnis
/isolinux
, wo man eine Datei namens findetisolinux.cfg
. Dort fand ich einige Zeilen, die mit beginnenlabel
, und darunter die folgenden wichtigen Zeilenkernel 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 findestgrub.cfg
. Hier findest du einige Zeilen, die mit beginnenmenuentry
, und darunter die folgenden wichtigen Zeilenlinux /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.