Table des matières

Lancer des images iso directement depuis GRUB 2

Lancer ses ISOs avec Grub permet de :

Voici comment lancer vos isos présents sur le disque dur directement avec Grub 2.

Nous utiliserons un fichier de configuration par système d'exploitation et le référencerons dans grub.cfg.

Pré-requis

Première étape

Dans les exemples, la partition pour les fichiers isos sera /dev/sdb5 → (hd1,5)

Rappel de la notation de GRUB :

  • disque :
    • sda → hd0
    • sdb → hd1
    • etc.
  • partition :
    • sda1 → 1
    • sda2 → 2
    • etc.
  1. Avec Gparted, créez la partition qui recevra les fichiers isos (ici, /dev/sdb5 en NTFS)
  2. Montez cette partition :
    1. Créez le répertoire /media/partisos :

      ...@...:~$ sudo mkdir /media/partisos

    2. Repérez l'UUID de la partition voulue (ici, /dev/sdb5) :

      ...@...:~$ sudo blkid /dev/sdb5
      /dev/sdb5: LABEL="isos" UUID="19D22ADE39FB5783" TYPE="ntfs" PARTUUID="6db6c434-05"

    3. Éditez avec les droits d'administration le fichier /etc/fstab pour y ajouter la ligne :
      /etc/fstab
      ...
      UUID=19D22ADE39FB5783	/media/partisos	ntfs-3g	rw,user,auto,gid=1000,uid=1000,nls=utf8,umask=002	0       0
    4. Montez la partition :

      ...@...:~$ sudo mount /media/partisos

  3. Créez le dossier /media/partisos/isos/ avec les droits d'écriture :

    ...@...:~$ sudo mkdir -p /media/partisos/isos
    ...@...:~$ sudo chown $USER:$USER isos

  4. Créez un lien symbolique dans le dossier Téléchargements pour un accès facile :

    ...@...:~$ ln -f -s -r -t ~/Téléchargements isos

Désormais, les fichiers iso téléchargés pourront être déplacés dans ce dossier isos depuis le dossier ~/Téléchargements.

Les fichiers de configuration de grub dans /boot/grub/grub.cfg

