Comment démarrer un fichier ISO à partir de mon lecteur à l'aide de grub2 sur des machines UEFI?

12

J'ai un tas de fichiers ISO en direct comme GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bits , ... téléchargés dans /optet sur mon ancienne machine BIOS, je pouvais simplement les ajouter au menu grub et les démarrer . :-)

J'ai maintenant une machine UEFI et toutes les informations que je peux trouver concernent les machines BIOS.

Quelles sont les étapes pour démarrer ces fichiers ISO à partir de grub?

Je suis juste malade et fatigué de les "graver" sur une clé USB tout le temps car je ne trouve jamais la clé dont j'ai besoin alors que mon ordinateur lui-même est beaucoup plus difficile à perdre dans le chaos total qui m'entoure ici ... ) :-(

Fabby
la source
1
Je suis allé de cette façon il y a quelque temps et c'est génial.
Marbre organique
1
J'aime utiliser une partition distincte, une sur chaque lecteur pour faciliter l'installation sur un autre lecteur ou une installation complète sur des lecteurs flash. help.ubuntu.com/community/Grub2/ISOBoot Exemples: help.ubuntu.com/community/Grub2/ISOBoot/Examples Je trouve que le chemin est correct tel qu'il est avant que les partitions soient montées et que les paramètres de démarrage détaillés soient les deux principaux problèmes pour obtenir ça marche. Le chemin peut même changer si le lecteur flash est branché. Et regarder l'ISO pour voir sa strophe de démarrage et son chemin peut vous aider à comprendre les détails.
oldfred
1
J'ai utilisé cette méthode 'grub-n-iso' beaucoup auparavant, et cela fonctionne bien :-) mais maintenant je teste les fichiers iso sur un ordinateur séparé pour les tester, et je clone à partir des fichiers iso pour accélérer les clés USB3 ou créer des live persistants Clés USB avec mkusb . (Je stocke mes clés USB dans une petite boîte en plastique.)
sudodus
VBox exécute les fichiers ISO OK, utilisez la sauvegarde de l'état de la machine à la fermeture, MultiBootUSB a une option pour glisser-déposer le démarrage ISO et QEMU avec le gestionnaire de machine virtuelle exécutera rapidement une iso.
CSCameron
1
Pour le moment, utilisez uniquement grub2 2.02 pour le montage en boucle ISO. Grub2 2.04 donne une erreur de mémoire insuffisante. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 a toujours grub 2.02.
oldfred

Réponses:

14

Il y a un bogue dans grub 2.04 alors assurez-vous d'avoir une version antérieure ou ultérieure.

Eh bien, les bases pour ajouter un fichier ISO à grub sont les mêmes pour un UEFI que pour une machine BIOS: éditez /etc/grub.d/40_customet ajoutez un menuentryélément (GParted est utilisé dans cet exemple) au bas du fichier:

menuentry "GParted Live ISO" {
}

Maintenant, nous allons ajouter une variable contenant le répertoire où nous avons stocké l'ISO (jusqu'à présent, tout va bien: aucune différence avec les machines du BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

J'utilise /optpour les stocker car je n'aime pas créer de répertoires à la racine de ma machine et selon la hiérarchie du système de fichiers Linux, c'est là que les logiciels optionnels devraient de toute façon résider.

Avant d' ajouter la loopbackvariable que nous devons savoir sur quel disque dur le fichier est stocké, donc nous faisons: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1et la sortie sur ma machine est la suivante : /dev/sdb2.

Cependant grub utilisations ( hdX,Ynotation) et c'est là la différence entre les machines et UEFI BIOS vient! Alors maintenant , redémarrez votre machine, allez dans le menu sans tête et appuyez sur : Cela vous amènera à la commande grub rapide avec différentes commandes que vous êtes habitué , mais le seul que vous avez besoin est: .Cls

Sur ma machine, la sortie est:

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

Hein? 4 disques? J'en ai seulement 3! Et ce n'est pas en (hd1,4)ligne sur un BIOS mais (hd1,gpt3)en UEFI et (hd0)n'a aucune partition du tout!

Eh bien, apparemment, lorsqu'une partie de la NVRAM est utilisée comme stockage et apparaît comme (hd0) vous devez commencer à numéroter vos disques à 1!   Alors que toutes les informations que vous trouverez sur le démarrage des fichiers ISO indiquent que vous devez commencer la numérotation à partir de 0 (sur les machines BIOS, cela est toujours vrai , ce n'est pas nécessairement le cas sur certaines machines UEFI !)

Ainsi, la valeur de loopbackdevient (hd2,gpt2)$GPartedISOFilecomme le fichier ISO sur ma machine /dev/sdb2(deuxième lecteur hd2, deuxième partition gpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Une autre différence est que les linuxet initrdsur les machines BIOS sont appelées linuxefiet linuxefisur les machines UEFI, ce qui nous donne notre résultat final:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

Alors maintenant, enregistrez ce fichier et mettez à jour grub avec:

update-grub

Après tout ce qui précède, redémarrez, allez dans le menu grub , choisissez GParted Live ISOet vous pouvez maintenant facilement démarrer votre ISO sans avoir à chercher une clé USB à nouveau!

:-)

