Comment créer une clé USB amorçable à partir d'une image ISO amorçable avec la ligne de commande sous Linux?

50

J'ai un CD créé à partir d'un fichier ISO que j'utilise pour installer une version personnalisée d'Ubuntu via Plop Linux.

Le cd fonctionne bien, mais j'aimerais plutôt utiliser un lecteur USB amorçable. J'ai utilisé la commande dd pour essayer de créer la clé USB amorçable:

dd if=filename.iso of=/dev/sdb1 bs=4k

Maintenant, cela copie les fichiers et rend la clé USB amorçable mais je reçois le message d'erreur «Système d'exploitation manquant»

Des idées?

xsdf
la source
Avez-vous seulement accès à la ligne de commande? Il existe des interfaces comme Unetbootin qui fonctionnent très bien et fonctionnent sur linux ..
dashboard
3
@dashboard Je préférerais la ligne de commande car elle est disponible sur toutes les machines Linux.
xsdf
askubuntu.com/questions/116942/…
Ciro Santilli a annoncé le
@dashboard - Les outils d'interface graphique ne semblent jamais bien fonctionner pour moi, et cela a toujours été le cas pendant de nombreuses années. Je suis heureux de connaître la méthode de ligne de commande. Je trouve cela plus facile et plus fiable. C'est beaucoup moins frustrant!
MountainX

Réponses:

58

Après quelques recherches, j’ai trouvé une solution et je l’examinerai étape par étape. Le problème était double.

  1. Branchez le lecteur flash USB et déterminez le périphérique sur lequel il est monté à l'aide de la commande:

    sudo fdisk -l
    

    Cette fois, c’était / dev / sdc1 pour moi, je vais donc utiliser cela comme exemple.

  2. Montez l'appareil

    umount /dev/sdc1
    
  3. Pas sûr si nécessaire mais j'ai formaté le disque en FAT32, juste au cas où

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Maintenant, mon ISO utilisait isolinux pas syslinux. Je savais que cela fonctionnait avec des CD. J'ai donc compris que je devais appeler la commande isohybrid, qui permet à une image ISO d'être reconnue par le BIOS à partir d'un disque dur.

     isohybrid filename.iso
    

    Vous pouvez en savoir plus sur cette commande ici , mais c'est la cause du message "Système d'exploitation manquant" Le premier problème a été corrigé, mais il était désormais indiqué que "isolinux.bin était manquant ou corrompu"

  5. L'étape suivante consiste à copier l'iso. Mon deuxième problème réside ici, où je copiais sur la partition, sdc1, pas le périphérique, sdc.

    sudo dd if=filename.iso of=/dev/sdc bs=4k
    

    Cela semble fonctionner correctement, mais dans le forum où j'ai obtenu le dernier correctif, il était recommandé de procéder comme suit avant de débrancher l'appareil:

    sync
    sudo eject /dev/sdc
    
xsdf
la source
3
Voici un moyen de vérifier la progression de dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris
3
En prenant pour hypothèse, je pense que la mkdosfscommande n’est peut-être pas nécessaire, car l’iso contient déjà un système de fichiers (y compris probablement un MBR, qui est copié au début du périphérique bloc). Man, isohybridest une commande cool, ne savait pas à ce sujet!
Ehtesh Choudhury
1
pour l’installation USB démarrable de Windows 7, voir aussi superuser.com/questions/256869/…
cwd
7
L'étape 3 n'est pas nécessaire. la ddcommande à l'étape 5 effacera le système de fichiers nouvellement créé avec le contenu de l'ISO.
ewhac
Je suis proche de 12 heures à la recherche de ce même problème jusqu'à ce que je trouve votre message ici et je l'ai suivi et étape et ... cela a fonctionné! (l'étape 5 était aussi mon problème, je ne suis pas encore prosur linux, alors merci)
Ismael
3

Il s'agit d'un problème courant avec les clés USB SanDisk ou les clés non formatées en FAT32.

Si ce n’est l’un ou l’autre, c’est certainement un problème avec votre ordre de partition ou le fichier syslinux.cfg.

Shouvik Sayef
la source
Le lecteur flash USB provient de Verbatim. J'ai reformaté en FAT32 juste pour être sûr et j'ai toujours la même erreur.
xsdf
1

isohybridpeut ne pas toujours fonctionner. Par exemple, j'avais un fichier .iso avec FreeDOS et isohybrid n’était pas en mesure de trouver des fichiers importants (je ne sais pas s’ils auraient dû y être placés par syslinux, que j’utilisais aussi, ou autre chose). Je propose plusieurs alternatives ici.

1) Installez-y un autre chargeur de démarrage tel que GRUB. C'est expliqué ici :

