6135 links
  • GuiGui's Show
  • Home
  • Login
  • RSS Feed
  • ATOM Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
 
  • [ GPT backup table et structure GPT ] Partitioning - ArchWiki

    J'étais en train de mettre un serveur distant à la casse en révoquant toutes les clés d'un conteneur chiffré (cryptsetup luksErase <dev>) puis en écrasant la table des partitions au format GPT avec dd quand Johndescs me demande si j'ai supprimé « la table GPT de backup en fin de disque ».

    Ha oui, tiens, plusieurs sources web disent qu'il y a une sauvegarde de la table GPT dans les 33 derniers secteurs d'un disque au max, soit 16,5 octets au max ((33 * 512 octets) / 1024).

    Pour le fun, je veux constater ça par moi-même.

    fdisk -lu me dit : « Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors ».

    Regardons les 1000 derniers secteurs. 3907029168 - 1000 = 3907028168.

    dd if=/dev/sda skip=3907028167 | hexdump -vC
    […]
    00078e00  48 61 68 21 49 64 6f 6e  74 4e 65 65 64 45 46 49  |Hah!IdontNeedEFI|
    00078e10  90 ca 57 b3 c7 18 fa 48  97 a9 9e ae 35 69 6c e0  |..W....H....5il.|
    00078e20  28 00 00 00 00 00 00 00  00 08 00 00 00 00 00 00  |(...............|
    00078e30  00 00 00 00 00 00 00 00  62 00 69 00 6f 00 73 00  |........b.i.o.s.|
    00078e40  5f 00 67 00 72 00 75 00  62 00 2d 00 73 00 64 00  |_.g.r.u.b.-.s.d.|
    00078e50  61 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |a...............|
    00078e60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078e70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078e80  af 3d c6 0f 83 84 72 47  8e 79 3d 69 d8 47 7d e4  |.=....rG.y=i.G}.|
    00078e90  34 ea 7a 69 e4 99 67 40  b9 df c0 40 3e 12 a8 4c  |4.zi..g@...@>..L|
    00078ea0  00 10 00 00 00 00 00 00  ff 07 80 3e 00 00 00 00  |...........>....|
    00078eb0  00 00 00 00 00 00 00 00  70 00 72 00 69 00 6d 00  |........p.r.i.m.|
    00078ec0  61 00 72 00 79 00 00 00  00 00 00 00 00 00 00 00  |a.r.y...........|
    00078ed0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078ee0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078ef0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078f00  af 3d c6 0f 83 84 72 47  8e 79 3d 69 d8 47 7d e4  |.=....rG.y=i.G}.|
    00078f10  2d 41 c0 3f a0 c1 12 49  bf 5c cf ee 89 d0 6e 77  |-A.?...I.\....nw|
    00078f20  00 08 80 3e 00 00 00 00  ff 6f d0 e8 00 00 00 00  |...>.....o......|
    00078f30  00 00 00 00 00 00 00 00  70 00 72 00 69 00 6d 00  |........p.r.i.m.|
    00078f40  61 00 72 00 79 00 00 00  00 00 00 00 00 00 00 00  |a.r.y...........|
    00078f50  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078f60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00078f80  6d fd 57 06 ab a4 c4 43  84 e5 09 33 c8 4b 4f 4f  |m.W....C...3.KOO|
    00078f90  3e d2 b7 22 c5 0e 82 44  80 e4 62 e0 85 fb 59 fc  |>.."...D..b...Y.|
    00078fa0  00 70 d0 e8 00 00 00 00  ff 67 e0 e8 00 00 00 00  |.p.......g......|
    00078fb0  00 00 00 00 00 00 00 00  70 00 72 00 69 00 6d 00  |........p.r.i.m.|
    00078fc0  61 00 72 00 79 00 00 00  00 00 00 00 00 00 00 00  |a.r.y...........|
    0007ce00  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
    0007ce10  29 6e 0e d5 00 00 00 00  af 88 e0 e8 00 00 00 00  |)n..............|
    0007ce20  01 00 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    0007ce30  8e 88 e0 e8 00 00 00 00  d0 d2 1f c2 dc 91 bb 4f  |...............O|
    0007ce40  9f e7 c8 a4 04 7b 91 bc  8f 88 e0 e8 00 00 00 00  |.....{..........|
    0007ce50  80 00 00 00 80 00 00 00  90 23 af 95 00 00 00 00  |.........#......|

    Utilisons Wikipedia pour déchiffrer ça.

    L'entête secondaire est sur le dernier secteur du disque. On la reconnaît grâce à sa signature, « 45 46 49 20 50 41 52 54 » (« EFI PART » en ASCII ).

    Ensuite, on a la table des partitions. Habituellement, une entrée de la table occupe 128 octets soit 8 lignes de hexdump. On y voit quatre partitions (la distinction primaire / logique n'existe plus) :

    • La première depuis l'entête (et donc la dernière sur le disque) est une partition swap de Linux. Je le sais grâce à l'identifiant unique de son type : « 6d fd 57 06 ab a4 c4 43 84 e5 09 33 c8 4b 4f 4f ». Attention, comme l'explique la note de Wikipedia, une partie des octets est inversée à cause du little-endian.

      • Son nom est « p.r.i.m.a.r.y » (nom par défaut quand on en donne aucun ?). Je le sais car le nom commence au 57e octet d'une entrée de la table des partoches ;

      • Elle commence au secteur numéro « 00 70 d0 e8 » = 0xE8D07000 (hexadécimal après suppression de l'endianness) = 3905974272 (décimal). Elle termine au secteur « ff 67 e0 e8 » = 0xE8E067FF = 3907020799. Elle occupe donc 3907020799 - 3905974272 = 1046527 secteurs. Un secteur = 512 octets (fdisk le dit) donc la taille de la partition est : 1046527 * 512 = 535821824 octets soit 512 Mo environ ;
    • La deuxième partition (depuis la fin, toujours) est une partoche Linux. On la reconnaît grâce à son type : « af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 ». Son nom est identique à la première. Elle occupe 1,3 To environ ;

    • Idem pour la troisième partition. Elle occupe environ 500 Go ;

    • La dernière partition (et donc la première sur le disque) est une partition de boot BIOS (qui permet d'utiliser GPT sans EFI, en gros). Là encore, on la reconnaît grâce à son type : « 48 61 68 21 49 64 6f 6e 74 4e 65 65 64 45 46 49 », qui, interprété en ASCII nous donne « Hah!IdontNeedEFI ». Son nom est « b.i.o.s._.g.r.u.b.-.s.d.a ». Elle occupe environ 1 Mo.

    Aucune de ces partitions n'a un quelconque attribut (drapeau). Ils sont situés dans les 8 octets qui précédent le nom de la partition.

    Un drapeau = 1 bit. Une partition cachée = bit 62 = 63e bit. Pas de montage auto = bit 63 = 64e bit.

    Les logiciels n'ont pas l'air d'accord sur le rôle de chaque bit de drapeau. sgdisk considère que le 1er bit (bit 0) signifie partition système là où parted considère qu'il signifie partition cachée. Inversement, gparted ne reconnaît pas ce que sgdisk considère être une partition cachée (63e bit). Les deux outils sont d'accord sur le 3e bit (amorçable par d'anciens BIOS). gparted reconnaît aucun des autres drapeaux.

    Sur ce coup, gparted est mal fichu, notamment parce qu'il présente comme drapeau ce qui n'en est pas, comme « bios_grub » (qui désigne une partition de boot BIOS, qui est un type de partition).

    Évidemment, y'a encore cette histoire de little-endian, donc (binaire avec xxd, hexa avec hexdump, format gdisk, format sgdisk, sens pour parted) :

    • bit 0 = 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 = 01 00 00 00 00 00 00 00 = 0000000000000001 = 1:0:1 (system partition) = hidden ;

    • bit 1 = 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 = 02 00 00 00 00 00 00 00 = 0000000000000002 = 1:1:1 (hide from EFI) = rien ;

    • bit 2 = 00000100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 = 04 00 00 00 00 00 00 00 = 0000000000000004 = 1:2:1 (legacy BIOS bootable) = legacy_boot ;

    • bit 60 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010000 = 00 00 00 00 00 00 00 10 = 1000000000000000 = 1:60:1 (read-only) = rien ;

    • bit 62 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01000000 = 00 00 00 00 00 00 00 40 = 4000000000000000 = 1:62:1 (hidden) = rien ;

    • bit 63 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 = 00 00 00 00 00 00 00 80 = 8000000000000000 = 1:63:1 (do not automount) = rien.

    Du coup, j'ai également effacé cette table GPT secondaire avec dd if=/dev/urandom seek=3907028167 of=/dev/sda.

    Ça me rappelle l'un de mes articles vieux de 13 ans dans lequel je décortique un MBR. :D

    July 17, 2023 at 2:12:06 AM UTC - permalink - https://wiki.archlinux.org/title/Partitioning#GUID_Partition_Table
Links per page: 20 50 100
 
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super fast, database-free, bookmarking service by the Shaarli community