6 votes

Quelles sont les étapes manquantes dans ma tentative de créer une image de distribution Linux amorçable ?

J'essaie de créer une image de distribution (via l'interface de distribution de Linux). dd ) pour un système d'exploitation compatible avec les disques durs et les supports flash. J'ai réussi à créer l'image, mais je n'arrive pas à la faire démarrer correctement. Je vais vous présenter les étapes ci-dessous :

  1. Cette opération crée un fichier vierge qui contient l'intégralité de l'image :

    dd if=/dev/zero of=/tmp/test.img bs=512 count=1250000
  2. Associe un fichier de périphérique de bouclage au fichier image :

    losetup /dev/loop0 /tmp/test.img
  3. Avant de pouvoir manipuler les parted nous DEVONS définir un type d'étiquette de support :

    parted -s /dev/loop0 mklabel msdos
  4. La première partition doit être de 512 Mo dans le fichier image :

    parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB
  5. Définissez la première partition comme étant "amorçable" :

    parted -s /dev/loop0 set 1 boot on
  6. Crée un système de fichiers Ext2 sur la première partition :

    mkfs.ext2 -b 1024 /dev/loop0p1
  7. Installe l'étape 1 du code d'amorçage de Grub tout en préservant la table de partition créée ci-dessus :

    dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1
  8. Installe l'étape 2 du code d'amorçage de Grub après les 512 premiers octets du média (en ignorant l'étape 1 et la table de partition) :

    dd if=/boot/grub/stage2 of=/dev/loop0 bs=512 seek=1
  9. Monter la première partition du fichier image sur un point de montage :

    mount /dev/loop0p1 /mnt/image
  10. Copiez toutes les données dans la partition et démontez-la.

  11. dd le fichier image sur un disque dur ou un support flash.

En suivant ces étapes, je peux dd le fichier image sur un disque dur ou une clé USB et démarrer dans une console Grub où je peux démarrer, mais seulement en spécifiant le nom du fichier image. root , kernel et initrd valeurs. Si j'essaie d'installer l'héritage Grub via root y setup je n'obtiens aucune erreur mais l'appareil démarre en charabia. L'exécution et la fdisk -l produit :

Partition 1 has different physical/logical beginnings (non-Linux?):
phys(0,32,33) logical(0,37,14)
Partition 1 has different physical/logical endings:
phys(62,53,55) logical(336,27,19)

Je pense qu'il y a un problème avec la façon dont le fichier image est créé puisqu'il est responsable de la création de la table des partitions (qui est en désordre). Est-ce que quelqu'un peut utiliser ces étapes (modifiées) pour produire un support de démarrage fonctionnel ?

1voto

sawdust Points 16268
  1. Créer la première partition de 512 Mo dans le fichier image

    parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB

À l'étape 4, vous utilisez un utilitaire pour modifier la première entrée de la table de partition, qui se trouve à la fin du secteur/bloc qui contient également le chargeur de démarrage du MBR.

  1. Installe l'étape 1 du code d'amorçage de Grub tout en préservant la table de partition créée ci-dessus :

    dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1

À l'étape 7, vous essayez d'installer le chargeur de démarrage dans le premier secteur/bloc, qui contient déjà une table de partition vide.
Mais dd est un utilitaire de transfert de blocs, qui lit des blocs à partir de la source et les écrit à la destination.

Dans ce cas, le périphérique de destination est un disque dur ou un disque SSD, qui est vraisemblablement basé sur des secteurs de 512 (ou 4096) octets. Une opération de lecture ou d'écriture sur un périphérique à blocs doit porter sur l'ensemble du secteur.
Lorsqu'une écriture "courte" de seulement 446 octets est tentée, le contrôleur de disque (ou le système d'exploitation) s'exécute, mais ajoute 66 (ou 3650) octets de zéros pour compléter le secteur à sa longueur correcte/complète.
L'écriture d'un bloc n'est tout simplement pas destinée à la modification partielle du secteur et à la préservation de la "partie non écrite".

Cette opération d'écriture écrasera donc la table de partition précédemment installée.

La solution simple consiste à effectuer l'étape n° 7 avant l'étape n° 4. Cela écrira tout le secteur MBR avec une table de partition vide, puis modifiera une seule entrée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X