web-dev-qa-db-fra.com

Dans Ubuntu ISO MBR, pourquoi une partition GPT chevauche-t-elle la partition de démarrage et rend-elle le disque impossible à modifier?

Question et contexte:

Dans la table des partitions MBR des distributions, comme par exemple ubuntu-16.04-desktop-AMD64.iso, pourquoi une partition GPT semble-t-elle chevaucher la partition de démarrage principale? Cela semble générer des erreurs si j'essaie, de quelque manière que ce soit, de modifier la table de partition.

Je souhaite modifier le MBR pour ajouter de la persistance USB (comme décrit ailleurs) et je dois ajouter une partition ou agrandir la partition de démarrage.

Je crois que cela fonctionnait auparavant, mais la partition GPT # 2 qui se chevauchent dans cette distribution et dans d'autres distributions similaires semble confondre mal fdisk, sfdisk, parted, gparted et partprobe.

Ma machine est un MBR et non un bios GPT.

Qu'est-ce que je rate?


Voici la table de partitions MBR de la distribution (directement à partir du fichier ISO):

cat ubuntu-16.04-desktop-AMD64.iso | xxd | head -32 | tail -5

donne:

00001b0: 28db 2b00 0000 0000 708e 0e0e 0000 8000  (.+.....p.......
00001c0: 0100 0058 e0fa 0000 0000 6048 2c00 00fe  ...X......`H,...
00001d0: ffff effe ffff 4411 2c00 8012 0000 0000  ......D.,.......
00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.

(Pour décoder cela, voyez https://en.wikipedia.org/wiki/Master_boot_record .)

  • Le tableau commence à l'adresse 01be, où vous voyez "80", pour la partition de démarrage principale n ° 1.

  • Remarquez ensuite le "ef" à l'adresse 01d2 qui indique que la partition principale n ° 2 est de type = GPT.


Voici une ventilation de la table par partition (little endian):

partition#1 (normal MBR):
  80        = 'boot' partition flag
  00 01 00  = starting HSC (head, sector, cylindar)
  00        =  partition type ("Empty partition entry")
  58 e0 fa  = last     HSC (head, sector, cylindar)

  0000 0000 = LBA (logical block address) of first absolute sector in the 
  6048 2c00 = number of sectors in partition

partition #2 (GPT):
  00        = non-boot partition
  fe ff ff  = starting HSC (head, sector, cylindar)
  ef        = partition type ("EFI system partition")
  fe ff ff  = last HSC

  4411 2c00 = LBA (logical block adr) of first abs sector in part.
  8012 0000 = number of sectors in partition

Tente de modifier la table de partition:

  • fdisk indique que ces partitions se chevauchent. Notez que le début de sdb2 [2927216] se situe à l'intérieur de sdb1 [0-2955679] à partir de

    Sudo fdisk -l /dev/sdb
    

    donne:

      Disk /dev/sdb: 14.5 GiB, 15527313408 bytes, 30326784 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x40a863e7
    
      Device     Boot   Start     End Sectors  Size Id Type
      /dev/sdb1  *          0 2955679 2955680  1.4G  0 Empty
      /dev/sdb2       2927216 2931951    4736  2.3M ef EFI (FAT-12/16/32)
    
  • D'après ce que j'ai lu, il est correct d'avoir une partition GPT, mais pas de chevauchement des partitions.

  • Lorsque j'essaie de créer une clé USB, le problème commence. Le bâton démarre Ubuntu live ok, mais je ne peux pas éditer la table de partition sans erreurs (c'est-à-dire sans initialisation ni montage), quel que soit l'éditeur de partition que j'essaie.

  • De plus, je ne peux même pas supprimer la table de partition et ramener la clé USB à la normale sans la longue procédure suivante:

    dd if=/dev/zero of=/dev/sdb bs=[something like 512 or 2048; doesn't matter] count=[some large number like 100000^]
    

    ^ Les petits nombres ne semblent pas toujours résoudre ce problème. Je suppose que vous devez non seulement éliminer les blocs fs primaires, mais également les blocs secondaires.

    puis utilisez fdisk pour créer une nouvelle table de partition MS-DOS sur le stick.

    Remarque, si je ne fais pas le dd ci-dessus pour effacer avant de créer une nouvelle table de partition, le message d'erreur suivant ou similaire s'affiche lorsque j'essaie de modifier la carte de partition (à partir de debian8 ou d'ubuntu-16):

    Libparted Warning The driver descriptor says the physical block size
    is 2048 bytes, but Linux says it is 512 bytes.
    
  • Également de Ubuntu-12, je reçois ce message le plus instructif :

    gparted -l /dev/sdb:  libparted : 2.3 Could not stat device -l -- No
    such file or directory. /dev/sdb contains GPT signatures, indicating
    that it has a GPT table.  However, it does not have a valid fake msdos
    partition table, as it should.  Perhaps it was corrupted -- possibly
    by a program that doesn't understand GPT partition tables.  Or perhaps
    you deleted the GPT table, and are now using an msdos partition table.
    Is this a GPT partition table?  Both the primary and backup GPT tables
    are corrupt.  Try making a fresh table, and using Parted's rescue
    feature to recover partitions.
    

Alors, comment puis-je modifier le MBR de la distribution?

BTW, je ne demande pas comment résoudre le chevauchement, car c'est ainsi que la distribution est en cours, et d'après l'apparence, cela fait un certain temps (j'ai aussi regardé Ub-v16, 14 et 12), je cherche plutôt à comprendre comment l'éditer si possible.

Idées:

  • Cela pourrait-il être causé par trop d'applications d'isohybrid (utilisées pour ajouter un MBR ms-dos à un CDROM 9660 iso afin qu'il puisse démarrer sur une clé USB)?

  • Existe-t-il un autre éditeur de table de partition, éventuellement plus récent, à utiliser?

  • Existe-t-il une distribution différente, peut-être plus ancienne, Ubuntu qui ne présente pas ce problème?

5
Elliptical view

Solution de contournement

Vous pouvez ajuster la taille des partitions de votre clé USB si, au lieu d'utiliser un outil USB maker pour créer le clé, vous construisez votre clé USB à partir de rien en utilisant uniquement les commandes du terminal. Voici des instructions détaillées qui fonctionnent si votre système utilise le BIOS:

Comment créer un lecteur USB Ubuntu avec persistance pour le BIOS en utilisant uniquement le terminal


Conseils d'utilisation pour la sauvegarde à l'aide d'une clé USB: Je conserve deux clés USB identiques pour le système de sauvegarde que je m le système principal à double démarrage W10 de Debian. Je veux que mon système ne fonctionne pas lorsque je fais la sauvegarde. Je veux aussi deux clés identiques, car parfois une clé USB s'use. Cela me permet d’en faire facilement un nouveau, simplement en copiant une copie du disque restant sur un nouveau bâton.

Ils m'ont sauvé plus d'une fois lorsque mon système a été si endommagé que je ne pouvais pas le réparer! Et les procédures de sauvegarde et de restauration incrémentielles que j'inclus sur ce lien sont assez rapides aussi. Vous devez cependant faire une sauvegarde complète de temps en temps, car il est possible que votre sauvegarde incrémentielle actuelle ne fonctionne pas quand vous le voulez car un défaut du système y a été écrit, le corrompant. J'essaie maintenant de faire une sauvegarde complète chaque semaine.

1
Elliptical view

Les fichiers image .iso d'Ubuntu utilisent un format Monster de Frankenstein conçu pour prendre en charge plusieurs méthodes et périphériques d'amorçage:

  • Support de démarrage
    • Écrire l'image sur un DVD pour pouvoir démarrer à l'aide d'ISO-9660 et d'El Torito
    • Copier l'image "brute" sur un lecteur flash USB ou un support similaire pour un démarrage à l'aide de systèmes de partitionnement de disque conventionnels
  • Mode d'amorçage
    • Démarrage en mode BIOS
    • Démarrage en mode EFI

Pour travailler avec autant de formats et de méthodes de démarrage, les développeurs jouent à des jeux avec les structures de données. Ces images ne doivent vraiment pas être traitées comme des images de disque "normales", et en particulier vous devez absolument PAS essayez de modifier les images de quelque manière que ce soit, sauf si vous êtes un expert de haut niveau dans ces structures de données. FWIW, j’ai écrit l’outil de partitionnement GPT fdisk (gdisk, cgdisk, et sgdisk) et I. vous dites que vous essayez!

Au lieu de cela, si vous devez modifier le support d'installation, effectuez l'une des opérations suivantes:

  • Utilisez un outil tel que Rufus , Pen Drive Linux ou Netbootin pour écrire le fichier image sur une clé USB, puis modifiez la clé USB. . La raison pour laquelle cela fonctionne est que ces outils ne font pas une simple copie dd- du contenu de l'image sur le disque; au lieu de cela, ils prennent les fichiers de l'image et les copient sur un disque partitionné de manière conventionnelle avec un système de fichiers pré-existant (ou parfois celui créé par l'outil). Le résultat est un disque plus normal qui peut être modifié avec des éditeurs de table de partition normaux et d'autres utilitaires.
  • Préparez votre propre image personnalisée. Je n'ai pas d'indications sur la manière de procéder, mais les images Ubuntu sont bien sûr créées par des outils automatisés, et non par l'édition manuelle de tables de partition avec des éditeurs hexagonaux. Si vous recherchez les outils et les scripts utilisés pour créer les images, vous pourrez peut-être créer une image modifiée de la manière que vous voudriez. Cette approche est utilisée par les personnes qui créent des "rotations" d’Ubuntu. Vous voudrez peut-être commencer par chercher de la documentation sur la façon de procéder.

De ces deux approches, la première est probablement la meilleure pour ce que vous voulez. En fait, je suis à peu près sûr que certains outils de ce type offrent la possibilité de faire exactement ce que vous voulez. (Je ne me souviens toutefois pas quels outils offrent une telle fonctionnalité.) La seconde approche est plus susceptible d'être utile pour des tâches telles que l'ajout de packages à une image d'installation personnalisée.

Si vous pouviez déjà faire ce genre de chose auparavant, il y a des chances que cela change parce que les développeurs ont trouvé le besoin de créer un piratage plus monstrueux d'une structure de données afin de résoudre des problèmes liés à des systèmes particuliers. Par exemple, si les ordinateurs de la marque X ne peuvent pas analyser la table de partitions Monster de Frankenstein, les développeurs peuvent la modifier pour qu'elle fonctionne avec les ordinateurs de la marque X, même si cela signifie que la structure de données est encore plus étrange qu'auparavant. Ce ne sont que des spéculations de ma part, cependant, et je ne peux certainement pas parler des détails que vous avez décrits.

8
Rod Smith