Depuis GRUB2, démarrez une image ISO dans un volume logique LVM2


8

tl; dr - Est-il possible de démarrer à partir d'un fichier .iso situé dans un volume logique lmv2 non chiffré? Comment?

J'essaie de configurer cela dans une machine virtuelle VirtualBox avant de le faire pour de vrai avec mon ordinateur portable. J'ai la configuration suivante:

  • 4 partitions gpt
    • gpt1 - Démarrage bios 2M ef02
    • gpt2 - 5G non lvm non crypté, pour les données diverses, les iso, etc.
    • gpt3 - LVM 5G non chiffré, pour / boot, iso, etc.
    • gpt4 - restant, lvm, chiffré avec dm-crypt / luks, pour root, swap, home, etc.
  • dans gpt2, j'ai des copies des archs actuels et des iso Xubuntu
  • en gpt3, j'ai un lvm2 lv avec les mêmes copies du même iso

J'ai le travail suivant:

  • dans gpt4, des installations fonctionnelles d'Arch et Xubuntu (et aimeraient ajouter d'autres distributions dans d'autres volumes logiques à un moment donné)
  • grub2 installé depuis Arch sur / dev / sda
  • en utilisant la commande configfile de grub2, peut basculer et démarrer à partir du menu grub2 de la distribution
  • peut démarrer iso à partir du menu grub de non-lvm gpt2

Ce que je voudrais faire, c'est démarrer à partir des iso dans gpt3 lvm (et finalement, même pas du tout la partition non-lvm gpt2).

Mon entrée grub est:

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
}

Les 2 lignes de bouclage pointent vers 2 copies différentes de la même iso. J'ai vérifié sur la ligne de commande grub que les deux lignes de bouclage fonctionnent.

Lors du démarrage à partir de l'iso dans la partition non lvm, tout fonctionne bien.

Lors du démarrage à partir de l'iso dans la partition lvm, le démarrage démarre et obtient finalement cette erreur:

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

Pour l'entrée en arc:

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
}

démarrer à partir de gpt2 iso fonctionne, mais je ne sais pas quoi changer le "/ dev / sda2" pour le démarrage lvm.


EDIT: Cela peut-il être fait? Pour tout fichier .iso officiel de la distribution Linux actuelle? Feutre? Debian? openSUSE? CentOS?

Est-ce impossible? Ou est-ce quelque chose que personne n'a pensé à essayer auparavant?


EDIT2: Ma prime a expiré depuis longtemps, et après 9 mois, je suppose que ce n'est tout simplement pas possible avec une distribution Linux. Je vais laisser la question ouverte, mais je doute qu'il y ait une solution de travail à tout moment dans un proche avenir.

Réponses:


1

En utilisant l'IFO de Fedora 21, je viens d'essayer avec succès ce qui suit:

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 indiquera à Linux de charger tous les LVM et iso-scan les recherchera.


L' UUID dans la ligne qui commence par searchest celui du volume logique qui contient le fichier iso, non? Pour l'obtenir, il faut le faire sudo blkid.
erik

Cela pourrait être fait beaucoup plus facilement, voir ma réponse pour démarrer Fedora et Ubuntu à partir de LVM.
erik

1

Inspiré par cette solution simple pour Ubuntu , j'ai utilisé ce qui suit, qui fonctionne pour charger une iso Fedora 27 KDE et une iso Ubuntu 17.10.

Je viens d'ajouter les lignes suivantes dans le fichier /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
}

Explication

  • La ligne qui commence par set iso_pathdéfinit le chemin d'accès où se trouve le fichier iso sur le volume logique. Lorsque je démarre mon système, il se trouve /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", mais /homec'est le volume logique monté, donc je laisse cela de côté et commence le chemin avec/erik/Downloads/…
  • La ligne qui commence par searcha une étrange variable alphanumérique (un soi-disant UUID) à la fin, qui commence par 6340. J'ai obtenu ce numéro de la commande

    sudo blkid
    

    ce qui m'a donné, avec d'autres, la ligne suivante

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Ensuite, une autre chose importante si vous voulez démarrer d'autres fichiers iso, ce sont les lignes qui commencent par linuxet initrd. Je les ai obtenus en ouvrant le fichier iso avec file-roller(gui pour extraire les archives compressées) ou mc(gestionnaire de fichiers de la console).

    • Fedora et similaire: Là, vous allez dans le répertoire /isolinux, où vous trouverez un fichier appelé isolinux.cfg. Là, j'ai trouvé quelques lignes commençant par label, et en dessous les lignes importantes suivantes

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

      que vous utiliserez pour remplir les deux dernières lignes de mon grub2 menuentry.

    • Ubuntu et similaire: Là, vous allez dans le répertoire /boot/grub, où vous trouverez un fichier appelé grub.cfg. Vous trouverez ici quelques lignes commençant par menuentryet en dessous les lignes importantes suivantes

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

      que vous pouvez simplement copier.


0

Je pense que ce n'est pas possible pour le fichier iso officiel de la plupart des distributions.

L'erreur que vous obtenez:

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

signifie qu'au démarrage, le système en direct que vous démarrez recherche un lecteur de cd / dvd et n'en trouve aucun.

Les CD live ne sont pas configurés pour rechercher leur iso source sur un LVM; vous pouvez peut-être modifier les scripts de démarrage de l'image pour le faire, mais je ne pense pas qu'un fichier .iso officiel de la distribution actuelle le fasse. Vous pouvez essayer de contacter les développeurs de votre distribution préférée pour que cela soit intégré peut-être?


Il est possible, voir ma réponse simple, où je démarre depuis Fedora 27 et Ubuntu 17.10.
erik

0

Vous pouvez essayer ceci:

Ajoutez ceci au début de l'entrée de menu:

insmod lvm

Ensuite, spécifiez votre partition LVM avec:

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

Ainsi, votre entrée ISO Xubuntu serait comme ceci:

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
}

Veuillez apporter les corrections nécessaires.

Cela devrait permettre à GRUB de reconnaître le volume lvm2, ce qui permet d'y lire le fichier ISO. Cependant, l'ISO ne sera probablement toujours pas trouvé ...


J'ai essayé vos suggestions, mais comme vous l'avez dit, l'iso n'est toujours pas trouvé.
snapshoe

0

Juste un point à ce sujet:

L'ISO au démarrage doit monter l'iso, donc doit savoir comment le trouver.

Grub2 peut voir l'ISO avec les commandes insmod ..., mais cela ne fait rien d'autre que de laisser Grub2 lire à l'intérieur de l'ISO, le monter en boucle, etc., mais dès que Linux à l'intérieur de l'ISO démarre, LVM / LUKS / loop / etc est pas là (pas monté), les scripts de démarrage à l'intérieur de l'ISO doivent savoir comment monter cette boucle LVM / LUKS; donc si Linux n'est pas prêt à le faire, il ne sera pas possible de démarrer à partir de celui-ci.

Exemple sans LVM, LUKS, etc ... si un ISO LiveCD Linux normal n'est pas conçu pour rechercher et monter une boucle dans un fichier .iso lors du démarrage, il ne sera jamais possible de démarrer dedans depuis Grub2 (avec .iso comme fichier).

Dans de tels cas, vous avez besoin d'un émulateur de CD / DVD matériel (s'il s'agit d'un matériel réel), ou montez simplement le .iso sur l'unité CD / DVD virtuelle d'une machine virtuelle.

L'autre option, bien sûr, est de «modifier» une telle ISO pour incorporer au démarrage certains scripts pour rechercher et monter LVM / LUKS / etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.