Da GRUB2, avviare un ISO in un volume logico LVM2


8

tl; dr - È possibile eseguire l'avvio da un file .iso che si trova in un volume logico lmv2 non crittografato? Come?

Sto provando a configurarlo in una VM VirtualBox prima di farlo sul serio con il mio laptop. Ho il seguente set up:

  • 4 partizioni gpt
    • gpt1 - avvio 2M ef02 bios
    • gpt2 - 5G non crittografato non-lvm, per dati vari, iso, ecc.
    • gpt3 - 5G non crittografato lvm, per / boot, iso's, ecc.
    • gpt4 - rimanente, lvm, crittografato con dm-crypt / luks, per root, swap, home, ecc.
  • in gpt2, ho copie degli attuali iso di Arch e Xubuntu
  • in gpt3, ho un lvm2 lv con le stesse copie degli stessi iso

Ho il seguente lavoro:

  • in gpt4, installazioni funzionanti di Arch e Xubuntu (e vorrei aggiungere altre distro in altri volumi logici ad un certo punto)
  • grub2 installato da Arch on / dev / sda
  • usando il comando configfile di grub2, puoi cambiare e avviare entrambi i menu di grub2 di distro
  • può avviare iso's dal menu di grub da non-lvm gpt2

Quello che vorrei fare è fare il boot dagli iso in gpt3 lvm (e alla fine, non ho nemmeno la partizione non lvm gpt2).

La mia voce 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
}

Le 2 linee di loopback indicano 2 copie diverse dello stesso iso. Ho verificato alla riga di comando grub che entrambe le linee di loopback funzionano.

Quando si avvia dall'iso nella partizione non lvm, tutto funziona bene.

Quando si avvia dall'iso nella partizione lvm, l'avvio si avvia e alla fine viene visualizzato questo errore:

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

Per la voce dell'arco:

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
}

l'avvio da gpt2 iso funziona, ma non so cosa cambiare "/ dev / sda2" in per lvm boot.


EDIT: questo può essere fatto? Per qualsiasi file .iso ufficiale della distro Linux corrente? Fedora? Debian? openSUSE? CentOS?

È impossibile? O è qualcosa che nessuno ha mai pensato di provare prima?


EDIT2: La mia generosità è da tempo scaduta e dopo 9 mesi, presumo che ciò non sia possibile con nessuna distribuzione Linux. Lascerò aperta la domanda, ma dubito che ci sarà una soluzione funzionante in qualsiasi momento nel prossimo futuro.

Risposte:


1

Usando Fedora 21 ISO, ho appena provato con successo quanto segue:

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 dirà a Linux di caricare tutti i LVM e le ricerche iso-scan li eseguono .


L' UUID nella riga che inizia con searchè quello del volume logico che contiene il file iso, giusto? Per ottenerlo, devi farlo sudo blkid.
erik,

Questo potrebbe essere fatto molto più facilmente, vedi la mia risposta per l'avvio di Fedora e Ubuntu da LVM.
erik,

1

Ispirato da questa semplice soluzione per Ubuntu , ho usato quanto segue, che funziona per caricare un iso KDE Fedora 27 e un iso Ubuntu 17.10.

Ho appena aggiunto le seguenti righe nel file /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
}

Spiegazione

  • La riga che inizia con set iso_pathdefinisce il percorso in cui è possibile trovare il file iso sul volume logico. Quando avvio il mio sistema, si trova /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", ma /homeè il volume logico montato, quindi lo lascio fuori e inizio il percorso/erik/Downloads/…
  • La riga che inizia con searchuna strana variabile alfanumerica (un cosiddetto UUID) alla fine, che inizia con 6340. Ho ricevuto questo numero dal comando

    sudo blkid
    

    che mi ha dato, insieme ad altri, la seguente riga

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Quindi, un'altra cosa importante se si desidera avviare altri file ISO, sono le linee che iniziano con linuxe initrd. Li ho ottenuti aprendo il file iso con file-roller(gui per l'estrazione di archivi compressi) o mc(console file manager).

    • Fedora e simili: lì vai nella directory /isolinux, dove troverai un file chiamato isolinux.cfg. Lì ho trovato alcune righe che iniziano con label, e sotto di esse le seguenti righe importanti

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

      che userete per riempire le ultime due righe del mio grub2 menuentry.

    • Ubuntu e simili: lì vai nella directory /boot/grub, dove troverai un file chiamato grub.cfg. Qui troverai alcune righe che iniziano con menuentry, e sotto di esse le seguenti righe importanti

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

      che puoi semplicemente copiare.


0

Penso che non sia possibile per il file ISO ufficiale della maggior parte delle distribuzioni.

L'errore che stai ricevendo:

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

significa che all'avvio, il sistema live che stai iniziando è alla ricerca di un'unità cd / dvd e non ne trova alcuna.

I CD live non sono configurati per cercare i loro iso di origine su un LVM; puoi forse modificare gli script di avvio dell'immagine per farlo, ma non credo che nessun file .iso ufficiale della distro attuale lo faccia. Puoi provare a contattare gli sviluppatori della tua distro preferita per integrarla forse?


Si è possibile, vedere la mia risposta semplice, dove faccio il boot da Fedora 27 e Ubuntu 17.10.
erik,

0

Puoi provare questo:

Aggiungi questo all'inizio del menu:

insmod lvm

Quindi, specifica la tua partizione LVM con:

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

Quindi la tua voce ISO di Xubuntu sarebbe così:

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
}

Si prega di apportare correzioni secondo necessità.

Ciò dovrebbe consentire a GRUB di riconoscere il volume lvm2, rendendo possibile la lettura del file ISO al suo interno. Tuttavia, probabilmente l'ISO non sarà ancora trovato ...


Ho provato i tuoi suggerimenti, ma come hai detto, l'iso non è ancora stato trovato.
istantanea

0

Solo un punto:

L'ISO all'avvio deve montare l'iso, quindi deve sapere come trovarlo.

Grub2 può vedere l'ISO con i comandi insmod ..., ma questo non fa altro che lasciare che Grub2 legga all'interno dell'ISO, lo monti in loop, ecc., Ma non appena Linux all'interno dell'ISO avvia LVM / LUKS / loop / etc è non lì (non montato), gli script di avvio all'interno dell'ISO devono sapere come montare quel LVM / LUKS / loop; quindi se Linux non è pronto a farlo, non sarà possibile avviarlo.

Esempio senza LVM, LUKS, ecc ... se un normale ISO LiveCD Linux non è progettato per cercare e montare un loop su un file .iso durante l'avvio, non sarà mai possibile avviarlo da Grub2 (con .iso come file).

In questi casi è necessario un emulatore di CD / DVD hardware (se su hardware reale) o semplicemente montare .iso sull'unità CD / DVD virtuale di una macchina virtuale.

L'altra opzione, ovviamente, è quella di "modificare" tale ISO per incorporare all'avvio alcuni script per cercare e montare LVM / LUKS / ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.