Exemple CloneZilla Live (pour cette question )

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}
Fabby
la source
Avez-vous déjà créé Clonezilla? C'est un peu différent, je peux le poster si vous ne l'avez pas encore trouvé.
Marbre organique
1
Je vais poster une autre réponse pour toutes celles que j'ajouterai demain pour les gens du genre "donne-moi le codez" ... @OrganicMarble
Fabby
+1 mais il est probablement sûr de laisser tomber les 2de update-grub2ces jours -ci .
WinEunuuchs2Unix
@ WinEunuuchs2Unix C'est dans mon histoire ... Je tape upd↑et copie-colle. Merci pour le rappel Mis à jour!
Fabby
6

Une alternative consiste à simplement ajouter un fichier de configuration à 40_custom comme ceci:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

Je fais cela comme lorsque je mets à jour un ISO, j'oublie invariablement de courir sudo update-grub. Les entrées ci-dessus ne doivent jamais changer et je peux simplement éditer livecdimage.cfg qui a le même format que n'importe quel 40_custom mais sans lignes d'en-tête et se trouve dans mon dossier / ISO dans ma partition ISO.

J'ajoute toram comme autre paramètre de démarrage et sur le système avec Nvidia, j'ajoute le paramètre de démarrage nomodeset. Mais il faut encore souvent démonter le / isodevice.

Impossible de démonter l'isodispositif pour démonter l'ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

Et cela fait partie de mon fichier livecdimage.cfg

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}
Oldfred
la source
J'aime les redémarrages et les arrêts! :-) +1 Pourquoi ajoutez-vous le insmod? Vous pouvez également me cingler dans le chat
Fabby
inmod n'est probablement pas nécessaire. Avec grub2, certaines fonctionnalités ont été intégrées et certaines étaient des compléments (l'insmod). Probablement au début, j'avais besoin de l'insmod gpt car j'ai commencé à utiliser gpt en 2010 ou avant que le PC ne soit UEFI et grub2 était nouveau et juste pour le BIOS / MBR bien que démarrerait à partir de gpt avec le BIOS.
oldfred
Merci pour la réponse. Ne serait-il pas préférable de supprimer ces lignes de la réponse alors?
Fabby
1
Permettez-moi de modifier ma propre strophe et de voir si 18.04 démarre. J'espère que ce sera le cas. Je voulais également mettre à jour mon entrée de démarrage ISO gparted qui est maintenant très ancienne, donc je reviendrai dans un peu.
oldfred
1
Démarré ok. J'ai oublié que mon lecteur flash 18.04 était branché et il devient hd0 sur mon système, donc au démarrage, je dois modifier manuellement l'entrée d'un hdX pour avoir le bon lecteur. Ma botte gparted .25 n'a pas fonctionné en changeant simplement en .30. J'ai dû regarder dans ISO et voir son grub.cfg et utiliser ces paramètres et les commandes de boucle de grub, puis cela a fonctionné.
oldfred
5

mkusb MULTIBOOT HACK

Mkusb constitue une excellente base pour des projets de lecteur de démarrage personnalisés en raison de ses capacités avec le BIOS et l'UEFI.

Ce hack démarre plusieurs fichiers ISO, y compris le programme d'installation de Windows, et dispose d'un menu grub2.

Les entrées de menu Grub2 pour la plupart des systèmes d'exploitation sont disponibles à l'aide de la recherche Google et dépassent le cadre de cette réponse.

valeurs par défaut mkusb

Utilisez les valeurs par défaut mkusb lors de la création du lecteur USB persistant.

mkusb utilise à nouveau les valeurs par défaut

Utilisez les valeurs par défaut de persistance de mkusb en cas de doute, la taille de la partition peut être ajustée plus tard mais prend du temps.

Console DUS

La console DUS après l'installation.

GParted avant

GParted avant la modification de la partition.

Gparted après

Gparted après modification - Écraser sdb4, la partition ISO9660 OS et sdb5, la partition ext2 casper-rw, avec une partition FAT32 pour les fichiers de persistance.

Partition de persistance

Partition de persistance - Créez un dossier de nom unique pour chaque système d'exploitation (qui nécessite la persistance)

Dossier de persistance

Dossier de persistance - Ajoutez un fichier casper-rw et un fichier home-rw facultatif à chaque dossier de persistance. Un fichier home-rw peut être créé en renommant un fichier casper-rw. Un fichier home-rw est comme une partition home séparée sur une installation complète, il peut être réutilisé après les mises à niveau de la version.

Dossier ISO

Créez un dossier pour les fichiers ISO sur la partition usbdata NTFS.

Contenu du dossier ISO

Ajoutez des ISO au dossier ISO.

Emplacement GRUB

Emplacement de grub.cfg

grub.cfg

Modifiez grub.cfg pour monter en boucle les fichiers ISO. Inclure: persistent persistent-path=/<persistent-folder-name>/si vous voulez de la persévérance.

EDIT 18.04+ Dans grub, spécifiez vmlinuz pas vmlinuz.efi et initrd pas initrd pas initid.lz