"Supposons que la première partition de votre clé USB est FAT32 et que sa partition est / dev / sdy1" (j'avais grub2sur mon Fedora Core, donc j'ai légèrement modifié les commandes):

# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb
# grub2-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub2-mkconfig -o /mnt/usb/boot/grub2/grub.cfg

# optional, backup config files of grub.cfg
# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc

# sync; umount /mnt/usb

2) FreeDOS wiki offre une méthode de composé avec Grub et SysLinux ici (bien que je ne comprends pas comment ils ont lancé grub>- je ne pouvais pas démarrer à partir du usb jusqu'à ce stade).

3) Voici un article qui peut être utile - Il est écrit: "Tant que les fichiers command.com, kernel.sys, syslinux.cfg, ldlinux.sys et fat32lba.bss se trouvent à la racine du lecteur et que le secteur ne sont pas réécrits, le lecteur doit rester amorçable. '

4) Nous expliquons ici comment générer un fichier .iso démarrable avec un chargeur de démarrage syslinux. Ils n'utilisent même pas d'isohybride. Malheureusement, cela ne m'a pas aidé (peut-être à cause de syslinux).

5 *) Utilisez un programme Windows via wine. J'ai essayé rufus, cependant cela n'a pas fonctionné, il n'a pas pu trouver l'appareil.

Je vous préviens que, malheureusement, je ne pouvais pas résoudre ce problème, mon périphérique n’était pas amorçable, mais j’espère que cela pourra être utile à d’autres personnes (également à celles qui souhaitent installer un linux non USB). L'image usb générée par chtaube a bien fonctionné pour moi, donc je pense que ces méthodes sont correctes.

UPD: La 3ème méthode fonctionne vraiment (avec une correction pour un fichier d'installation personnalisé).

UPD2: (liens fixes). Le problème isohybridétait probablement dû au fait que les versions de isolinux.bin sous iso et de mon système étaient différentes. Recompilé l'iso en utilisant genisoimagecomme suggéré ici :

genisoimage -l -r -J -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o fd11new.iso fd11new

Il y avait quelques problèmes aussi, ils ont été résolus par la méthode ici avant genisoimage:

cp /boot/extlinux/*.c32 fd11new/isolinux/
extlinux --install /boot/isolinux

== fin UPD2 ==

Yaroslav Nikitenko
la source
2nd: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Vous pouvez ajouter ces liens à votre message si le système vous fait confiance plus que moi. StackOverflow me connaît déjà bien, alors pourquoi un tel problème chez superutilisateur? De plus, j'ai eu des problèmes pour poster ceci, cela ne m'a pas montré que ma réponse était déjà postée.
Yaroslav Nikitenko
Il semble que le superutilisateur compte les liens en fonction de leurs références, c'est-à-dire que si je fais un lien deux fois vers une même ressource, c'est compté. Cela semble être un bug. Une solution de contournement dans UPD provient de spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko
Tous les liens dans les commentaires corrigés. Je les laisse ici pour montrer à quel point cette politique pose des problèmes.
Yaroslav Nikitenko
0

Vous pouvez utiliser l' bootisoutilitaire , qui fait exactement cela, en toute sécurité:

bootiso -d /dev/sdb filename.iso

bootiso vérifiera que le périphérique sélectionné /dev/sdbest connecté via USB et échouera s'il ne le fait pas, ce qui constitue un avantage considérable pour la sécurité. Il détectera également automatiquement le périphérique USB s'il y a exactement un lecteur USB connecté à votre système, voyez-le en action:

Si vous souhaitez installer le chargeur de démarrage syslinux pour contourner les problèmes mentionnés par @xsdf, utilisez l' -boption:

 bootiso -b -d /dev/sdb filename.iso

Pour l'installer:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Jules Randolph
la source