Lancer des images iso directement depuis GRUB 2

Lancer ses ISOs avec Grub permet de :

tester n'importe quelle distribution Linuxinstaller une distribution sans avoir à graver un CDinstaller une distribution de maintenance quand l'ordinateur ne marche plus (gparted live, rescueCD,.. )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

version de Grub >= 1.97 :

...@...:~$ grub-install -V
grub-install (GRUB) 2.04-1ubuntu26.15

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 -> hd0sdb -> hd1etc.partition :sda1 -> 1sda2 -> 2etc.
Avec Gparted, créez la partition qui recevra les fichiers isos (ici, /dev/sdb5 en NTFS)Montez cette partition :Créez le répertoire /media/partisos :

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

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"

Éditez avec les droits d'administration le fichier /etc/fstab pour y ajouter la ligne :

...
UUID=19D22ADE39FB5783	/media/partisos	ntfs-3g	rw,user,auto,gid=1000,uid=1000,nls=utf8,umask=002	0 0

Montez la partition :

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

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

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

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

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 :É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 :

...
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

Activez cette configuration :

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

Créez et éditez le fichier :

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 :

Distributions Ubuntu :

... 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

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”

Distributions Linux :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”)

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

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

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)

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
}

openSUSE :

linux (loop)/boot/x86_64/loader/linux install=hd:$iso_path
initrd (loop)/boot/x86_64/loader/initrd

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

Distributions linux spécialisées :Jeux :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

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

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

Distributions pour test d'environnements :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

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

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.

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
}

Remplacer XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX avec UUID de la partition ou est l'image Windows 10.Activer les modules necessaires :insmod part_gpt: ce module est nécessaire, si Win10-ISO-Image est sur une table de partition GPT.insmod part_msdos: Choisir si l'image Windows est sur une table de partition DOSinsmod ntfs: ce module est nécessaire si l'image Windows est sur une table de partition NTFS.insmod ext2: Remplacer insmod ntfs par insmod ext2, si l'image est sur des partitions ext2/ext3 ou ext4Remplacer /ISO_PATH/file.iso pas le chemin d'accès et le fichier isoexemple :

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
}

Syntaxe :Ligne vide :

menuentry " " {
true
}

Ligne de sous-titre :

menuentry "------------------- Sous-titre -------------------" {
true
}

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

(fr) https://doc.ubuntu-fr.org/tutoriel/grub2_lancer_des_images_iso(en) https://www.gnu.org/software/grub/manual/grub/grub.pdf(fr) http://tradinfo.e-monsite.com/medias/files/manuel-gnu-grub-2.04-multiboot-2.pdf

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