web-dev-qa-db-fra.com

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

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?

50
xsdf

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 c'est 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
    
58
xsdf

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

Sinon, c’est certainement un problème avec votre ordre de partition ou le fichier syslinux.cfg.

3
Shouvik Sayef

isohybrid peut 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 grub2 sur mon Fedora Core, j'ai donc un peu 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 propose une méthode composée avec GRUB et syslinux ici (bien que je ne comprenne pas comment ils ont lancé grub> - je ne pouvais pas démarrer depuis l’usb jusqu’à ce stade).

3) Ici est un message qui peut être utile - il est écrit "Tant que les fichiers command.com, kernel.sys, syslinux.cfg, ldlinux.sys et fat32lba.bss sont à la racine du lecteur et le MBR et le secteur d'amorçage ne sont pas réécrits, le lecteur doit rester amorçable. '

4) Ici il est expliqué 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, mais cela n'a pas fonctionné, l'appareil n'a pas été trouvé.

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 à ceux qui souhaitent installer pas un linux sur le port 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 un correction pour un fichier d’installation personnalisé).

UPD2: (liens fixes). Le problème avec 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 genisoimage comme 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 aussi quelques problèmes, ils ont été résolus par la méthode ici avant genisoimage:

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

== fin UPD2 ==

1
Yaroslav Nikitenko

Vous pouvez utiliser bootiso utility , 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/sdb est connecté via USB et échoue si ce n’est pas le cas, 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'option -b:

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

Pour l'installer:

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