Autres étapes

  1. Modifiez la configuration de GRUB pour ne plus devoir lancer la commande update-grub après chaque modification et pouvoir modifier les sous-menus sans droits d'administration :
    1. Éditez avec les droits d'administration le fichier /etc/grub.d/40_custom pour lui ajouter cette entrée de menu qui mène à un fichier de configuration situé sur la partition isos :
      /etc/grub.d/40_custom
      ...
      menuentry "   " {
          true
      }
      
      menuentry "===>> lancer mes isos" {
          search --set=root --file /isos/grubiso.cfg
          configfile /isos/grubiso.cfg
      }

      Les sous-menus seront écrits dans le fichier grubiso.cfg, accessible sans droits d'administrateur depuis ~/Téléchargements/isos/grubiso.cfg

    2. Activez cette configuration :

      ...@...:~$ sudo update-grub

  2. Créez et éditez le fichier :
    ~/Téléchargements/isos/grubiso.cfg
    set iso_root="/isos" # à adapter selon le répertoire des isos
     
    menuentry "-------------------     Sous-titre     -------------------" {
        true
    }
     
    menuentry "Titre_entrée_menu" {
        set iso_name="<nom_fichier>.iso"
        set iso_path="$iso_root/$iso_name"
        search --set=root --file $iso_path
        loopback loop $iso_path
        echo "Lancement de l'iso en cours, veuillez patienter.."
     
        <Lignes variables>
    }

    Voici les lignes variables pour quelques cas :

    1. Distributions Ubuntu :
      ~/Téléchargements/isos/grubiso.cfg
      ...
      set VAR="<variante>"
      linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$iso_path boot=casper \
      file=/cdrom/preseed/$VAR.seed noprompt quiet splash toram --
       
      initrd (loop)/casper/initrd
      1. Variantes :
        Ubuntu set VAR=“ubuntu”
        Kubuntu set VAR=“kubuntu”
        Lubuntu set VAR=“lubuntu”
        Ubuntu-Budgie set VAR=“ubuntu-budgie”
        Ubuntu-Mate set VAR=“ubuntu-mate”
        Ubuntu Studio set VAR=“ubuntustudio”
        Xubuntu set VAR=“xubuntu”
        Ubuntu Kylin set VAR=“cli”
        Linux Mint set VAR=“linuxmint”
        Voyager set VAR=“xubuntu”
    2. Distributions Linux :
      1. Arch
        Archbang linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/sda2 img_loop=$iso_path earlymodules=loop archisobasedir=arch archisolabel=ARCHBANG
        initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/x86_64/archiso.img
        environnement Openbox
        (modifier 'img_dev' selon la partition où est votre iso et 'archisolabel')
        ArchEX linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/sda2 img_loop=$iso_path earlymodules=loop archisobasedir=arch archisolabel=ARCH_201607
        initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/x86_64/archiso.img
        environnement Lxde
        (modifier 'img_dev' selon la partition où est votre iso et 'archisolabel')
        Manjaro Lxqt menuentry “.. Manjaro Lxqt” {
             set iso_path=“/manjaro-lxqt-20.0-200423-linux56.iso”
             search –set=root –file $iso_path
             probe -u $root –set=iso_disk
             set iso_device=“/dev/disk/by-uuid/$iso_disk”
             loopback loop $iso_path
             echo 'Lancement en cours, patientez …'
             probe -l (loop) –set=klabel
             linux (loop)/boot/vmlinuz-x86_64 img_dev=$iso_device img_loop=$iso_path misobasedir=manjaro misolabel=$klabel driver=free lang=fr_FR keytable=fr tz=Europe/Paris
             initrd (loop)/boot/intel_ucode.img (loop)/boot/initramfs-x86_64.img
        }
        ('img_dev' et 'misolabel' sont trouvés avec la commande “probe”)
      2. Debian :
        Stable linux (loop)/live/vmlinuz-4.9.0-4-amd64 boot=live findiso=${iso_path} components keyboard-layouts=fr locales=fr_FR.UTF-8 timezone=Europe/Paris
        initrd (loop)/live/initrd.img-4.9.0-4-amd64
        (version 9.3 : Stretch)
        LMDE linux (loop)/live/vmlinuz boot=live findiso=${iso_path} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
        initrd (loop)/live/initrd.lz
      3. Fedora live Workstation : Par rapport au menu standard, on définira une variable de plus : $isolabel. Pour la trouver, il faut ouvrir l'iso avec le gestionnaire d'archives (clic droit). Dans le dossier 'isolinux', il faut ouvrir 'isolinux.cfg' puis rechercher CDLABEL
        set isolabel="Fedora-WS-Live-32-1-6"
        linuxefi (loop)/images/pxeboot/vmlinuz root=live:CDLABEL=$isolabel iso-scan/filename=$iso_path rd.live.image rhgb
        initrdefi (loop)/images/pxeboot/initrd.img
      4. Gentoo :
        Gentoo Live DVD linux (loop)/isolinux/gentoo isoboot=$iso_path root=/dev/ram0 init=/linuxrc aufs looptype=squashfs loop=/image.squashfs cdroot vconsole.keymap=fr locale=fr_FR console=tty1 nomodeset
        initrd (loop)/isolinux/gentoo.xz
        (les codes pour le lancer directement en français ne fonctionnent plus depuis la version 2016)
        Sabayon linux (loop)/boot/sabayon root=/dev/ram0 init=/linuxrc lang=fr_FR isoboot=${iso_path} cdroot looptype=squashfs loop=/livecd.squashfs overlayfs
        initrd (loop)/boot/sabayon.igz
        (lui peut être lancé en français sans problème)
      5. OpenMandriva Lx :
        menuentry "OpenMandriva" {
        	set iso_path=/isos/OpenMandrivaLx.4.1-plasma.x86_64.iso
        	set isoname=OpenMandrivaLx_4.1
        	loopback loop $iso_path
        	echo	'Lancement en cours, patientez ...'
        	linux (loop)/boot/vmlinuz0 root=live:LABEL=${isoname} iso-scan/filename=${iso_path} locale.LANG=fr_FR.UTF-8 vconsole.keymap=fr rd.live.image toram --
        	initrd (loop)/boot/liveinitrd.img
        }
      6. openSUSE :
        linux (loop)/boot/x86_64/loader/linux install=hd:$iso_path
        initrd (loop)/boot/x86_64/loader/initrd
      7. Slackware :
        linux (loop)/kernels/huge.s/bzImage load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s locale=fr_FR.utf8 kbd=fr tz=Europe/Paris
        initrd (loop)/isolinux/initrd.img
    3. Distributions linux spécialisées :
      1. Jeux :
        1. Fedora Games (voir plus haut) :
          set isolabel="Fedora-Game-Live-24-1-2"
          linux (loop)/isolinux/vmlinuz root=live:CDLABEL=$isolabel iso-scan/filename=$iso_path rootfstype=auto rd.live.image rhgb KEYTABLE=fr LANG=fr_FR.utf8 locale.lang=fr_FR vconsole.keymap=fr\\ initrd (loop)/isolinux/initrd.img
      2. Logiciels éducatifs :
        edubuntu pas d'iso depuis 2014
        PrimTux linux (loop)/live/vmlinuz2 boot=live findiso=${iso_path} components live-config hostname=localhost lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
        initrd (loop)/live/initrd2.img
        Uberstudent linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$iso_path boot=casper file=/cdrom/preseed/uberstudent.seed noprompt quiet splash
        initrd (loop)/casper/initrd.lz
      3. Logiciels pour la MAO (Musique Assistée par Ordinateur) :
        Ubuntu Studio (déjà cité plus haut)
        Musix linux (loop)/live/vmlinuz boot=live findiso=${iso_path} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
        initrd (loop)/live/initrd.img
    4. Distributions pour test d'environnements :
      1. Enlightenment (Elive)
        linux (loop)/live/vmlinuz1 username=eliveuser boot=live findiso=${iso_path} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes loglevel=0 quiet splash
        initrd (loop)/live/initrd1.img
      2. Pantheon d'Elementary OS (basé sur Ubuntu)
            linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$iso_path boot=casper noprompt quiet splash
            initrd (loop)/casper/initrd.lz
      3. antiX: IceWm et Fluxbox :
        probe -u $root --set=iso_disk
        linux (loop)/antiX/vmlinuz fromiso=$iso_path bootuuid=$iso_disk lang=fr tz=Europe/Paris xres=1920x1080 toram hwclock=utc quiet splasht disable=lxF
        initrd (loop)/antiX/initrd.gz

        Remarque : 'xres' est à adapter à votre configuration. Sur leur site web, on trouve aussi une autre distribution nommée MX19 qui fonctionne avec le même menu grub.

    5. Windows 10 :
      menuentry "Windows 10" --class windows --class os {
          # Insert modules needed in order to access the iso-file
          insmod part_gpt
          #insmod part_msdos
      
          insmod ntfs
          #insmod ext2
      
          # Insert module needed in order to find partition
          insmod search_fs_uuid
      
          # Set UUID of partition with the iso-image
          # and let grub2 find the partition
          # (save it's identifier to the variable $root)
          set uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
          search --no-floppy --set=root --fs-uuid $uuid
      
          # Mount the iso image by addressing it with (partition)/path
          set iso=/ISO_PATH/file.iso
          loopback loop ($root)$iso
      
          # boot (chain-load) the image using the cdboot.efi file located
          # on the win10-image
          chainloader (loop)/efi/microsoft/boot/cdboot.efi
      }
      1. Remplacer XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX avec UUID de la partition ou est l'image Windows 10.
      2. Activer les modules necessaires :
        1. insmod part_gpt: ce module est nécessaire, si Win10-ISO-Image est sur une table de partition GPT.
        2. insmod part_msdos: Choisir si l'image Windows est sur une table de partition DOS
        3. insmod ntfs: ce module est nécessaire si l'image Windows est sur une table de partition NTFS.
        4. insmod ext2: Remplacer insmod ntfs par insmod ext2, si l'image est sur des partitions ext2/ext3 ou ext4
      3. Remplacer /ISO_PATH/file.iso pas le chemin d'accès et le fichier iso
  3. exemple :
    ~/Téléchargements/isos/grubiso.cfg
    menuentry "-------------------     Distributions Ubuntu     -------------------" {
        true
    }
    
    menuentry "Ubuntu 20.04.4 LTS (Focal Fossa) 64 bits" { 
        set iso_name="ubuntu-20.04.3-desktop-amd64.iso"
        set iso_path="$iso_root/$iso_name"
        search --set=root --file $iso_path
        loopback loop $iso_path
        echo "Lancement de l'iso en cours, veuillez patienter.."
        linux (loop)/casper/vmlinuz \
        locale=fr_FR bootkbd=fr console-setup/layoutcode=fr \
        iso-scan/filename=$iso_path boot=casper file=/cdrom/preseed/xubuntu.seed \
        noprompt quiet splash toram --
        initrd (loop)/casper/initrd
    }
  4. Syntaxe :
    1. Ligne vide :
      menuentry "   " {
          true
      }
    2. Ligne de sous-titre :
      menuentry "-------------------     Sous-titre     -------------------" {
          true
      }
    3. Entrée de menu :
      menuentry "Titre_de_menu" { 
          set iso_name="nom_du_fichier.iso"
          set iso_path="$iso_root/$iso_name"
          search --set=root --file $iso_path
          loopback loop $iso_path
          echo "Lancement de l'iso en cours, veuillez patienter.."
          linux (loop)/casper/vmlinuz \
          locale=fr_FR bootkbd=fr console-setup/layoutcode=fr \
          iso-scan/filename=$iso_path boot=casper file=/cdrom/preseed/xubuntu.seed \
          noprompt quiet splash toram --
          initrd (loop)/casper/initrd
      }

Voir aussi :Commandes disponibles dans GRUB

Conclusion

Problèmes connus

Voir aussi


Basé sur « Lancer des images iso directement depuis GRUB 2 » par doc.ubuntu-fr.org.