Translate this site using Windows Live Translator:
January, 2015 - C:\>Windows Internals - L'équipe Française de Support Windows - Site Home - TechNet Blogs

January, 2015

  • WMI - ALERTE performance : la classe Win32_OperatingSystem !

    ALERTE performance :  la classe Win32_OperatingSystem !

    La  classe WMI Win32_OperatingSystem est très populaire (à juste titre) chez les administrateurs système. Elle est fréquemment utilisée par exemple pour exécuter des actions spécifiques ou appliquer des stratégies de groupes (GPO)  spécifiques à une version  de Windows.

    Cette classe (cf http://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx ) semble bien anodine et ne « collecte » que des « informations statiques » .

    C’est sans compter avec le champ NumberOfProcesses !

    NumberOfProcesses

    Data type: uint32

    Access type: Read-only

    Number of process contexts currently loaded or running on the operating system.

     

     

    Pour déterminer la valeur de NumberOfProcesses, le provider WMI fait lui-même une requête WMI  « SELECT __RELPATH FROM Win32_Process  »  qui charge considérablement le système.

    Par exemple sur un « large serveur » RDS/Citrix avec :

    • Plusieurs GPOs ayant un filtre du type :Select * FROM Win32_OperatingSystem WHERE Version like '6.3%'

    • De scripts de logon avec des « select * Win32_OperatingSystem »

    • Des « brokers » ou des outils de monitoring exécutant des « Select * from Win32_Process »

    • De nombreux « logon »

    Vous observerez rapidement :

    • une forte consommation CPU dans le process WMIPRVSE

    • des temps de « logon » important

    • une forte contention « kernel »  liée à l’énumération des processus qui peut avoir des conséquences diverses et variées (lenteur lors du lancement du gestionnaire de tâches,…)

    La solution est de limiter les champs retournés par la requête WQL. Le provider de la classe Win32_OperatingSystem ne collecte alors que les infos demandées. La requête « select Version from   Win32_OperatingSystem » n’énumère pas  la liste des processus.

    Tip :

    L’activation du tracing « WMI-Activity » (http://msdn.microsoft.com/en-us/library/aa826686(v=vs.85).aspx) permet d’identifier ce type de problème.

    [10/17 03:46:47.0051 PM] [wbemtest.exe] [201c.1f84] ExecQuery: select * from win32_operatingsystem

    [10/17 03:46:47.0401 PM] [wmiprvse.exe] [12a0.15d4] ExecQuery: references of {__Win32Provider.Name="CIMWin32"}

    [10/17 03:46:47.0578 PM] [wmiprvse.exe] [12a0.15d4] ExecQuery: SELECT __RELPATH FROM Win32_Process

     

  • Recupération de partitions IX : Récupérer une partition efface par mégarde sur un disque basique GPT

    Travaillons aujourd’hui sur un autre scénario assez simple : Celui de la suppression accidentelle d’une partition.

    Supposons que cette partition

    clip_image001

    soit devenue

    clip_image002

    Comme d’habitude, on contrôle les secteurs habituels et on voit celui qui pourrait manquer.

    Au secteur 0, on a un MBR montrant une partition GPT qui occupe tout le disque

    clip_image003

    Au secteur 1, on retrouve un GPT Header :

    clip_image004

    Données:

    • Sector Signature : EFI PART
    • Version 0.1
    • Header Size : 5C
    • CRC32 of the Header : 2153345396
    • Current / Alternate GPT Header : 1 / 266338303
    • First / Last Usable LBA : 34 / 266338270
    • Disk GUID : {04D4F64A-0F7B-49CE-9013-CF4EF9121641}
    • Partition Table Address : 2
    • Partition Count : 128
    • Partition Table Entry Size : 128
    • CRC32 of Partition Table : 1583197318

    Et le secteur 266338303 montre la même chose.

    clip_image005

    Le secteur 2 nous montre une table de partitions ne contenant que la partition MSR (comme quoi, rien n’est perdu), et le secteur 266338271 (Last usable +1) nous montre la même chose.

    clip_image006

    Allons donc voir si une partition NTFS pourrait trainer sur le disque.

    Comme la partition MSR finit au secteur 262177, on devrait en trouver une plus loin, en principe aligné sur 64KB.

    C’est au secteur 264192 que nous allons la trouver

    clip_image007

    Total Sectors : 266072063 (~126.8 GB) : Le secteur de fin devrait se trouver 266336255 ( = 266072063 + 264192 )

    Clusters to MFT / MFTMirr : 786432 (LBA 6555648 = 264192 + 8*786432 ) / 2 (LBA 264208 = 264192 + 8*2)

    Et ce sont bien des entrées de MFT que l’on trouve à ces secteurs:

    clip_image008

    clip_image009

    Résumons-nous :

    • LBA 0 : La partition GPT
    • LBA 1 et Backup : Les GPT Headers
    • LBA 2 et Backup : Une table de partition ne contenant que la partition MSR
    • LBA 264192 et 266336255 : Encadrent la partition NTFS

    En principe, comme pour une partition MBR :

    • Sauvegarder le 1er secteur de la partition NTFS
    • Créer une partition occupant tout le disque sans la formater
    • Ecraser le 1er secteur de la nouvelle partition NTFS par celui précédemment sauvegardé.

    clip_image010

    Quand vient le moment de formater, ne pas formater.

    clip_image011

    A ce moment-là, le secteur 264192 a été vidé de son contenu (puisque nous n’avons pas fourni de file system)

    En écrasant ce secteur par celui que nous avons sauvegardé, c’est comme si nous formatons la partition.

    DskProbe.exe permet d’écraser un secteur du disque.

    clip_image012

    clip_image013

    Après vérification rapide (secteur de fin de partition, MFT, MFTMirr) un rescan du disque fait revenir la partition comme par magie.

    Serge Gourraud
    55 AA

  • Récupération de disques VIII : Récupérer un disque basiques gpt

    Maintenant que nous avons vu les structures qui décrivent les partitions des disques basiques GPT, voyons où nous pouvons rencontrer une corruption et comment la réparer (ou pas)

    Si nous reprenons notre schéma, une corruption pourrait arriver :

    • Dans le MBR
    • Dans le GPT Header
    • Dans la table de partition (qui occupe les secteurs 2 à 33)
    • Dans les NTFS Boot Sectors
    • Dans la MFT (utiliser chkdsk)

    La structure GPT est très robuste en ceci que windows maintient une consistance entre les GPT Header de début et de fin, ainsi que dans les tables de partitions de début et de fin, de façon à ce que si quelqu’un vient à supprimer l’un d’eux, il sera réparé au moins au prochain reboot.

    La partie non protégée est le MBR (secteur 0) et c’est jusqu’à présent la seule corruption que j’ai eu à réparer sur des disques GPT Basiques.

    clip_image002

    Nous n’allons donc voir que deux types de corruption

    • MBR
    • Partition Table
    • NTFS : Déjà couvert dans les parties précédentes.

    Premier type de corruption (le seul déjà rencontré au support) : Vidage du MBR

    Voilà à quoi cela ressemble dans le gestionnaire de disque :

    clip_image004

    A l’éditeur hexa, on ne voit que des 00:

    clip_image006

    Le secteur 1 contient bien ce qui ressemble à un GPT Header

    clip_image008

    Ses données semblent correctes

    Signature : EFI PART

    Revision: 1.0

    Header Size : 92

    Header CRC: 2038912732

    Reserved1 : 0

    This LBA : 1

    Alternate LBA : 266338303

    First Usable LBA: 34

    Last Usable LBA : 266338270

    Partition Entry LBA: 2

    Partition Count : 128

    Partition Entry Size : 128

    Partition Array CRC : 1909465771

    Disk GUID : 51063D81-877B-4536-B69E-0958EDB891C2

    Si on ouvre le GPT Header alternative, on retrouve les mêmes données :

    Si on parcours la table de partition (LBA 2) on trouve une table de partition contenant la MSR et 3 partitions de données. Dans mon cas, je n’ai que 3 partitions sur mon disque donc, les autres LBAs (jusqu’au 33) sont vides.

    clip_image010

    On peut reporter les données dans ce tableau (pour l’interprétation, se référer au chapitre précédent)

     

    Partition 1

    Partition 2

    Partition 3

    Partition 4

    Partition Type

    E3C9E326-0B5C-4DB8-817D-F92DF00215AE

    EBD0A0A2-B9E5-4433-47C0-68B6B72699C7

    EBD0A0A2-B9E5-4433-47C0-68B6B72699C7

    EBD0A0A2-B9E5-4433-47C0-68B6B72699C7

    Partition GUID

    18516D6A-C900-4A25-888C-E27974E44EAA

    0DC137A4-CEFF-48ED-8EF8-E08282AA555B

    32781219-85A3-470B-A075-DBD480A9D685

    3D0A2A5F-8F8A-43B6-B859-8EA9930DCBE6

    Starting LBA

    34

    264192

    184416256

    245854208

    Attribute Flags

    0

    0

    0

    0

    Ending LBA

    262177

    184416255

    245854207

    266334207

    Partition Name

    Microsoft reserved partition

    Basic data partition

    Basic data partition

    Basic data partition

    Dans le cadre d’une réparation, il faut bien vérifier que les secteurs 264192/184416255 , 184416256/245854207 et 245854208/266334207 sont des secteurs NTFS et contrôler qu’ils pointent bien vers une MFT a priori correcte. (nous avons traité ces points dans les articles précédents)

    Donc:

    • Les "GPT Header" principal et secondaire sont Ok
    • Les "GPT Entries" des "Partition Table" principale et secondaire sont Ok
    • Les structures NTFS sont Ok

    Seul le MBR est à reconstruire

    Il ne nous reste plus qu’à réparer le MBR en se souvenant qu’ils sont tous identiques.

    Partition table entry

     

    Start head : 0

    End head : FF (255)

    Start sector : 2

    End Sector : 3F (63)

    Start Cylinder : 0

    End Cylinder : 3FF (1023)

    Relative Sector : 1

    Total Sectors : FFFFFFFF (4294967295)

    Partition Type : EE (GPT)

    Magic number : 55 AA

    En utilisant un éditeur hexa il reste à écrire ces données :

    clip_image012

    Et c’est tout. Un rescan du disque et on n’en parle plus.

    Serge Gourraud
    55 AA

  • Récupération de disques VII : Structures des disques GPT Basic

    Maintenant que les disques basiques MBR (partitions primaires et étendues) n’ont plus de secrets pour nous, nous allons nous intéresser au disques basiques GPT.

    Reprenons le schéma qui décrit la structure d’un disque basique GPT et essayons de voir à quoi cela ressemble concrètement.

    clip_image002

    Commençons par le secteur 0:

    clip_image004

    Remarques:

    • Il n’y a plus de signature. Nous n’en avons plus besoin car nous identifions désormais le disque par GUID, et cette information sera stockée ailleurs.
    • Il n’y a qu’une seule entrée dans la table de partition, et ses propriétés sont telles que tout le disque est occupé.

    Partition table entry

     

    Start head : 0

    End head : FF (255)

    Start sector : 2

    End Sector : 3F (63)

    Start Cylinder : 0

    End Cylinder : 3FF (1023)

    Relative Sector : 1

    Total Sectors : FFFFFFFF (4294967295)

    Partition Type : EE (GPT)

     

    Le MBR est dit “protecteur” car il contient une partition qui couvre tout le disque (Relative Sector 1 / Total Sectors FFFFFFFF), et aussi car nous avons des secteurs importants

    Voici ce à quoi ressemble le secteur 1 : 

    clip_image006

    Ce secteur est le GPT Header et contient ces informations :

    Partition

    Offset

    Size

    Sample value

    Meaning

    Sector Signature

    0

    8 bytes

    "EFI PART"

     

    Version

    8

    4 bytes

    00 00 01 00

    0.1

    Header size

    C

    4 bytes

    5C 00 00 00

    5C

    CRC32 of the header

    10

    4 bytes

    0D 2C 34 EA

    3929287693

    Reserved

    14

    4 bytes

    0

    0

    Current GPT Header Address

    18

    8 bytes

    01 00 00 00 00 00 00 00

    1

    Backup GPT Header Address

    20

    8 bytes

    FF FF DF 0F 00 00 00 00

    266338303

    First usable LBA

    28

    8 bytes

    22 00 00 00 00 00 00 00

    34

    Last usable LBA

    30

    8 bytes

    DE FF DF 0F 00 00 00 00

    266338270

    Disk GUID

    38

    16 bytes

    85 A1 7E 9C 2D 05 3B 4A AC DD D1 FF 8F 7B 22 4A

    9C7EA185-052D-4A3B-ACDD-D1FF8F7B224A

    Partition Table Address

    48

    8 bytes

    02 00 00 00 00 00 00 00

    2

    Partition Count

    50

    4 bytes

    80 00 00 00

    128

    Partition Table Entry Size

    54

    4 bytes

    80 00 00 00

    128

    CRC32 of partition table

    58

    4 bytes

    3E C0 26 26

    640073790

    Toutes les données sont importantes, mais celles qui nous intéressent pour faire des réparations sont :

    • La signature ("EFI PART") : Pour reconnaitre le secteur (nous n’avons plus de 55 AA)
    • Les CRC32 : Ceux-ci sont importants car ils permettent au système de vérifier que quelqu’un n’a pas modifié des entrées dans ses tables à la main, en by-passant le système.
    • L’adresse courante du header (1) et l’adresse du GPT Header alternatif (266338303)
    • Le début de la table de partition (2) et le nombre de partition qu’elle peut contenir (128)
    • Les 1ers et derniers secteurs utilisables (en général le dernier +1 contient le début de la table de partitions
    • Un GUID qui représente le disque (sa signature)

    Cette structure est décrite sur http://msdn.microsoft.com/en-us/library/windows/desktop/aa365449(v=vs.85).aspx

    Regardons le secteur 2 : Début de la table de partition.

    clip_image008

    Il faut y voir 4 régions de 128 bytes chacune : Une entrée dans la table de partition fait 128 bytes

    Dans le cas présent, les 2 premières entrées sont occupées et les autres sont vides

    Première entrée

    Partition Table Entry

    Offset

    Size

    Sample value

    Meaning

    Partition Type

    0

    16 bytes

    16 E3 C9 E3 5C 0B B8 4D 81 7D F9 2D F0 02 15 AE

    E3C9E316-0B5C-4DB8-817D-F92DF00215AE

    Partition GUID

    10

    16 bytes

    7C C6 D3 BB F9 D2 5F 42 9F 2C 7D CF 1F 1D 8B E5

    BBD3C67C-D2F9-425F-9F2C-7DCF1F1D8BE5

    Starting LBA

    20

    8 bytes

    22 00 00 00 00 00 00 00

    34

    Ending LBA

    28

    8 bytes

    21 00 04 00 00 00 00 00

    262177

    Attribute flags

    30

    8 bytes

    00 00 00 00 00 00 00 00

    0

    Partition Name

    38

    72 bytes

    … too long…

    Microsoft Reserved Partition

    Seconde entrée

    Partition Table Entry

    Offset

    Size

    Sample value

    Meaning

    Partition Type

    80+0

    16 bytes

    A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7

    EBD0A0A2-B9E5-4433-47C0-68B6B72699C7

    Partition GUID

    80+10

    16 bytes

    BE 9C FD 21 F3 E8 40 49 8C C2 57 30 0A A8 1E B6

    21FD9CBE-E8F3-4940-8CC2-57300AA81EB6

    Starting LBA

    80+20

    8 bytes

    00 08 04 00 00 00 00 00

    264192

    Ending LBA

    80+28

    8 bytes

    FF F7 DF 0F 00 00 00 00

    266336255

    Attribute flags

    80+30

    8 bytes

    00 00 00 00 00 00 00 00

    0

    Partition Name

    80+38

    72 bytes

    … too long…

    Basic data partition

    Vous pourrez trouver des informations complémentaires sur ces structures dans l’article http://msdn.microsoft.com/en-us/library/windows/desktop/aa365449(v=vs.85).aspx

    Plus d’informations sur la Microsoft Data Partition (MSR) dans la FAQ GPT:

    http://msdn.microsoft.com/en-us/library/windows/hardware/dn640535(v=vs.85).aspx#gpt_faq_what_is_msr

    Donc, la première entrée est pour la MSR et la seconde pour la partition de données de type « Basic Data Partition ».

    Puisqu’il s’agit d’une partition NTFS, nous pouvons trouver les NTFS Boot Sectors aux LBA 264192 et 266336255

    Et voilà:

    clip_image010

    On peut y lire:

    Déjà on retrouve notre signature 55 AA (qui commençait à manquer un des mes amis blogueurs)

    • Le Relative Sector : 00 08 04 00 --> 00 04 08 00 = 40800 = 264192 LBA
    • Total Sectors: FF EF DB 0F 00 00 00 00 --> FDBEFFF = 266072063 Secteurs

    Le NTFS Boot sector de backup montrera la même information.

    Le GPT Header nous avait parlé du Last Usable LBA (266338270)

    Le LBA juste après montre bien une copie de la table de partition (266338270 + 1 = 266338271 )

    clip_image012

    Un espace de 128 entrées (si on en prend 4 par secteur de 512 ça fait 32 secteurs) est reservé pour y stocker toute la table de partitions

    Les angoissés qui aiment que tout soit bien aligné éprouveront sans doute un plaisir non caché en constatant que 26638271 + 32 = 266338303 : C’est exactement l’emplacement du GPT Header alternatif.

    C’est vrai que c’est rassurant quand même … quelque part … moi, je trouve ça rassurant.

    clip_image014

    Comme on adore les schémas qui montre la beauté de l’alignement des secteurs, en voici un qui reprend les valeurs que nous avons trouvées.

    clip_image016

    Voilà, vous savez désormais tout sur la façon dont les partitions sont référencées dans des disques GPT. Dans le prochain article, nous allons voir où peuvent se glisser des corruptions et comment les réparer (ou pas).

    Serge Gourraud
    55 AA

  • Récupération de partitions VI - Un peu plus loin dans la détection des partitions

    Supposons maintenant que ce disque qui contient ces 3 partitions :

    clip_image002

    Se soit transformé en ceci:

    clip_image004

    Ce sont des choses qui arrivent quand le MBR (secteur 0 du disque) a été vidé.

    Rappelons la structure d’un disque contenant 3 partitions et essayons de voir ce qu’on a concrètement sur le disque

    clip_image006

    Le secteur 0 est vide: Pas de signature, pas de code, pas de table de partitions

    clip_image008

    Sur des disques MBR Basiques c’est au secteur 2048 que démarre la première partition (sur les anciennes architectures, on aurait cherché au secteur 63 voire 31 mais ça nous ramené à NT4.0)

    Le secteur 2048 nous montre ceci :

    clip_image010

    Et nous pouvons y lire ces informations :

    • OEM ID (offset 30) : NTFS
    • Bytes per Sector (offset 0B) : 00 02 -> 512
    • Sectors per cluster (offset 0D) : 08
    • Cluster per MFT Record (offset 40) : F6 -> 1K
    • Total Sectors (offset 28) : FF 67 C5 09 00 00 00 00 -> 163932159 sectors (~78GB
      • Backup NTFS Boot Sector = 163932159 + 2048 = 163934207
    • Clusters to MFT (offset 30) : 00 00 0C 00 00 00 00 00 -> 78643
      • La partition démarrant en 2048 : on trouvera la MFT en 2048 + 8 * 786432 = 629350
    • Clusters to MFTMirr (offset 38) : 02 00 00 00 00 00 00 00 -> 2
      • 2048 + 8 * 2 = 2064

    Pour résumer :

    • Le dernier secteur de la partition devrait se trouver en 163934207
    • La MFT en 786432 (et son "backup" en 2064
    • Le champ $Volume en 6293510 ( = 6293504 + 2*3)

    Le NTFS Boot Sector de backup en 163934207

    clip_image012

    Le secteur 786432 ressemble à un début de MFT

    clip_image014

    Et visiblement, on retrouve le nom du volume

    clip_image016

    Nous savons désormais que notre première partition démarre au secteur 2048 et finit au secteur 163934207

    Comme tout est aligné, la seconde partition devrait démarrer au secteur 163934207 + 1 = 163934208

    Fantastique!

    clip_image018

    On peut également y lire:

    • OEMID (offset 30) : NTFS
    • Bytes per Sector (offset 0B) : 00 02 -> 512
    • Sectors per cluster (offset 0D) : 08
    • Cluster per MFT Record (offset 40) : F6 -> 1 record MFT = 1K
    • Total Sectors (offset 28) : FF 7F A9 03 00 00 00 00 : 61439999 sectors (~29 GB)
      • Backup NTFS Boot Sector : 61439999 + 163934208 = 225374207
    • Clusters to MFT (offset 30) : 00 00 0C 00 00 00 00 00 : 786432 -> 163934208 + 8 * 786432 = 170225664
    • Clusters to MFTMirr (offset 38) : 02 00 00 00 00 00 00 00 : 2 -> 163934208 + 8 * 2 = 163934224

    De même, la 3ième partition sensé démarrer un secteur plus loin y est bien présente :

    225374207 + 1 = 225374208

    clip_image020

    Total sectors: 0270FFFF = 40959999 = 40959999 *512 = 20971519488 Bytes

    Backup Boot Sector : 40959999 + 225374208 = 266334207

    Il faudra faire un contrôle complet de chaque secteur important (NTFS / Backup NTFS / MFTMirr / MFT / MFT.$Volume) et on peut dresser cette carte du disque :

    • Première Partition :
      • Nom du volume Part1
      • Taille en secteurs: 163932159
      • Démarre au secteur: 2048
      • MFT localisée au secteur: 6293504
      • Termine au secteur: 16393420
    • Deuxième Partition :
      • Nom du volume: Part2
      • Taille en secteurs: 61439999
      • Démarre au secteur: 163934208
      • MFT localisée au secteur: 170225664
      • Termine au secteur: 225374207
    • Troisième Partition :
      • Nom du volume: Part3
      • Taille en secteurs: 40959999
      • Démarre au secteur: 225374208
      • MFT localisée au secteur: 231665664
      • Termine au secteur: 266334207

    Il est très important de tout bien verifier: Si vous faites une erreur d’un secteur et que votre partition ne trouve pas sa MFT, notre  vieil ami chkdsk se fera un plaisir d’un générer automatiquement une toute nouvelle MFT, tout vide, juste pour vous. 

    Et nous pouvons démarrer notre réparation

    Première étape: Initialiser le disque (le code, la signature et une table de partition vide seront écrites)

    clip_image022

    Maintenant, il nous faut reprendre notre éditeur hexa préféré, le mien s’appelle DskProbe.exe car il permet d’appliquer un masque au données affichés par les secteurs.

    (Pour information ce lien http://fr.wikipedia.org/wiki/%C3%89diteur_hexad%C3%A9cimalpropose une liste de produits)

    Le secteur 0 que nous venons de réécrire (par initialisation) ressemble désormais à cela :

    clip_image024

    Avec DskProbe, nous pouvons faire paraitre la table de partition de ce secteur.

    Les valeurs de début et fin de Head (=Side), Secteur et Cylindre dépendent de l’architecture, mais sont souvent les mêmes et voici celle qui convient de mettre pour la première partition de notre disque.

    (Si vous avez plusieurs disques identiques sur votre ordinateur, ou un autre ordinateur avec le même disque qui n’a pas eu de soucis, vous pouvez récupérer les mêmes données)

    clip_image026

    Note : Il faut ajouter un secteur au Total Sectors du MBR par rapport au Total Sectors du NTFS Boot Sector puisqu’à cet endroit il faut compter les deux NTFS Boot Sector qui encadrent la partition, alors que dans le NTFS Boot Sector, on ne compte pas le dernier.

    En récrivant « 07 » à l’offset du FileSystem de la première entrée de la table de partition.

    Un rescan disk dans le Disk Manager nous fait reparaitre la partition comme par miracle:

    clip_image028

    On peut faire reparaitre les deux autres partitions en remplissant mes Start/End Side/Sector/Cylinder comme suit, et en adaptant les Relative et Total Sectors aux données relevées et en plaçant le type de système à NTFS (07) aux offset 01C2, 01D2, 01E2, 01F2 correspondant aux partitions respectives.

    clip_image030

    clip_image032

    Si une des partitions par en chdksk, pas de chances : Soit vous vous êtes trompés dans vos calculs, soit la MFT avait besoin d’une réparation avant vos opérations.

    Comme expliqué au premier article, toutes ces opérations sont des opérations de dernier recours, et ne garantissent aucunement la récupération de vos données.

    Dans la prochaine série, nous nous intéressons aux disques GPT.

    Serge Gourraud
    55 AA

  • Récupération de partitions V - Récupération d'une partition NTFS sur un disque MBR basique

    Pour faire reparaitre une partition disparue, nous avons besoin de peu de chose pour faire cette recuperation:

    • Le NTFS Boot Sector de backup
    • Savoir retrouver la MFT pour être certain de récupérer la bonne partition

    Nous allons voir comment récupérer une partition qui a disparu suite à une opération manuelle malencontreuse.

    clip_image002

    Windows étant un petit paresseux, nous savons que quand on supprime une partition, seule l’entrée dans la table de partition est supprimée.

    Vérification: 

    clip_image003

    Dans les architectures récentes, les partitions NTFS commencent le plus souvent au secteur 2048 (les anciennes démarraient au secteur 63).

    Si ce n’est pas le cas, il faut chercher sur le disque. Certains éditeurs hexa permettent de le faire, dskprobe le permet.

    Dans notre cas, le secteur 2048 est bien un secteur d’amorçage NTFS :

    clip_image004

    Nous pouvons identifier facilement :

    • Le OEM ID String "NTFS"
    • Bytes par secteurs : 512
    • Secteurs par cluster : 8
    • Partition Size en secteurs : FF E7 DF 0F 00 00 00 00 --> FDFE7FF = 266332159 secteurs (à peu près 127 GB : 266332159*512/1024/1024/1024)

    Donc le NTFS Boot Sector de backup devrait se trouver au secteur 266334207 ( = 2048 + 266332159 )

    Allons voir :

    clip_image005

    Vérifions que nous retrouvons bien la MFT

    • Clusters to MFT : 00 00 0C 00 00 00 00 00 = 0xC0000 = 786432 clusters = 6291456 secteurs. En ajoutant 2048 ça fait:  6293504
    • Clusters to MFTMirr : 02 00 00 00 00 00 00 00 = 0x2 = 2 clusters = 16 secteurs. En ajoutant 2048 ça fait:  2064

    Le secteur 6293504 ressemble bien au premier metafichier de la MFT

    clip_image006

    Le metafichier $Volume nous fournit bien le bon nom de volume (à vérifier avec l’administrateur)

    clip_image007

    Donc en résumer, même si la partition a été supprimée, les données sont toujours présentes :

    • La partition est encadrée par les NTFS Boot Sector de début et de fin
    • Le NTFS Boot Sector pointe vers une MFT qui semble valide

    Ce qui reste à faire est donc la chose suivante :

    1. Enregistrer le contenu du secteur 2048 avec l’outil de votre choix (dskprobe permet de le faire)
    2. Recréer une nouvelle partition dans le gestionnaire de disque ou diskpart : Ne pas la formater.
    1. Si on formate la partition, on réécrit la MFT et toute les références au contenu de la partition. Gardons en tête que Windows est un petit paresseux : La MFT sera refaite, mais les données sur le disque seront toujours présentes jusqu’à ce qu’elles soient écrasées. Certains outils pourront encore vous aider mais il faudra y mettre le prix.
    2. En créant cette nouvelle partition
      1. Une nouvelle entrée est créée dans la table de partition
      2. Le secteur 2048 a été vidé

    • La dernière opération consiste en réécrire le secteur sauvegardé sur le 2048 et replacer le FileSystem à l’offset 01C2 : écrire 07

    Un rescan devrait faire reparaitre le disque.

    Ces étapes en image :

    1. Sauvegarde du contenu du secteur 2048 avec dskprobe2.exe

    clip_image009

    clip_image011

    2. Création de la partition sans la formater

    clip_image013

    Suivant … Suivant … Jusqu’à l’option de formatage : Choisir l’option "Do not format this volume"

    clip_image015

    Nous obtenons une partition RAW :

    clip_image017

    3. Ecraser le NTFS Boot sector par celui sauvegarder

    Dans DskProbe se placer sur le secteur 2048 du disque, et ouvrir le fichier que nous venons de sauvegarder

    clip_image019

    clip_image021

    Ecrire le fichier sur le secteur 2048

    clip_image023

    Vérifier qu’on écrit bien 1 secteur sur le secteur 2048 et cliquer sur "Write"

    clip_image025

    Retourner au secteur 0 et remplacer le "06" à l’offset 1C2 par "07" : bien presser la touche 0 et la touche 7.

    clip_image027

    Puis faire un Write

    clip_image029

    Un Rescan Disk dans le Disk Manager fait reparaitre le disque

    Serge Gourraud
    55 AA

  • Recupération de partitions IV : Identification d’une partition NTFS

    Pour pouvoir récupérer une partition NTFS, il faut savoir l'identifier. Une partition NTFS contient essentiellement:

    • Un secteur d'amorçage NTFS (NTFS BootSector) en début de partition
    • Une MFT (la database de NTFS)
    • Une copie alternative des 3 premiers enregistrements de cette MFT
    • Un secteur de backup du NTFS Boot Sector en fin de partition

    clip_image001

    Pour une description complète de chacun des champs : http://technet.microsoft.com/fr-fr/library/cc781134(WS.10).aspx

    Pour rappel, la table de partition 0 nous montrait une partition démarrant au secteur 2048 et occupant 122972160 :

    clip_image002

    Examinons en détails le NTFS Boot Sector

    clip_image003

    Si on dresse un tableau de ces données on obtient ça:

     

    Byte Offset

    Field Length

    Sample Value

    Field Name

    0x00

    3 bytes

    EB 52 90

    Jump Instruction

    0x03

    8 bytes

    NTFS

    OEM ID

    0x0B

    2 bytes

    00 02 (512)

    Bytes per sector

    0x0D

    1 byte

    08

    Sectors per Cluster

    0x0E

    2 bytes

    00 00

    Reserved Sectors

    0x10

    3 bytes

    00 00 00

    Must be 0

    0x13

    2 bytes

    00 00

    Must be 0

    0x15

    1 byte

    F8

    Media Descriptor

    0x16

    2 bytes

    00 00

    Must be 0

    0x18

    2 bytes

    3F 00

    Not used

    0x1A

    2 bytes

    FF 00

    Not used

    0x1C

    4 bytes

    00 08 00 00 (0x800 = 2048)

    Not used

    0x20

    4 bytes

    00 00 00 00

    Must be 0

    0x24

    4 bytes

    80 00 80 00

    Not used

    0x28

    8 bytes

    FF 67 54 07 00 00 00 00 (122972159)*

    Total Sectors

    0x30

    8 bytes

    00 00 0C 00 00 00 00 00 (786432)

    Clusters to $MFT

    0x38

    8 bytes

    02 00 00 00 00 00 00 00 (2)

    Clusters to $MFTMirr

    0x40

    1 byte

    F6 (246) **

    Clusters Per MFT Record

    0x41

    3 bytes

    00 00 00

    Not used

    0x44

    1 byte

    01

    Clusters Per Index Buffer

    0x45

    3 bytes

    00 00 00

    Not used

    0x48

    8 bytes

    31 DD 45 AE 2B 46 AE FE

    Volume Serial Number

    0x50

    4 bytes

    00 00 00 00

    Not used

    *La table de partition présente au secteur 0 nous avait indiqué une partition occupant 122972160 secteurs. Ca fait un secteur de plus, car dans cette table, on compte le 1er secteur de la partition ainsi que le dernier. Dans le secteur d’amorçage NTFS on compte un secteur de moins. Il faudra s’en rappeler quand nous ferons des réparations.

    **La taille de chaque enregistrement. NTFS fera un enregistrement pour chaque fichier et répertoire de son volume. Ceux dont la taille est inférieur à la taille d’un enregistrement sont résident dans la MFT. Si ce nombre est positif (entre 00 et 7F) alors il represente le nombre de cluster par enregistrement. Si le nombre est négatif (de 80 à FF), alors la taille d’un enregistrement est 2 à la puissance la valeur absolue de la valeur de ce champ.

    • Dans notre exemple, nous pouvons lire la valeur 0xF6. C’est une valeur négative, et sa valeur absolue est 0x0A (10 en décimal). Donc la taille d’un enregistrement sera de 2^10 = 1024 Bytes (1K)
    • Si nous avions formaté la partition avec le paramètre /L, nous aurions lu la valeur 0x01 dans le champ clusters per MFT Record. Dans ces condition, la taille d’un record aurait été 1 cluster. Comme 1 cluster occupe 8 secteurs, ça nous aurait donné 4K par enregistrement (ce qui est bien le but du paramètre /L)

    Clusters to MFT est de 786432, et nous avons 8 secteurs par cluster. Donc, la MFT est localisée au secteur 6293504 ( = 2048 + 786432 * 8 )

    Nous pouvons voir à cet emplacement, le premier fichier de la MFT : $MFT

    clip_image004

    Sachant que chaque enregistrement occupe 1K, il est possible de parcourir tous les enregistrements de la MFT jusqu’à, par exemple, l’enregistrement $Volume qui fournit le nom du volume. Puisqu’il s’agit du 4ième, nous le trouverons au secteur 6293510.

    clip_image005

    Si nous ne trouvons rien de ce genre à cet emplacement, c’est que soit la donnée a été écrasée, soit qu’on n’est pas au bon endroit : Le secteur d’amorçage n’est peut-être pas le bon, ou contient de mauvaises informations

    Dans l’article suivant nous récupérons une partition.

    Serge Gourraud

    55 AA

  • Recupération de partitions III : Structures des disques basiques MBR - Les partitions étendues

    Recupération de partitions III : Structures des disques basiques MBR - Les partitions étendues

    Dans l’article précédent, nous avons vu un exemple de partitionnement contenant une et plusieurs partitions primaires. Afin de pouvoir mettre plus de quatre partitions sur un disque, il existe un système de partition étendue. En quelques mots :

    -        Si vous souhaitez 1 à 4 partitions : Vous aurez 4 partitions primaires

    -        Si vous souhaitez 5 partitions ou plus : Vous aurez 3 partitions primaires et 1 partition étendue contenant autant de volumes que souhaité.

    Si on observe la table de partition à l’éditeur hexa, on sait qu’il n’y a la place que pour 4 entrées et on voit bien que les 4 entrées sont occupées.

    La dernière entrée a ceci de particulier qu’elle est de type 0x0F (partition étendue), et qu’elle occupe 30722048 secteurs (ce qui nous donnerait à peu près 14 GB pour des secteurs de 512 Bytes)

    Donc, si nous refaisons notre petit tableau récapitulatif:

    Partition

    Partition 1

    Partition 2

    Partition 3

    Partition 4

    Boot indicator

    0

    0

    0

    0

    Starting Head

    20 = 32

    254

    254

    254

    Starting Sector

    21 = 33

    63

    63

    63

    Starting Cylinder

    0

    1023

    1023

    1023

    System ID

    07 (NTFS)

    07 (NTFS)

    07 (NTFS)

    0F (Extended)

    Ending Head

    FE = 254

    254

    254

    254

    Ending Sector

    63

    63

    63

    63

    Ending Cylinder

    1023

    1023

    1023

    1023

    Relative Sector

    00000800 = 2048

    07547000 = 122974208

    0A61B000 = 174174208

    0E0B3000 = 235614208

    Total Sectors

    07546800 = 122972160

    030D4000 = 51200000

    03A98000 = 61440000

    01D4C800 = 30722048

    Avant d’aller plus loin regardons à quoi ressemble le premier secteur d’une partition NTFS. La première partition (PPart01) est sensé démarrer au secteur 2048, et voici le secteur 2048 :

    Nous détaillerons le contenu de ce secteur dans la partie 4, mais pour l’instant nous avons juste besoin de savoir que ce secteur est signé "55 AA" et qu’il contient bien le OEM ID "NTFS".

    Regardons maintenant ce qui se trouve au secteur 235614208 (entrée de la 4ième partition). Il est quasiment vide, mais nous pouvons y reconnaitre une nouvelle table de partition dans la partie inférieure.

    Cette table de partition contient deux entrées:

    En passant tout ça à la moulinette, on peut construire ce petit tableau:

    Partition

    Entry 1

    Entry 2

    Entry 3

    Entry 4

    Boot indicator

    0

    0

    0

    0

    Starting Head

    254

    254

    0

    0

    Starting Sector

    63

    63

    0

    0

    Starting Cylinder

    1023

    1023

    0

    0

    System ID

    07 (NTFS)

    05 (Extended)

    0

    0

    Ending Head

    254

    254

    0

    0

    Ending Sector

    63

    63

    0

    0

    Ending Cylinder

    1023

    1023

    0

    0

    Relative Sector

    00000800 = 2048

    00FA0800 = 16386048

    0

    0

    Total Sectors

    005DB800 = 6141952

    003E8000 = 4096000

    0

    0

    Quand on parcours une partition étendue, le Relative Sector ne fait pas référence au début du disque, mais au début de la partition étendue.

    Comme notre partition étendue démarre au secteur 235614208, le premier volume NTFS devrait se trouver au secteur 235616256 ( = 235614208 + 2048 )

    Cela reseemble bien à un secteur NTFS:

    Maintenant, regardons ce qui se trouve à la seconde entrée de la table de partition. Son Relative Sector est 10242048 et la partition étendue démarrait au secteur 235614208. Donc l’entrée doit nous faire pointer vers le secteur 245856256 ( = 235614208 + 10242048 ). Allons voir :

    C'est une nouvelle table de partition contenant ces informations:

    Partition

    Entry 1

    Entry 2

    Entry 3

    Entry 4

    Boot indicator

    0

    0

    0

    0

    Starting Head

    254

    254

    0

    0

    Starting Sector

    63

    63

    0

    0

    Starting Cylinder

    1023

    1023

    0

    0

    System ID

    07 (NTFS)

    05 (Extended)

    0

    0

    Ending Head

    254

    254

    0

    0

    Ending Sector

    63

    63

    0

    0

    Ending Cylinder

    1023

    1023

    0

    0

    Relative Sector

    00000800 = 2048

    00FA0800 = 16386048

    0

    0

    Total Sectors

    005DB800 = 6141952

    003E8000 = 4096000

    0

    0

    La partition NTFS suivante démarre au secteur 245858304 ( = 245856256 + 2048 ) et la prochaine table de partition au secteur 252000256 ( = 235614208 + 16386048 )

    Comme nous n’avons que 3 volumes dans la partition étendue, ce table de partition devrait être la dernière qui pointe vers une partition NTFS et nous n’avons qu’une seule entrée puisque nous n’avons pas d’autres volumes à déclarer.

    Voilà comment Windows s’y prend pour faire entrer plusieurs partitions dans des tables qui ne peuvent en contenir que 4.

    Dans l’article suivant, nous allons détailler le contenu d’un secteur d’amorçage NTFS afin de pouvoir commencer les réparations.

    Serge Gourraud

    55 AA

  • Recupération de partitions II : Structures des disques basiques MBR - Configurations simples et courantes

    Dans l'article précédent, nous avons vu comment sont structurés les partitions et volumes sur les disques. Nous allons voir cela da façon concrète sur un disque MBR Basique.

    Pour cela, j'utilise un éditeur hexadécimal et ouvre le disque aux secteurs qui m'interressent. L'éditeur que j'utilise s'apelle dskprobe.exe (un outil Microsoft assez basique qui affiche les secteurs par pages de 512 Bytes) mais vous pouvez utiliser celui qui vous convient le mieux. Une liste est disponible sur http://fr.wikipedia.org/wiki/%C3%89diteur_hexad%C3%A9cimal

    Ouvrons le secteur 0 d'un disque MBR Basique.

    image

    En rouge:

    • La signature du disque de l'offset 0x01B8 à l'offset 0x01BB : 26 A8 75 C2.
      • Il faut lire cette information en little endian : C275A826
    • Une sorte de signature du secteur : 55 AA
      • Vous la trouverez sur pas mal de secteurs importants du disque. Elle est indispensable.

    En surligné : La table de partition, contenant 4 entrée.

    • La 1ère entrée commence à l'offset 0x1BE et termine à l'offset 0x1CD : Elle contient les coordonnées d'une partition
    • La 2ième entrée commence à l'offset 0x1CE et termine à l'offset 0x1DD : Celle-ci est vide
    • La 3ème entrée commence à l'offset 0x1DE et termine à l'offset 0x1ED : Celle-ci est vide
    • La 4ème entrée commence à l'offset 0x1EE et termine à l'offset 0x1FD : Celle-ci est vide

    La partie au dessus est du code.

    Focalisons-nous sur la première entrée de la table de partition, et essayons de lui faire correspondre la description disponible sur http://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx

    clip_image001

     

    Offset

    Taille du champ

    Valeur

    Nom du champ

    01BE

    1 byte

    00

    Indicateur de boot:

    • 00 indique que la partition n'est pas bootable
    • 80 indique que la partition est pas bootable

    01BF

    1 byte

    20

    Starting Head : 0x20 = 32 en décimal

    01C0

    6 bits

    21

    Starting Sector : 0x21 = 00100001 -> 00 100001 = 33

    01C1

    10 bits

    00

    Starting Cylinder : 0x00 = 00000000 -> 00 00000000 = 0

    01C2

    1 byte

    07

    Type de partition. 07 signifie NTFS

    http://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx

    01C3

    1 byte

    FE

    Ending Head : 0xFE = 254

    01C4

    6 bits

    FF

    Ending Sector : 0xFF = 11111111 -> 11111111

    = 111111 = 63

    01C5

    10 bits

    FF

    Ending Cylinder : 0xFF = 11111111 -> 11 11111111 = 1111111111 = 1023

    01C6

    4 bytes

    00 08 00 00

    Relative Sector : 1er secteur de la partition (en GPT on appelera ça Starting LBA)

    En little endian, lire : 00 00 08 00 = 0x800 = 2048

    01CA

    4 bytes

    00 E8 DF 0F

    Total Sectors : Le nombre de secteurs de la partition

    0x0FDFE800 = 266332160

     

    Ca veut dire que ce disque contient une partition NTFS qui démarre au secteur 2048 et occupe 266332160 secteurs.

    Nous ne savons pas encore exactement quelle taille cela fait en Bytes, mais la plupart du temps, 1 secteur occupe 512 bytes. Ce qui nous fait (si on a des secteurs de 512 bytes)

    • 266332160 * 512 = 136362065920 bytes
    • 136362065920 / 1024 / 1024 / 1024 = 126.9971 GBytes

    Considérons maintenant quelque chose d'un peu plus fréquent: Un disque contenant plusieurs partitions.

    Notre table de partition au secteur 0 pourrait bien ressembler à cela:

    clip_image002

    Ce qui nous donne ce petit tableau récapitulatif:

    Partition

    Partition 1

    Partition 2

    Partition 3

    Partition 4

    Indicateur de boot

    0

    0

    0

    0

    Starting Head

    20 = 32

    254

    254

    0

    Starting Sector

    21 * = 33

    63

    63

    0

    Starting Cylinder

    0 *

    1023

    1023

    0

    System ID

    07 (NTFS)

    07 (NTFS)

    07 (NTFS)

    0

    Ending Head

    FE = 254

    254

    254

    0

    Ending Sector

    63 *

    63

    63

    0

    Ending Cylinder

    1023 *

    1023

    1023

    0

    Relative Sector

    00000800 * = 2048

    07547000 = 122974208

    0A61B000 = 174174208

    0

    Total Sectors

    07546800 * = 122972160

    030D4000 = 51200000

    03A98000 = 61440000

    0

    * *Toujours en suivant la petite moulinette de ne garder que 6 bits sur le 1er champ, et d'ajouter les 2 restants aux 8 d champs suivant

    *A lire en little endian

    Dans l’article suivant, nous détaillerons un disque contenant des partitions étendues.

    Serge Gourraud

    55 AA

  • Recupération de partitions I : Quelques définitions et structures

    Dans les articles qui suivent, nous évoquerons ces termes à maintes reprises. Autant se familiariser tout de suite avec ces termes :

    • LBA = Logical Block Address : Le numéro du secteur. En général, un secteur fait 512 bytes ou 4 KBytes
    • LDM = Logical Disk Manager
    • MFT = Master File Table. La database du système de fichiers NTFS.
      • http://msdn.microsoft.com/en-us/library/windows/desktop/aa365230(v=vs.85).aspx
    • MBR = Master Boot Recor
    • PBS = Partition Boot Sector : Le premier secteur d'une partition.
    • BPB : BIOS Parameter Block : Une partie du PBS
    • GPT = GUID Partition Table.

    L'objectif de ces articles est de parcourir les secteurs importants des disques pour comprendre où pourrait se placer une corruption et de la réparer (quand c'est possible) juste en écrivant la bonne information au bon endroit. Toutes les structures que nous allons parcourir sont déjà décrites dans MSDN.

    Aussi, si vous souhaitez avoir plutôt une approche développeur, un bon point de départ serait d'invoquer un DeviceIoControl en utilisant le control code IOCTL_DISK_GET_DRIVE_LAYOUT_EX (cf. http://msdn.microsoft.com/fr-fr/library/windows/desktop/aa365174(v=vs.85).aspxpour plus de détails)

    Ce contrôle vous fournira une structure de type DRIVE_LAYOUT_INFORMATION_EX

    typedef struct _DRIVE_LAYOUT_INFORMATION_EX {

    DWORD PartitionStyle;

    DWORD PartitionCount;

    union {

    DRIVE_LAYOUT_INFORMATION_MBR Mbr;

    DRIVE_LAYOUT_INFORMATION_GPT Gpt;

    };

    PARTITION_INFORMATION_EX PartitionEntry[1];

    } DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX;

    Nous n'évoquerons pas d'avantage cette approche dans cette série, mais cela pourrait faire le sujet d'une autre série si la demande est forte.

    Comme expliqué, la MSDn regorge de schémas explicatifs mais essayons de les présenter différemment afin d'afficher plutôt une comparaison de ces structures, si cela peut aider.

    Comparaison MBR et GPT

    Différences principales (liste non exhaustive) dans les fonctionnalités:

     

    MBR

    GPT

    Nombre de partitions primaires

    4

    128

    Taille de disque maximale

    2 TB

    2^64 LBA = 8*2^30 TB

    Protection de la table de partition

    NON

    OUI

    Quelques références:

    Comparaisons des structures identifiables, écrites à plat sur les disques basiques

    Pour avoir une vision complète des disques basiques, aller sur http://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx

    clip_image002

    Comparaisons des structures identifiables, écrites à plat sur les disques dynamiques

    Pour avoir une vision complète des disques dynamiques, aller sur http://technet.microsoft.com/fr-fr/library/cc758035(v=WS.10).aspx

    clip_image004

    Comparaisons des disques basique et dynamiques

    Différences principales (liste non exhaustive) en terme de fonctionnalités

     

    Basiques

    Dynamiques

    Nombre maximal de volumes

    4

    > 4*

    RAID Logiciel

    NON

    OUI

    Protection des volumes

    NON

    OUI

    Extension de volumes

    OUI **

    OUI

    * Le nombre de volumes que peut supporter un disque dynamique n'est pas illimité car la database est limitée à 1 MB. Sachant que chaque disque dynamique attaché à un système contient la descroption de tous les volumes de ce système, rajouter des disques n'augmentera pas cette limite. Au contraire, il faudra rajouter des enregistrement pour en plus pour décrire le nouveau disque.

    **Il est possible d'étendre un volume sur plusieurs disques dynamique, mais sur des disques basiques, on ne peut rester que sur le même disque.

    Les différents types de volumes sont décrit sur : http://technet.microsoft.com/fr-fr/library/cc737048(v=WS.10).aspx

    clip_image006

    Dans le post suivant, nous allons tenter de voir concrètement comment cela se traduit en donnée brute écrite sur les disques.

    Serge Gourraud

    55 AA

  • Récupération de partitions

    Il arrive que les structures qui décrivent les partitions sur les disques soient perdues ou corrompues. Heureusement cela arrive assez rarement, mais quand c’est le cas, nous nous retrouvons en face d’un disque qui n’a plus du tout de partitions, ou des partitions affichées en RAW et on peut légitimement être inquiet, voire craindre d’avoir tout perdu. Comme ces données sont souvent cruciales, l’administrateur aura dans le meilleur des cas un backup (bien évident, puisque ces données sont cruciales) mais le temps de restauration de ce backup peut prendre plusieurs heures voire plusieurs journées. Dans le pire des cas, l’administrateur n’aura pas de backup (les données ne devaient pas être suffisamment importante).

    Tant que (ou les) partitions sont absentes ou marquées comme RAW, la source du problème peut se trouver dans des erreurs au niveau des structures qui décrivent les partitions, et sous certaines conditions, il est possible de reconstruire ces structures et de faire reparaitre ces partitions dans Windows.

    Le but des articles qui suivent est de décrire ces structures, les retrouver sur le disque, d’identifier les corruptions potentielles et de les corriger si possible.

    La récupération d’une MFT corrompu ne fait pas l’objet de ces articles, et pour cela, nous ne pouvons que recommander l’utilisation de chkdsk.exe

    Nous allons travailler sur les disques Basiques (MBR et GPT) et Dynamique (MBR et GPT) en suivant cet agenda:

    Serge Gourraud

    55 AA