sudo parted -ls / dev / sdb

sudo parted -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Si un programme d'installation de Windows est requis, il est peut-être plus facile de commencer avec la fonction mkusb "extraction du programme d'installation de Windows" (j'ai dû extraire manuellement l'ISO de Windows en TAR),

mkusb Windows Installer

Après l'installation, créez un dossier pour les ISO et, si nécessaire, des dossiers pour la persistance (similaire à la procédure ci-dessus).

mkusb Windows grub

Modifiez /boot/grub/grub.cfg pour monter en boucle tous les ISO et spécifier tous les dossiers de persistance.

(n'ont pas trouvé de moyen de monter en boucle un fichier ISO Windows).

Si ce qui précède est utilisé comme clé USB, il peut être utilisé pour démarrer les ISO stockés sur un ordinateur Windows uniquement. Grub n'est pas requis sur le lecteur interne.

CSCameron
la source
Et comment les récupérer sur le disque dur / SDD ??? La question est de les vouloir maintenant sur une clé USB, ou ai-je raté quelque chose?
Fabby
1
@Fabby, ce n'est pas seulement pour les clés USB. Si vous avez un nouveau disque SATA, vous pouvez démarrer comme décrit dans cette réponse et laisser mkusb installer son système de démarrage robuste, qui fonctionne à la fois en mode UEFI et BIOS. Ce lecteur SATA peut être installé en interne ou connecté en externe via USB ou eSATA. Il est possible d'ajouter à la fois des «systèmes installés de manière conventionnelle» et de nouveaux fichiers iso à démarrer via «grub-n-iso».
sudodus
OK, je ne comprends toujours pas: je veux ces ISO /opt/. Comment je fais ça? (+1 entre-temps pour l'effort ...)
Fabby
1
@Fabby: Je pense qu'au lieu de créer un nouveau dossier pour les ISO comme indiqué ci-dessus, pointez sur l'emplacement de l'ISO dans / opt /, dans grub.cfg, grub sur une clé USB peut démarrer une ISO sur le disque dur. Je veux bien essayer.
CSCameron
@Fabby: Si les ISO sont activés / opt / du lecteur interne, la même entrée de menu que vous utilisez sur le lecteur interne fonctionnera sur le lecteur externe. Il peut y avoir des avantages à démarrer grub sur une clé USB, comme ne pas surcharger ou corrompre le menu interne de grub.
CSCameron
3

Trois étapes faciles

pour ajouter ISO au menu grub et démarrer à partir de celui-ci.

Tout d'abord, installez grml-rescueboot

Ouvrez un terminal et entrez:

sudo apt install grml-rescueboot

Ensuite, déplacez les fichiers iso vers /boot/grml/

Dans le même terminal, entrez:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

Troisièmement, mettre à jour grub

Dans le même terminal, entrez:

sudo update-grub

Répétez les deuxième et troisième étapes au besoin

N'oubliez pas de supprimer les fichiers ISO obsolètes /boot/grml.

Référence: Aide d'Ubuntu sur le démarrage ISO de Grub2

J'espère que cela t'aides

user68186
la source
/bootest le pire endroit pour les mettre. Désolé, regardé dans grml, aurait dû le mentionner. +1 pour l'effort cependant
Fabby
Merci @Fabby pour le +1! Ce n'est peut-être pas la meilleure façon de le faire, mais cela semble être le plus simple, à mon humble avis.
user68186
1
C'est pourquoi +1: bonne réponse pour les utilisateurs non techniques.
Fabby
2

MultiBootUSB - QEMU

Si vous souhaitez démarrer les fichiers ISO avec le moins de tracas et n'avez pas besoin de persistance, MultiBootUSB comprend une option QEMU:

  • Démarrez MultiBootUSB et sélectionnez l'onglet Boot ISO / USB.

  • Faites glisser et déposez l'ISO sur l'espace de sélection d'image.

  • Sélectionnez la taille de la RAM et appuyez sur le bouton Boot ISO.

Vous n'avez pas besoin de modifier grub.cfg ni même de vous déconnecter.

MultiBootUSB-QEMU

CSCameron
la source
Nifty! Je vais essayer ça plus tard!
Fabby
@Fabby: Il existe une version Windows de MBUSB et une version Linux. Je n'ai pas pu obtenir la version Windows pour démarrer les ISO, uniquement les USB. La version Linux 9.2.0 fonctionne très bien pour moi.
CSCameron
2

Multibooter ISO mkusb SIMPLE

Si vous n'avez pas besoin de la multi-persistance, il est facile de multi-boot ISO du système d'exploitation sur un lecteur flash mkusb.

Utilisez mkusb pour créer une clé USB persistante à l'aide d'un système d'exploitation par défaut de votre choix, https://help.ubuntu.com/community/mkusb

Créez un dossier dans la partition usbdata sdx1, nommé ISO.

Ajoutez les ISO à démarrer dans ce dossier.

Ajoutez des entrées de menu à /sdx3/boot/grub/grub.cfg pour monter en boucle les ISO.

Échantillons:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
CSCameron
la source