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
Travaillons aujourd’hui sur un autre scénario assez simple : Celui de la suppression accidentelle d’une partition.
Supposons que cette partition
soit devenue
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
Au secteur 1, on retrouve un GPT Header :
Données:
Et le secteur 266338303 montre la même chose.
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.
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
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:
Résumons-nous :
En principe, comme pour une partition MBR :
Quand vient le moment de formater, ne pas formater.
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.
Après vérification rapide (secteur de fin de partition, MFT, MFTMirr) un rescan du disque fait revenir la partition comme par magie.
Serge Gourraud55 AA
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 :
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.
Nous n’allons donc voir que deux types de corruption
Premier type de corruption (le seul déjà rencontré au support) : Vidage du MBR
Voilà à quoi cela ressemble dans le gestionnaire de disque :
A l’éditeur hexa, on ne voit que des 00:
Le secteur 1 contient bien ce qui ressemble à un GPT Header
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.
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
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
Ending LBA
262177
184416255
245854207
266334207
Partition Name
Microsoft reserved 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:
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 :
Et c’est tout. Un rescan du disque et on n’en parle plus.
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.
Commençons par le secteur 0:
Remarques:
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 :
Ce secteur est le GPT Header et contient ces informations :
Partition
Offset
Size
Sample value
Meaning
Sector Signature
8 bytes
"EFI PART"
Version
8
4 bytes
00 00 01 00
0.1
Header size
C
5C 00 00 00
5C
CRC32 of the header
10
0D 2C 34 EA
3929287693
Reserved
14
Current GPT Header Address
18
01 00 00 00 00 00 00 00
1
Backup GPT Header Address
20
FF FF DF 0F 00 00 00 00
266338303
First usable LBA
28
22 00 00 00 00 00 00 00
Last usable LBA
30
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
02 00 00 00 00 00 00 00
2
Partition Count
50
80 00 00 00
128
Partition Table Entry Size
54
CRC32 of partition table
58
3E C0 26 26
640073790
Toutes les données sont importantes, mais celles qui nous intéressent pour faire des réparations sont :
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.
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
16 E3 C9 E3 5C 0B B8 4D 81 7D F9 2D F0 02 15 AE
E3C9E316-0B5C-4DB8-817D-F92DF00215AE
7C C6 D3 BB F9 D2 5F 42 9F 2C 7D CF 1F 1D 8B E5
BBD3C67C-D2F9-425F-9F2C-7DCF1F1D8BE5
21 00 04 00 00 00 00 00
Attribute flags
00 00 00 00 00 00 00 00
72 bytes
… too long…
Microsoft Reserved Partition
Seconde entrée
80+0
A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7
80+10
BE 9C FD 21 F3 E8 40 49 8C C2 57 30 0A A8 1E B6
21FD9CBE-E8F3-4940-8CC2-57300AA81EB6
80+20
00 08 04 00 00 00 00 00
80+28
FF F7 DF 0F 00 00 00 00
266336255
80+30
80+38
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à:
On peut y lire:
Déjà on retrouve notre signature 55 AA (qui commençait à manquer un des mes amis blogueurs)
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 )
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.
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.
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).
Supposons maintenant que ce disque qui contient ces 3 partitions :
Se soit transformé en ceci:
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
Le secteur 0 est vide: Pas de signature, pas de code, pas de table de partitions
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 :
Et nous pouvons y lire ces informations :
Pour résumer :
Le NTFS Boot Sector de backup en 163934207
Le secteur 786432 ressemble à un début de MFT
Et visiblement, on retrouve le nom du volume
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!
On peut également y lire:
De même, la 3ième partition sensé démarrer un secteur plus loin y est bien présente :
225374207 + 1 = 225374208
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 :
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)
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 :
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)
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:
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.
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.
Pour faire reparaitre une partition disparue, nous avons besoin de peu de chose pour faire cette recuperation:
Nous allons voir comment récupérer une partition qui a disparu suite à une opération manuelle malencontreuse.
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:
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 :
Nous pouvons identifier facilement :
Donc le NTFS Boot Sector de backup devrait se trouver au secteur 266334207 ( = 2048 + 266332159 )
Allons voir :
Vérifions que nous retrouvons bien la MFT
Le secteur 6293504 ressemble bien au premier metafichier de la MFT
Le metafichier $Volume nous fournit bien le bon nom de volume (à vérifier avec l’administrateur)
Donc en résumer, même si la partition a été supprimée, les données sont toujours présentes :
Ce qui reste à faire est donc la chose suivante :
Un rescan devrait faire reparaitre le disque.
Ces étapes en image :
1. Sauvegarde du contenu du secteur 2048 avec dskprobe2.exe
2. Création de la partition sans la formater
Suivant … Suivant … Jusqu’à l’option de formatage : Choisir l’option "Do not format this volume"
Nous obtenons une partition RAW :
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 Ecrire le fichier sur le secteur 2048 Vérifier qu’on écrit bien 1 secteur sur le secteur 2048 et cliquer sur "Write" Retourner au secteur 0 et remplacer le "06" à l’offset 1C2 par "07" : bien presser la touche 0 et la touche 7. Puis faire un Write
Dans DskProbe se placer sur le secteur 2048 du disque, et ouvrir le fichier que nous venons de sauvegarder
Ecrire le fichier sur le secteur 2048
Vérifier qu’on écrit bien 1 secteur sur le secteur 2048 et cliquer sur "Write"
Retourner au secteur 0 et remplacer le "06" à l’offset 1C2 par "07" : bien presser la touche 0 et la touche 7.
Puis faire un Write
Un Rescan Disk dans le Disk Manager fait reparaitre le disque
Pour pouvoir récupérer une partition NTFS, il faut savoir l'identifier. Une partition NTFS contient essentiellement:
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 :
Examinons en détails le NTFS Boot Sector
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
NTFS
OEM ID
0x0B
2 bytes
00 02 (512)
Bytes per sector
0x0D
1 byte
08
Sectors per Cluster
0x0E
00 00
Reserved Sectors
0x10
00 00 00
Must be 0
0x13
0x15
F8
Media Descriptor
0x16
0x18
3F 00
Not used
0x1A
FF 00
0x1C
00 08 00 00 (0x800 = 2048)
0x20
00 00 00 00
0x24
80 00 80 00
0x28
FF 67 54 07 00 00 00 00 (122972159)*
Total Sectors
0x30
00 00 0C 00 00 00 00 00 (786432)
Clusters to $MFT
0x38
02 00 00 00 00 00 00 00 (2)
Clusters to $MFTMirr
0x40
F6 (246) **
Clusters Per MFT Record
0x41
0x44
01
Clusters Per Index Buffer
0x45
0x48
31 DD 45 AE 2B 46 AE FE
Volume Serial Number
0x50
*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.
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
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.
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
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:
Boot indicator
Starting Head
20 = 32
254
Starting Sector
21 = 33
63
Starting Cylinder
1023
System ID
07 (NTFS)
0F (Extended)
Ending Head
FE = 254
Ending Sector
Ending Cylinder
Relative Sector
00000800 = 2048
07547000 = 122974208
0A61B000 = 174174208
0E0B3000 = 235614208
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:
Entry 1
Entry 2
Entry 3
Entry 4
05 (Extended)
00FA0800 = 16386048
005DB800 = 6141952
003E8000 = 4096000
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:
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.
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.
En rouge:
En surligné : La table de partition, contenant 4 entrée.
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
Taille du champ
Valeur
Nom du champ
01BE
00
Indicateur de boot:
01BF
Starting Head : 0x20 = 32 en décimal
01C0
6 bits
21
Starting Sector : 0x21 = 00100001 -> 00 100001 = 33
01C1
10 bits
Starting Cylinder : 0x00 = 00000000 -> 00 00000000 = 0
01C2
07
Type de partition. 07 signifie NTFS
http://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx
01C3
FE
Ending Head : 0xFE = 254
01C4
FF
Ending Sector : 0xFF = 11111111 -> 11111111
= 111111 = 63
01C5
Ending Cylinder : 0xFF = 11111111 -> 11 11111111 = 1111111111 = 1023
01C6
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
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)
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:
Ce qui nous donne ce petit tableau récapitulatif:
Indicateur de boot
21 * = 33
0 *
63 *
1023 *
00000800 * = 2048
07546800 * = 122972160
* *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.
Dans les articles qui suivent, nous évoquerons ces termes à maintes reprises. Autant se familiariser tout de suite avec ces termes :
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];
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
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
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
Comparaisons des disques basique et dynamiques
Différences principales (liste non exhaustive) en terme de fonctionnalités
Basiques
Dynamiques
Nombre maximal de volumes
> 4*
RAID Logiciel
Protection des volumes
Extension de volumes
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
Dans le post suivant, nous allons tenter de voir concrètement comment cela se traduit en donnée brute écrite sur les disques.
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:
Installer une application sous Terminal Server n’est pas anodin. En effet, le serveur étant multi-utilisateurs, il faut que l’application soit capable d’être utilisée simultanément par plusieurs utilisateurs. Il faut donc clairement séparer les données et paramètres communs, de ce qui ne l’est pas. Si l’application n’a pas été écrite en tenant compte de cela, les risques de plantage sont garantis.
Pour éviter ces situations, et gérer malgré tout le plus grand nombre d’applications, les différentes versions de Terminal Server font appel à un module de compatibilité, TS Compatibility, qui doit être activé à chaque installation. Cette activation se fait lors du basculement du serveur en mode « Installation » et se termine lorsque le serveur bascule de nouveau en mode « Exécution ».
En mode « Installation », selon les applications qui sont exécutées, un travail de surveillance sera effectué automatiquement ou pas. Ce qui détermine cette surveillance est la présence du flag TSAWARE ou non, dans l’entête du fichier exécutable de l’application. Pour les applications « TSAWARE », le serveur fera confiance à l’application pour gérer correctement ses paramètres et données. Pour toutes les autres applications, une capture des modifications des clés de registre, ainsi que des fichiers INI dans C:\Windows sera effectué.
2. Gestion des fichiers INI
Une copie des fichiers INI modifiés sera effectué vers un répertoire « Windows » crée dans le profil de l’utilisateur. Une modification de la variable d’environnement %WINDIR% permettra de pointer vers ce répertoire. Ainsi, si l’application référence les fichiers INI en se basant sur la variable d’environnement %WINDIR%, elle ne s’apercevra pas de la substitution et fonctionnera normalement. Dans le cas contraire, elle ouvrira la voie à tous les conflits de paramètres entre utilisateurs.
3. Gestion des clés de régistres – Les Shadow Keys
Les modifications de clés de registre provenant de HKEY_CURRENT_USER ou de HKEY_USERS\.DEFAULT seront dupliquées vers HKEY_LOCAL_MACHINE\Software\[Wow6432Node\]Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software. Ces clés de sauvegarde sont appelées les Shadow Keys. Ainsi, lorsqu’un utilisateur se connectera, selon que les clés de l’utilisateur seront plus récentes ou non que les Shadow Keys correspondantes, ces dernières seront recopiées dans le profil utilisateur.
4. Les TimeStamp
Pour déterminer s’il faut mettre à jour les clés de registre du profil utilisateur, une comparaison entre 2 TimeStamp est réalisée. A chaque Shadow Keys créée, un 1er TimeStamp contenant l’heure de cette modification est écrit dans HKEY_LOCAL_MACHINE\Software\[Wow6432Node\]Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\IniFile Times\LatestRegistryKey. Cette valeur pourra ainsi être comparée au 2ème TimeSTamp, qui contient l’heure de la dernière synchronisation entre profil utilisateur et Shadow Keys. Ce TimeSTamp est stocké pour chaque utilisateur dans HKEY_CURRENT_USER\Software\[Wow6432Node\]\Microsoft\Windows NT\CurrentVersion\Terminal Server\LastUserIniSyncTime.
Une fois la recopie démarrée, il faut savoir qu’elle n’est pas réalisée « en aveugle ». En effet, seules les clés ayant été récemment modifiées dans la Shadow Keys seront recopiées. Pour faire le tri, une nouvelle comparaison de TimeStamp est réalisée, mais cette fois avec l’attribut caché affecté à chaque clé de registre. Cet attribut caché est appliqué uniquement sur les clés, et non sur les valeurs. Ainsi donc, seules les clés contenant de réelles modification récentes seront recopiées, et dans ce cas, avec l’intégralité de leurs valeurs.
5. Cas des fermes de serveurs
Ce mécanisme pourrait être parfait, s’il n’y avait pas une petite complication : l’ajout d’un serveur TS/RDS dans une ferme de serveurs déjà existante. En effet, pour ce nouveau serveur, le TimeStamp des Shadow Keys étant forcément plus récent que celui des profils utilisateur, la synchronisation, et donc l’écrasement des clés du profil utilisateur se fera à chaque connexion d’un nouvel utilisateur de ce serveur. C’est la raison pour laquelle il est recommandé, lors de l’ajout d’un nouveau serveur qui contient des applications non TSAWARE native, de modifier la date système de celui-ci lors de l’installation des applications, afin qu’il ait une date d’installation équivalente aux autres serveurs. A la fin de l’installation, ce serveur pourra reprendre la date courante.
6. Conclusion
En conclusion, le fonctionnement des Shadow Keys a été imaginé à l’origine uniquement pour permettre à des applications mal écrites de fonctionner quand même sur un Terminal Server. Aujourd’hui, les éditeurs de logiciel sont à même d’écrire des applications certifiées TSAWARE, évitant ainsi les complications liées au Shadow Keys. Ce mécanisme devrait donc disparaitre avec le temps.
Enfin, afin que tout soit clair, voici une petite Foire Aux Questions :
Q: Ce mécanisme, est il toujours le même sous Remote Desktop Server 2012 ?
R: Oui. Ce mécanisme n’a pas changé depuis Windows Server 2003.
Q : Comment basculer en mode « Installation » puis en mode « Execution » ?
R : Pour basculer en mode « Installation », plusieurs méthodes sont possibles :
- Saisir la commande change user /install dans une invite de commande avec élévation de privilège.
- Depuis le panneau de configuration, faire Ajout/suppression de programme / Installer un nouveau programme
- Lancer l’installation d’un fichier MSI
- Exécuter un programme depuis la clé RunOnce au démarrage du serveur.
De la même façon, pour rebasculer en mode « Exécution », plusieurs méthodes :
- Saisir la commande change user /execute dans une invite de commande avec élévation de privilège
- Cliquer sur la boite de dialogue de « fin d’installation » du panneau de configuration
- Terminer l’installation d’un fichier MSI.
- Terminer l’installation du programme lancé depuis la clé RunOnce
Q : Pourquoi est-il particulièrement recommandé d’installer le rôle Terminal Service ou Remote Desktop Session Host en premier, avant d’installer toute autre application ?
R : Plusieurs bonnes raisons à cela.
- Si votre application est TSAWARE, mais ne peut pas détecter qu’elle s’installe sur un serveur TS/RDS, elle n’initialisera pas les bons paramètres, et risque même de ne pas installer les bon modules. Par exemple, les différentes versions de Microsoft Office, quand elles s’installent, n’installent pas les mêmes composants selon qu’elles sont sur un serveur TS/RDS ou sur toute autre type de machine.
- Si votre application n’est pas TSAWARE, le mécanisme des Shadow Keys ne pourra pas s’appliquer, et les risques de conflits lors de l’utilisation seront importants.
Q : Si j’ai installé plusieurs applications, et que je doive ajouter le rôle Terminal Service ou Remote Desktop Session Host sur mon serveur, que dois-je faire ?
R : Le plus simple est de commencer par désinstaller toutes les applications, redémarrer la machine, installer le rôle, redémarrer autant de fois que nécessaire, puis, installer de nouveau les applications, en basculant préalablement le serveur en mode « Installation ».
Q : Comment savoir si mon application contient le flag TSAWARE dans son entête ?
R : Il n’y a pas d’outil intégré au système permettant de vérifier cela. Toutefois, l’utilitaire dumpbin.exe, fournit avec les différentes versions de Visual Studio, le permet. Il suffit de l’exécuter avec le paramètre /headers pour afficher une liste des attributs de l’entête PE du fichier exécutable. L’attribut à chercher est : « Terminal Server Aware ».
Q : Pourquoi quand je modifie manuellement les clés de HKEY_CURRENT_USER, en mode installation, ces clés ne sont pas recopiées dans la zone Shadow Keys ?
R : Cela est très certainement dû au fait que l’outil que vous utilisez pour modifier ces clés manuellement, regedit.exe ou reg.exe, est par défaut flaggué comme étant TSAWARE. Les modifications ne sont donc pas surveillées par le serveur TS/RDS.
Q : Je voudrais utiliser le mécanisme des Shadow Keys pour modifier les profils des utilisateurs de mon serveur TS/RDS, mais les différents TimeStamp me compliquent la vie. Y aurait-il une façon simple de procéder ?
R : Oui, ne pas utiliser ce mécanisme, mais lui préférer une mise à jour par GPO.
Philippe
Windows Core Support Escalation Engineer
Quand il arrive un incident sur un cluster, la majeure partie des informations nécessaires à l’explication se trouve dans les cluster logs. Cependant, il est fréquent que la période intéressante ne soit pas couverte par le cluster log. Pour pallier à ce désagrément, il est possible de créer une tâche programmée qui génèrera les cluster logs tous les jours, couvrant les dernières 24 heures.
De cette manière, si un incident arrive vous aurez toujours à votre disposition un historique de plusieurs semaines, voire de plusieurs mois en fonction de la quantité d’information que vous désirez garder.
Voici comment il est possible de s’y prendre.
1. Importer le script powershell ci-dessous dans le répertoire de votre choix (par exemple C:\Temp\ClusterLogs) sur un des nœuds du cluster
#####################################################################################
#
# ClusterLogCollector.ps1
# version 2.0
# Serge Gourraud
# This collects cluster logs and rename them according to the date
# - It must be run under administrator
# - It must be run a on a node of the cluster
# Versions
# v2.0 : Accept arguments
# v1.1 : Add 5 minutes to the 24h to make sure we don't lose a few lines
# v1.0 : First draft
# Incoming version 2.1 : Include diagnostics started with the –verbose switch
# Checking arguments
param( [string]$Repository = "c:\temp",
[int]$History = 24,
[string]$Logfile = "Logging.txt",
[switch]$verbose = $false )
if ($Repository[-1] -eq "\"){
$LoggingFile = $Repository + $Logfile
}else {
$LoggingFile = $Repository + "\" + $Logfile}
# Adding 5 minutes to timespan to make sure we don't lose any data
$TimeSpan = $History*60+5
import-Module FailoverClusters
$ClusterLogCollection = Get-ClusterLog -Destination $Repository -TimeSpan $TimeSpan
# Get the current Date and Time
$Now = Get-Date
$strDateNow = [string]$Now.Year + "-" + $Now.Month + "-" + $Now.Day + "-" `
+ $Now.Hour + "h" + $Now.Minute
# Rename each item
if ($ClusterLogCollection.count -gt 0)
{
$strDateNow >> $LoggingFile
"Tracing for " + [string]$History + " hours" >> $LoggingFile
# Renaming items
foreach ($ClusterLog in $ClusterLogCollection)
$strDirectory = $ClusterLog.DirectoryName
$strName = $ClusterLog.Name
$strFullName = $ClusterLog.FullName
$strNewName = $strDateNow + "_" + $strName
Rename-Item -Path $strFullName -NewName $strNewName
$strNewName + " generated" >> $LoggingFile
}
else
"Failed to collect cluster logs today" >> $LoggingFile
Ce script accepte quatre arguments :
- Le répertoire ou stocker les logs
- La quantité d’infirmation à relever en heures
- Un fichier de log qui enregistre l’exécution des relevés
- Une option « verbose » non utilisée dans la version actuelle
2. Ensuite, autoriser l’exécution de scripts Powershell sur le serveur. Dans l’exemple nous choisissons la stratégie « Unrestricted », mais il est possible d’affiner d’avantage. Pour cela, se référer à l’aide en ligne de la commande Set-ExecutionPolicy.
3. Enfin créer une tâche planifiée qui lancera le script :
a. Lancer le Task Scheduler.
b. Dans le « Task Scheduler », créer une « Basic Task ».
c. Dans le menu « Create a Basic Task », entrer le nom de la tâche et une description qui permettent de l’identifier aisément, puis cliquer sur « Next ».
d. Dans le menu « Task Trigger », choisir une tâche journalière puis cliquer sur « Next ».
e. Dans le menu « Daily », choisir la fréquence et l’heure à laquelle tournera la première instance, puis cliquer sur « Next ».
f. Dans le menu « Action », choisir l’action « Start a program » puis cliquer sur « Next ».
g. Dans le menu « Start a Program » entrer le moteur de script « Powershell.exe » dans la case « Program/Script », et dans la case « Add arguments (optional) » entrer les arguments de façons à ce que le script soit lancé avec les options qui vous intéressent, puis cliquer sur « Next ».
Par exemple :
C:\Temp\ClusterLogs\ClusterLogCollector.ps1 -r C:\Temp\ClusterLogs -h 24 -l Logging.log
h. Dans le menu « Summary », cocher la case « Open the Properties dialog for this task when I click Finish », puis cliquer sur « Finish ».
i. Dans l’onglet « General », prendre soin de faire en sorte que :
i. La tâche soit exécutée même si personne n’est loguée
ii. La tâche soit exécutée sous privilèges élevés
iii. La tâche soir configurée pour Windows® 7, Windows ServerTM 2008 R2
j. Dans l’onglet « Triggers », vérifier que tout est conforme aux options choisies précédemment
k. Faites de même pour les onglets « Actions » et « Conditions »
l. Dans l’onglet « Settings », vérifier que les paramètres correspondent à votre environnement. La valeur de timeout par défaut est de 6h et pourrait être justifiée en fonction des autres tâches qui tournent, du nombre de nœud dans le cluster et de la bande passante de chacun.
m. Enfin, en cliquant sur « OK », vous devrez entrer vos credentials.
Conclusion
Au bout de quelques temps vous aurez l’inextinguible joie de découvrir un historique de cluster logs long comme le bras et dont le support est si friand !
A travers cet article, je vais tenter d’expliquer comment mettre en place le SSO (Single Sign On) pour l’utilisation de RemoteApp publiées sous RDS 2008 R2.
Pour les besoins de l’explication, je vais partir du principe que l’infrastructure en place est la suivante :
- 1 domaine : core.lab
- 1 ferme de 2 serveurs RDSH
o RDSH1.core.lab
o RDSH2.core.lab
Le nom de la ferme est RDFARM.core.lab
- 1 RD Connection Broker : RDCB.core.lab
- 1 RD Web Access : RDWA.core.lab
- 1 RD Gateway : RDGW : RDGW.core.lab
La mise en place du SSO peut se décomposer en plusieurs phases :
1) Choix des certificats
2) Génération des certificats
3) Installation des certificats sur les différentes machines
4) Paramétrage des RD Session Hosts
5) Paramétrage du RD Connection Broker
6) Paramétrage du RD Web Access
7) Paramétrage du RD Gateway
8) Créations des GPOs
1. Choix des certificats
Un ou plusieurs certificats devront être générés.
Il y a besoin de certificat pour les éléments suivants :
- Chaque serveur RD Session Host
- Le serveur RD Connection Broker
- Le serveur RD Web Access
- Le serveur RD Gateway.
Les serveurs RD Session Hosts et le serveur RD Connection Broker devront partager le même certificat.
Les serveurs RD Web Access et RD Gateway peuvent chacun avoir un certificat différent.
En conclusion, il nous faut au maximum 3 certificats différents.
Le certificat des serveurs RD Session Host et du RD Connection Broker devra comporter les indications suivantes :
CN=RDFARM.core.lab
Le certificat du serveur RD Web Access devra comporter les indications suivantes :
CN=RDWA.core.lab
Le certificat du serveur RD Gateway devra comporter les indications suivantes :
CN=RDGW.core.lab
Il est possible de n’utiliser qu’un seul certificat pour tous ces serveurs.
Il faudrait alors soit utiliser un wildcard de type *.core.lab dans le Subject Name, soit référencer les différents noms utiles, dans les champs SAN (Subject Alternative Name) du certificat.
Il est à noter toutefois que seuls les clients RDC 6.1 et au-delà peuvent faire usage de ces possibilités.
Pour l’utilisation de Subject Alternative Name dans notre exemple, il faudrait renseigner :
Subject Name :
Subject Alternative Name :
DNS= RDFARM.core.lab
DNS= RDWA.core.lab
DNS= RDGW.core.lab
On retrouve le nom RDFARM.core.lab, aussi bien dans le Subject Name que dans le Subject Alternative Name.
Cette répétition est volontaire.
Pour la suite de cet article, je vais considérer que nous allons utiliser 3 certificats différents.
2. Génération des certificats
Pour générer nos certificats, il existe 2 possibilités :
- Utiliser une autorité de certification au sein du domaine Active Directory
- Acheter vos certificats auprès de société telles que VeriSign ™, Thawte ™, et autres…
Si l’ensemble des postes clients accédant à l’infrastructure visée sont sous contrôle de votre service informatique, vous pouvez vous contenter d’utiliser votre propre autorité de certification.
En effet, si ces postes sont dans la même forêt que l’autorité de certification, il y aura une approbation automatique de celle-ci.
Dans le cas contraire, ils devront être paramétrés pour approuver cette autorité de certification, et devront avoir un accès à la CRL (Certificate Revocation List) de celle-ci.
Pour créer vos propres certificats, je vous invite à consulter cet article.
3. Installation des certificats sur les différentes machines
Une fois les certificats créés, il faut les installer sur les différents serveurs concernés.
Dans notre exemple, il s’agit des serveurs et certificats suivants :
Serveur
Certificat
RDSH1.core.lab
RDFARM.core.lab
RDSH2.core.lab
RDCB.core.lab
RDWA.core.lab
RDGW.core.lab
Cela se fait de la manière suivante :
Depuis l’un des serveurs en question, lancer une MMC en élévation de privilège, faire« Add or Remove Snap-ins ».
Choisir le snap-in « certificate »
Sélectionner« Computer Account », puis « Local Computer »
Depuis le magasin « Personal », faire « All Tasks » puis« Import… »
Sélectionner le fichier en .pfx préalablement créé, saisir le mot de passe communiqué lors de l’export de la clé privée,
Sélectionner l’emplacement du certificat dans le magasin « Personal » et faire l’import.
A la fin de l’opération, vous devez voir le certificat dans la console.
Cette opération est à refaire pour chacun des serveurs précédemment cités, avec leur certificat respectif.
4. Paramétrage des RD Session Hosts
Sur les serveurs RD Session Hosts, il y a 2 choses à configurer :
- Le protocole RDP
- Les RemoteApp
Pour le protocole RDP, cela se passe au niveau de la MMC : « Remote Desktop Session Host Configuration ».
Ouvrir les propriétés de la connexion RDP-TCP, et dans l’onglet général, cliquer sur le bouton « Select » afin de sélectionner le certificat.
Mettre le certificat choisi en surbrillance, et cliquer sur « OK »
Le certificat sélectionné sera alors affiché.
Faire OK, pour appliquer les modifications.
Concernant les RemoteApp, ouvrir la MMC « RemoteApp Manager ».
Choisir le lien « Change » à coté de « Digital Signature Settings »
Cocher la case « Sign with a digital certificate » et cliquer sur le bouton « Change».
Choisir le certificat, et valider par « Ok »
Le certificat choisi doit alors s’afficher dans l’interface, comme ceci :
Faire la même opération avec l’autre serveur RD Session Host de la ferme.
5. Paramétrage du RD Connection Broker
Sur le serveur RD Connection Broker, il y a 2 choses à configurer :
- Le certificat utilisé par le RD Connection Broker lui-même.
Pour le protocole RDP, procéder exactement de la même façon que pour les serveurs RD Sessions Hosts, à l’aide de la MMC « Remote Desktop Session Host Configuration ».
Pour le RD connection Broker, lancer la MMC « Remote Desktop Connection Manager ».
Puis, sélectionner l’option pour mettre à jour le certificat.
Cocher la case « Sign with a digital certificate » et cliquer sur le bouton «Select ».
6. Paramétrage du RD Web Access
Sur le serveur RD Web Access, il y a 2 choses à configurer :
- Le certificat utilisé par le protocole HTTPS.
Pour le protocole HTTPS, lancer la MMC « Internet Information Services (IIS) Manager ».
Se positionner sur le « Default Web Site », puis sélectionner l’option de « Binding… ».
Sélectionner ensuite le protocole HTTPS, puis le bouton « Edit… »
Il ne reste plus qu’à sélectionner le certificat à employer, et à valider.
Un redémarrage du site Web est à prévoir.
7. Paramétrage du RD Gateway
Sur le serveur RD Gateway, il y a 2 choses à configurer :
Pour le protocole HTTPS, cette fois ci, on va passer par le « RD Connection Manager »
Lancer la MMC « RD Gateway Manager ».
Choisir ensuite l’import de certificat.
Sélectionner ensuite le bon certificat, puis cliquer sur le bouton « Import », puis valider par « OK ».
8. Créations des GPOs
Les GPOs à créer sont à mettre en place pour tous les postes clients qui souhaiteront exécuter des RemoteApp en faisant du SSO.
Dans notre exemple, j’ai créé une OU « Desktop » dans laquelle j’ai déplacé tous les postes utilisateurs.
Ensuite, depuis la MMC « Group Policy Management », il faut sélectionner l’OU en question, puis sélectionner « Create a GPO in this domain, and Link it here ».
Dans notre exemple, je l’ai nommée SSO for RDS.
Faire ensuite Edit
La MMC« Group Policy Management Editor » s’ouvre alors.
Aller dans« Computer Configuration\Policies\Administrative Templates\System\Credentials Delegation »
Modifier le paramètre « Allow Delegating Default Credentials »
Selectionner« Enabled », puis cliquer sur le bouton « Show… »
Saisir ensuite le SPN pour les serveurs concernés.
Dans notre exemple , il faut saisir le nom de notre ferme.
Valider ensuite deux fois par « OK ».
Aller ensuite dans « Computer Configuration\Policies\Administrative Templates\Windows Components\Remote Desktop Connection Client »
Le paramètre à modifier est « Specify SHA1 thumbprints of certificates representing trusted .rdp publishers »
Le « thumbprint »ou « empreinte » est à récupérer sur le certificat de la ferme.
Pour cela, depuis la console certificat, choisir le certificat RDFARM.core.lab, puis dans l’onglet « Details », récupérer les données du champ« Thumbprint »
Ces données sont à recopier, de préférence sans les espaces, pour éviter les« copier/coller » malheureux.
En effet, selon ce qui est sélectionné, des caractères non affichables peuvent être inclus dans le presse-papier, et ainsi corrompre les données.
Une fois ceci fait et validé, la configuration du SSO est terminée.
Pour que la GPO soit prise en compte, ne pas oublier de fermer la MMC « Group Policy Management Editor ».
9. Utilisation du site web RD Web Access
Une dernière chose est nécessaire pour que le SSO fonctionne correctement : il faut impérativement cocher la case “J’utilise un ordinateur privé” depuis le site RD Web Access.
A l’occasion des Microsoft TechDays 2012, j’aurais à nouveau le grand plaisir de présenter une session technique traitant du troubleshooting sur la technologie cluster.
Le teaser :
Comment identifier la cause réelle des problèmes impactant un cluster de basculement Windows. (SER402)
La majeure partie du temps, le service cluster subit les défaillances qui interviennent et réagit dans la mesure des moyens qui lui sont donnés. L'objectif de cette session est de comprendre comment utiliser les traces et outils de Windows pour identifier quel composant ou quel facteur a causé un dysfonctionnement au sein d'un cluster et comment mettre en place un plan d'action visant à anticiper d'éventuels futurs problèmes..
Guillaume
Windows Core - Sr Support Escalation Engineer
Cela fait quelques temps que nous peinons à poster des bulletins sur notre blog.
Je profite donc de l'occasion pour vous annoncer que les webcasts des TechDays 2010 sont disponibles.
En particulier la notre (nous ne sommes pas peu fiers Lionel et moi tout autant que Jérôme, notre acolyte d'un jour) qui concerne les meilleures pratiques autour du clustering :
Windows Core - Support Escalation Engineer
A l’occasion des Microsoft TechDays 2010, nous aurons le grand plaisir de présenter une session technique traitant des meilleurs pratiques et de notre retour d’expérience sur la technologie cluster.
Au menu, entre autres sujets, les nouveautés de Windows Server 2008 R2, comment mettre à jour votre cluster de Windows Server 2003 ou 2008 à Windows Server 2008 R2, comprendre l’outil de validation, les actions proactives à mettre en oeuvre pour assurer la stabilité du cluster, etc…
Meilleures pratiques et retour d'expérience sur le cluster de basculement (Failover Clustering)
Le choix de la mise en place d'un cluster est guidé par le besoin de haute disponibilité mais il ne faut pas se laisser tromper par son apparente simplicité. Les ingénieurs support sont les premiers impliqués dans la gestion des incidents cluster. Venez profiter de notre retour d'expérience et de nos conseils concernant les bonnes pratiques et recommandations concernant la mise en place, le geo-clustering, l'upgrade ou l'exploitation d'une plateforme en cluster.
Nous serons pas moins de trois sur scène pour vous présenter cette session qui fait partie du parcours Windows 7 & Windows Server 2008 R2.
Tous les aficionados du cluster auront remarqué la disparition de la fonctionnalité pourtant très appréciée de partage automatique des sous-répertoires d’un partage clusterisé.
En dehors de la création manuelle de ces partages, point de salut.
Voilà une petite commande pour partager tous les sous-répertoires du répertoire courant.
FOR /F %i IN ('dir /b /a:d') DO net share %i=%CD%\%i
Si les partages doivent être cachés, la commande devient :
FOR /F %i IN ('dir /b /a:d') DO net share %i$=%CD%\%i
Explication :
dir /b /a:d renvoie la liste des répertoires contenus dans le répertoire courant
/b pour une liste simple et /a:d seulement les fichiers qui sont des répertoires (directory)
La boucle FOR va donc exécuter le code qui suit le DO pour chacune des entrées renvoyée par le dir
la commande net share permet le partage, on lui indique le nom du partage et le chemin d’accès complet au partage
%i ou %i$ sera le nom du partage (respectivement visible et caché), ce nom est le nom du répertoire lui même
%CD%\%i est la concaténation du chemin d’accès complet (répertoire actuel) et du nom du sous-répertoire à partager
Les 2 lignes de commandes citées devront être exécutées directement depuis l’invite de commande
Pour celles et ceux qui veulent inclure ces lignes dans un fichier .cmd ou .bat, voici la syntaxe à utiliser :
FOR /F %%i IN ('dir /b /a:d') DO net share %%i=%CD%\%%i
FOR /F %%i IN ('dir /b /a:d') DO net share %%i$=%CD%\%%i
le %i qui est la variable locale à notre commande doit avoir un double % pour être correctement interprétée
Le %CD% est une variable système et n’a donc pas besoin d’être doublé au niveau du %
J’ai rencontré un problème assez pénalisant en utilisant mes VMs Cluster sous Hyper-V :
Lors de chaque redémarrage de mes guest Windows 2008 pour faire des clusters virtuels, les connexions iSCSI restaient en état reconnecting. Je devais alors reconfigurer tous les initiators afin qu’ils puissent être de nouveau fonctionnel avec mon iSCSI Target.
J’ai utilisé une solution de contournement avec la clef de registre EnablePMTUDiscovery = 1 dans HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Maintenant, mes VMs se reconnectent correctement suite à leur reboot.
Note : Cette solution de contournement peut affecter les performances TCP et n’est valable que dans le cadre de testing…
Lien Technet
http://technet.microsoft.com/en-us/library/cc957539.aspx
La liste suivante décrit les paramètres que vous pouvez utiliser avec cette valeur du registre :
1 : Lorsque vous définissez EnablePMTUDiscovery sur 1, TCP tente de découvrir la taille de l'unité MTU (Maximum Transmission Unit ) ou la taille de paquet la plus élevée sur le chemin d'accès à un hôte distant. TCP peut éliminer la fragmentation sur les routeurs sur le chemin d'accès qui connecte des réseaux à différentes unités MTU, en découvrant l'unité MTU du chemin et en limitant les segments TCP à cette taille. Inversement, la fragmentation affecte le débit TCP.
0 : Nous vous recommandons de définir EnablePMTUDiscovery sur 0. Ainsi, une unité MTU de 576 octets est utilisée pour toutes les connexions qui ne sont pas des hôtes sur le sous-réseau local. Si vous ne définissez pas cette valeur sur 0, un attaquant peut forcer la valeur de l'unité MTU à une très petite valeur et ainsi surmener la pile.
Lionel
Le premier bulletin de cette série traitera de la gestion de la mémoire.
La gestion de la mémoire est un facteur crucial au sein d’un système d’exploitable.
Dans le monde de la virtualisation, le mécanisme visant à gérer les allocations mémoire est d’autant plus complexe et coûteux qu’il faut prendre en compte deux niveaux de mémoire alors qu’un système traditionnel n’en a qu’un seul (d’un point de vue très simplifié).
Gestion de la mémoire sur un système classique
Sur un système Windows classique, il y a une notion de mémoire physique et une notion de mémoire virtuelle.
Le système alloue un espace mémoire au kernel et un espace mémoire au mode user dans ce que l’on appelle la mémoire virtuelle. Cette mémoire virtuelle est adressée dans la mémoire physique et la mémoire paginée (le pagefile).
Sur un système 32 bit, cet espace mémoire virtuel alloue par défaut 2GB au kernel et 2GB au mode user (avec le /3GB : 1GB pour le kernel et 3GB pour le mode user).
Sur un système 64 bit, la répartition est de 8TB pour le kernel et 8TB pour le mode user.
Dans les deux cas, même si la mémoire physique disponible est inférieure à 4GB.
Une partie du travail du Memory Manager est donc de traduire les adresses virtuelles en adresses physiques (qui se trouvent soit en mémoire physique soit dans le pagefile).
Gestion de la mémoire sur un système virtualisé
Sur un système où un hypervisor s’exécute, on retrouve un niveau de mémoire supplémentaire : la mémoire allouée aux machines virtuelles et vue par celles-ci comme de la mémoire physique.
Et c’est là où ça se complique un peu et où il est nécessaire d’utiliser tout un jeu d’acronymes barbares pour comprendre ce que doit assumer l’hypervisor:
Ces espaces sont représentés d’une autre manière dans le schéma ci-dessous :
Dans cette situation, le système d’exploitation s’exécutant dans la machine virtuelle traduit les adresses mémoires virtuelles (GVA) en adresses mémoires “physiques” (GPA) et l’hypervisor va traduit les adresses “physiques” des pages mémoires (GPA) de la machine virtuelle en adresses physiques réelles (SPA).
Ce qui correspond au schéma ci-dessous :
La translation d’adresse GPA vers SPA est donc prise en charge par l’hypervisor. C’est une solution de translation d’adresse logicielle.
Dans le détail, le processeur maintient une liste de correspondance des adresses de la mémoire virtuelle (GVA) utilisées par les machines virtuelles avec la mémoire physique (SPA) dans ce qu’on appelle un Translation Looksaside Buffer (TLB). Lorsque la machine virtuelle tente d’accéder à une donnée ou une fonction qui est référencée par une adresse virtuelle mais que cette adresse virtuelle ne correspond à aucun contenu cela résulte en une faute de page (Page Fault). Cette faute de page est interceptée par l’hypervisor qui charge en mémoire la donnée ou la fonction et établit la translation d’adresse en spécifiant l’adresse physique dans la page TLB.
Comme on peut le comprendre, comme toute opération traitée par du logiciel, cette tâche de translation d’adresse est consommatrice en temps CPU. Bien plus que par du microcode embarqué dans du silicium.
C’est ce que nous appellons Second Level Address Translation (SLAT).
Prise en charge de la translation d’adresse par le CPU
J’en viens alors au premier avantage qu’apportent les nouvelles fonctionnalités d’AMD et d’Intel® : le déport de cette mécanique de l’hypervisor vers le CPU.
Les deux fondeurs utilisent une terminologie différente mais le principe est le même, et cela permet de libérer l’hypervisor de cette tâche lui donnant plus de temps pour effectuer des actions plus importantes sinon plus utiles.
Cette fonctionnalité mise en oeuvre par les CPUs est supporté par Hyper-V v2 disponible avec Windows Server 2008 R2.
Ressources
KB555223 - RAM, Virtual Memory, Pagefile and all that stuff Virtual Address Space (WO/2007/073624) VIRTUAL TRANSLATION LOOKASIDE BUFFER (World Intellectual Property Organisation, en Anglais) The very first independent Nested Paging Virtualization tests (Anandtech - AMD Nested Pagaing benchmark) Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2 (en Anglais) – Extended Page Tables, chapitre 25.2 AMD-V™ Nested Paging Rapid Virtualization Indexing with Windows Server 2008 R2 Hyper-V Guest Post: Intel Inside for Hyper-V Virtualization PDC 2008: Virtualization, An overview of the hardware features that give rise to world-class virtualization and cloud computing
KB555223 - RAM, Virtual Memory, Pagefile and all that stuff
Virtual Address Space
(WO/2007/073624) VIRTUAL TRANSLATION LOOKASIDE BUFFER (World Intellectual Property Organisation, en Anglais)
The very first independent Nested Paging Virtualization tests (Anandtech - AMD Nested Pagaing benchmark)
Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2 (en Anglais) – Extended Page Tables, chapitre 25.2
AMD-V™ Nested Paging
Rapid Virtualization Indexing with Windows Server 2008 R2 Hyper-V
Guest Post: Intel Inside for Hyper-V Virtualization
PDC 2008: Virtualization, An overview of the hardware features that give rise to world-class virtualization and cloud computing
Objectif:
Nativement, le service Cluster maintient sa configuration en copiant sur tous les nœuds du Cluster la Hive Cluster. Cette Hive (une ruche en anglais) se situe dans HKLM\Cluster et contient tous les paramètres des ressources du Cluster. C'est-à-dire que les ressources utilisées dans le Cluster stockent leurs paramètres et propriétés dans cette Hive (@IP, nom du Network Name, chemin d’un File share , etc). On retrouve également une copie de cette Hive sur le disque du Quorum (Q:\MSCS) sous la forme d’un fichier CHKxxx.tmp.
Mais si une application clusterisée n’utilise pas la section HKLM\Cluster pour y stocker ses données, comment les autres nœuds peuvent recevoir ce contenu ?
Le registry Checkpointing dans un cluster a pour objectif de propager le contenu d’un bout de base de registre qui ne serait pas localisée dans HKLM\Cluster mais dans HKLM\Software, là où les applications enregistrent généralement leurs données.
Des fichiers 0000000x.CPT présents sur le disque du quorum représentent le contenu de base de registre qui sont à sauvegarder et donc a propager lorsque ces ressources basculent d’un nœud à un autre. Ils sont organisés comme suit :
ü 0000000x.CPT représente un checkpoint registry pour une ressource.
ü Il sont stockés sur le disque du Quorum comme ceci : Q:\MSCS\<GUID>\ Q : étant le disque du Quorum et MSCS le répertoire par défaut
ü Il sont stockés sur le disque du Quorum comme ceci : Q:\MSCS\<GUID>\
Q : étant le disque du Quorum et MSCS le répertoire par défaut
<GUID> est le GUID de la ressource nécessitant un checkpoint registry et que nous retrouvons dans HKLM\Cluster\GUID.
Ce principe est utilisé par SQL ou des applications génériques par exemple.
Ressources en ligne:
How a Server Cluster Works: http://technet2.microsoft.com/WindowsServer/en/library/4aa0be73-ef61-4f9c-a071-b390278b47731033.mspx?mfr=true
Checkpointing http://msdn2.microsoft.com/en-us/library/aa367195.aspx
ClusterRecovery tool: http://www.microsoft.com/downloads/details.aspx?familyid=2BE7EBF0-A408-4232-9353-64AAFD65306D&displaylang=en
Knowledge Base:
Restore registry check points stop working after you restore a server cluster
http://support.microsoft.com/default.aspx?scid=kb;EN-US;307469
174070 Registry replication in Microsoft Cluster Server
http://support.microsoft.com/default.aspx?scid=kb;EN-US;174070
Règles relatives au checkpoint Registry
cluster . /checkpoints
Ajouter un Checkpoint au Cluster
cluster . resource "< Nom de la ressource >" /addcheckpoints:"\Software\...”
Supprimer un Checkpoint au Cluster
cluster . resource "< Nom de la ressource >" /removecheck :"\Software\...”
Mise en situation :
Imaginons que nous avons créé une application Client/Serveur ‘Onyone’ dont les données de registre sont stockées sous HKLM\Software\Onyone et HKLM\Software\Onyone2. Nous souhaitons la mettre dans un cluster sous forme d’application générique afin d’offrir aux utilisateurs une haute disponibilité. Pour assurer la copie des clefs précédentes, nous allons ajouter à l’aide de la commande CLUSTER.EXE, deux checkpoints sur la ressource Network Name ‘Network Name DATA’ de cette application.
C:\>cluster resource "Network Name DATA" /addcheckpoints:"SOFTWARE\Microsoft\onyone" Adding registry checkpoint 'SOFTWARE\Microsoft\onyone' for resource 'Network Name DATA'...
C:\>cluster resource "Network Name DATA" /addcheckpoints:"SOFTWARE\Microsoft\onyone2" Adding registry checkpoint 'SOFTWARE\Microsoft\onyone2' for resource 'Network Name DATA'...
Regardons maintenant la prise en compte de ces commandes :
C:\>Cluster . resource /checkpoints No resource name specified.
Listing registry checkpoints for all resources... Resource Registry Checkpoint -------------------- -------------------------------------------------------- Quorum Disk None Cluster IP Address None Cluster Name None Disk P: None IP File Share None Network Name DATA 'SOFTWARE\Microsoft\onyone' Network Name DATA 'SOFTWARE\Microsoft\onyone2' File Share None
Listing registry checkpoints for all resources...
Resource Registry Checkpoint -------------------- -------------------------------------------------------- Quorum Disk None
Cluster IP Address None
Cluster Name None
Disk P: None
IP File Share None
Network Name DATA 'SOFTWARE\Microsoft\onyone'
Network Name DATA 'SOFTWARE\Microsoft\onyone2'
File Share None
Sur le disque du quorum, nous retrouvons dans le répertoire \MSCS (par défaut), un nouveau répertoire qui a été créé et ayant le GUID de la ressource concernée et contenant deux fichiers CPT :
Ce GUID est peut être retrouvé dans la clef HKLM\Cluster.
La HCL , WSC ou matrice de compatibilité Cluster, ça vous dit quelque chose?
Mais si, ce sont ces fameuses listes qui répertorie l'ensemble des élements composant une solution Cluster 2000/2003. L'ennui est qu'il est difficile de trouver sa configuraiton et les matériels et logiciels évoluant, elle n'est pas forcement à jour. C'est pour cela que je vous ai regroupé différents pointeurs vers les OEM les plus connus pour limiter les spectres de vos recherches. Si vous avez un doute sur la compatibilité de votre matériel avec le MSCS, il est facile de demander à votre OEM le lien vers vers votre solution en place.
Et pour Failover Cluster 2008 et 2008 R2? et bien, c'est beaucoup plus simple : il suffit que vos composants (hosts, HBA, SAN et softtware) aient reçus le logo Certified for Windows Server 2008 ou Certified for Windows Server 2008 R2 et que les tests de Validate passent avec succès. That's All!
The Microsoft Support Policy for Windows Server 2008 Failover Clusters : http://support.microsoft.com/kb/943984
Peu de choses à relever pendant ce mois de Septembre, les groupes Windows et Virtualisation fourbissent leurs armes pour le 23 Octobre, date de sortie générale de Windows 7 et Windows Server 2008 R2.
Du côté de la mobilité, Windows Mobile 6.5 pointera son nez début Octobre…
Bref, le calme avant la tempête ? L’avenir nous le dira.
Infrastructure Planning and Design Guide for Windows Server Virtualization
Mis à jour pour Windows Server 2008 R2. Téléchargement : IPD Guide for Windows Server Virtualization
Mis à jour pour Windows Server 2008 R2.
Téléchargement : IPD Guide for Windows Server Virtualization
Infrastructure Planning and Design Guide for System Center Virtual Machine Manager 2008 R2
Lien : Infrastructure Planning and Design Guides for System Center
Outils de support, d’analyse de performances et de charge
Une liste intéressante d’outils pouvant être utilisés pour estimer ou planifier la charge sur vos serveurs. A priori orienté vers Hyper-V, le bulletin sur le blog du EEC liste des ressources exploitables dans plusieurs cas de figure. Lien : Hyper-V Support, Performance and Load Tools - The Enterprise Engineering Center Blog
Une liste intéressante d’outils pouvant être utilisés pour estimer ou planifier la charge sur vos serveurs. A priori orienté vers Hyper-V, le bulletin sur le blog du EEC liste des ressources exploitables dans plusieurs cas de figure.
Lien : Hyper-V Support, Performance and Load Tools - The Enterprise Engineering Center Blog
Le Datacenter de Dublin en mode décapotable ?
Non seulement ce centre de traitement est le plus grand Datacenter Microsoft en dehors des Etats-Unis mais surtout il met en oeuvre la vision décrite précédemment dans la newsletter de Fevrier. A savoir les Datacenter de 4ème génération que je ne pensais pas voir si tôt. Pour la petite histoire, ce Datacenter hébergera les services du Cloud, Live et Microsoft Online. Lien : Dublin Data Center Celebrates Grand Opening
Non seulement ce centre de traitement est le plus grand Datacenter Microsoft en dehors des Etats-Unis mais surtout il met en oeuvre la vision décrite précédemment dans la newsletter de Fevrier. A savoir les Datacenter de 4ème génération que je ne pensais pas voir si tôt.
Pour la petite histoire, ce Datacenter hébergera les services du Cloud, Live et Microsoft Online.
Lien : Dublin Data Center Celebrates Grand Opening
Un paquet de ressources IBM
Suite à la mise à disposition du Microsoft Assesment Planning Tool, IBM nous gate en éditant la version adaptée à ses systèmes. En bonus, quelques liens techniques.
Suite à la mise à disposition du Microsoft Assesment Planning Tool, IBM nous gate en éditant la version adaptée à ses systèmes.
En bonus, quelques liens techniques.
Lien : Microsoft System Management Solutions for IBM Servers
Quelques outils qui accompagnent Windows 7
Bien avant la date butoir, l’équipe en charge de développer la version de Microsoft Deployment Toolkit 2010 a publié la version finale dernièrement. Quelques changements ont été apportés à l’interface d’administration (le Workbench) et des améliorations disséminées un peu partout mais le principe reste le même. Cet outil reste un incontournable du déploiement. Téléchargement : Microsoft Deployment Toolkit (MDT) 2010 Utiles et indispensables, les outils d’administration à distance pour Windows 7. Téléchargement : Remote Server Administration Tools for Windows 7
Bien avant la date butoir, l’équipe en charge de développer la version de Microsoft Deployment Toolkit 2010 a publié la version finale dernièrement. Quelques changements ont été apportés à l’interface d’administration (le Workbench) et des améliorations disséminées un peu partout mais le principe reste le même. Cet outil reste un incontournable du déploiement.
Téléchargement : Microsoft Deployment Toolkit (MDT) 2010
Utiles et indispensables, les outils d’administration à distance pour Windows 7.
Téléchargement : Remote Server Administration Tools for Windows 7
De quoi préparer la migration de Windows XP à Windows 7 en préservant ses données. Téléchargement : Windows Easy Transfer for transferring from Windows XP to Windows 7
De quoi préparer la migration de Windows XP à Windows 7 en préservant ses données.
Téléchargement : Windows Easy Transfer for transferring from Windows XP to Windows 7
Security Essentials disponible
La suite de protection anti-virus gratuite remplaçant OneCare et ayant pour nom de code Morro est disponible en version finale. Lien : Microsoft Security Essentials
La suite de protection anti-virus gratuite remplaçant OneCare et ayant pour nom de code Morro est disponible en version finale.
Lien : Microsoft Security Essentials
Par curiosité personnelle et un peu professionnelle, je me suis intéressé depuis quelques temps à tout ce sur quoi repose Hyper-V pour fonctionner et fournir une plateforme de virtualisation performante.
Au fil de mes recherches et au vu du nombre de sujets à aborder, il m’a paru intéressant de reporter ce que j’ai pu comprendre dans une série de bulletins visant à démontrer que l’implémentation d’une plateforme de virtualisation ne reposait pas uniquement sur le choix du logiciel mais également sur le choix du matériel. En l’occurrence, le processeur, le chipset et les adaptateurs réseau.
La question amenée par cette série de bulletins ne se porte surtout pas sur le choix d’un fondeur particulier, AMD ou Intel®, mais plutôt sur le choix de l’anticipation.
Anticipation quant à la sélection des composants embarqués dans les serveurs que vous dédierez à la virtualisation avec les génération d’hypervisors à venir (bon… Hyper-V v2, on est d’accord ?).
Jusqu’à présent le choix des serveurs se limitait aux notions évidentes de performance et de capacité de leurs composants :
Tous ces critères restent valables pour la majorité des rôles endossés par la plupart des serveurs mais la virtualisation amène des nuances non négligeables qui peuvent faire la différence en terme de performances.
Il se peut cependant que j’enfonce des portes ouvertes étant donné que beaucoup de constructeurs de serveurs proposent déjà largement les technologies d’Intel® et d’AMD dans leurs plateformes. L’intérêt de ce bulletin et de ceux à venir consistera donc à mieux comprendre la forte adhérence du matériel avec les solutions de virtualisation.
Je tenterais de décrire dans cette série les produits et technologies d’AMD et d’Intel® listés ci-après et en expliquer les intérêts pour Hyper-V :
Intel® Processeurs de la série Intel® Xeon® 5500
AMD Processeurs de la série AMD Opteron™ Quad-Core
Mais, tout d’abord, en guise d’introduction et pour bien comprendre l’intérêt de considérer différemment les plateformes de virtualisation des autres systèmes, une petite explication sur ce que représente le matériel pour les hypervisors que nous connaissons.
Le terme “hypervisor” étant barbare, je pourrais également utiliser le terme “VMM” (Virtual Machine Monitor) tout au long de ces bulletins.
Hardware-Assisted Virtualization (la virtualisation assistée par le matériel)
La virtualisation n’est pas un concept nouveau… loin de là. Ce n’est que ces dernières années que le sujet est revenu à l’ordre du jour avec l’accroissement massif du nombre de serveurs et le besoin de revenir vers des prétentions plus réalistes.
En effet, le principe de la virtualisation a déjà été abordé par IBM au début des années 1980 avec l’IBM VM/370 puis le System/370-XA qui tentaient de répondre (ou répondaient) aux besoins amenés par l’hébergement de plusieurs systèmes sur un seul hôte physique : la gestion des I/Os et la gestion de la mémoire.
Ensuite, après le large déferlement du processeur x86 sur le monde, ce fut au tour d’AMD et d’Intel® d’implémenter dans leurs processeurs des fonctions permettant aux acteurs actuels du logiciel de proposer leur hypervisor.
Mais en quoi cela consiste ? Rien de bien compliqué… Juste l’ajout d’instructions spécifiques dans les processeurs permettant la mise en oeuvre d’un VMM sur une plateforme matérielle.
Ce VMM a alors pour tâches de gérer l’exécution des machines virtuelles, de leur allouer un espace mémoire et de leur permettre l’accès aux périphériques matériels. Je reviendrais plus tard sur chacun de ces aspects.
Ca ne paraît rien comme ça mais ces quelques instructions ont permis (dans le monde des processeurs AMD et Intel®) de faire basculer notre conception des plateformes systèmes.
Les deux schémas ci-dessus permettent d’illustrer la différence entre une plateforme serveur classique et une plateforme virtualisée.
Je n’ai repris qu’un seul modèle d’hypervisor (qui cible les environnements de production) sur lequel s’appuie Hyper-V. Ce modèle, qui s’appelle Type 1 ou Bare-Metal, s’appuie pour sa part sur les technologies de virtualisation des deux fabricants pour fonctionner : Intel® VT (Intel® Virtualization Technology) pour l’un, AMD-V™ (AMD-Virtualization™) pour l’autre.
Virtualization for dummies – AMD Special Edition - PDF en anglais, pour les débutants !
Hardware Support for Efficient Virtualization - John Fisher-Ogden (University of California, San Diego) – Document en anglais donnant un aperçu assez global de la virtualisation.
Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z – Document en anglais plus pointu où l’on peut retrouver le détail des instructions implémentées pour la virtualisation (chapitre 5).
A suivre…
C’est la première fois que je rencontre ce cas de figure et c’est presque un coup de chance qui m’a permis d’identifier la solution à ce problème.
Le contexte est le suivant : sur un cluster Windows Server 2008 deux noeuds, lorsque l’on passe la ressource IP Address offline ou que l’on forçe un failover du groupe contenant cette ressource il n’est plus possible de contacter le noeud qui détenait cette ressource à travers le réseau. Encore moins d’ouvrir une session en Remote Desktop.
Comportement qui laisse sceptique au début et qui relève de la magie lorsqu’on nous le montre…
En une images, la configuration simple pour reproduire ce comportement :
Trois réseaux (le problème apparaît avec deux voir un seul réseau) :
Une ressource IP Address disposant de l’adresse IP 192.168.40.33
Les addresses IP des noeuds étant :
Après les quelques vérifications d’usage autour de la configuration des adaptateurs réseau de chaque noeud, nous avons vérifié la présence de paramétrages de routage spécifique, propre aux serveurs. Et il s’est avéré qu’une route statique avait été rajoutée sur chacun des noeuds.
Et c’est là que l’on pointe un sujet méconnu : l’adaptateur virtuel nommé Microsoft Failover Cluster Virtual Adapter.
La question est donc qu’est-ce que cet adaptateur et à quoi sert-il ?
En peu de mots, le code du cluster sous Windows Server 2008 a été en grande partie réécrite et la couche réseau en a bénéficié. Ce qui se traduit par l’apparition de cet adapateur qui a pour tâche de construire et de maintenir une structure de routage sur chacun des noeuds afin d’améliorer la connectivité réseau en cas de défaillance de l’un des adaptateur réseau.
C’est cette nouveauté qui permet de placer des noeuds d’un même cluster sur des sous-réseaux différents séparés par des routeurs, ce qui n’était pas possible avec Windows 2000 Server et Windows Server 2003.
Mais revenons à notre problème.
Sur ces deux serveurs, une route statique a été configurée, comme on peut le voir sur les captures d’écran ci-dessous :
LAB-WS08-SQL0
LAB-WS08-SQL1
On voit ici que cette route s’applique à tous les adaptateurs.
En rouge la route statique.
En bleu, l’adresse IP du noeud.
En vert l’adresse IP de la ressource IP Address du cluster.
Notez ce qui est entouré de jaune.
Lorsque l’on bascule la ressource IP Address ou que l’on passe offline cette ressource, la route statique du noeud disparait de la table de routage (du moins elle ne fait plus partie des routes actives) :
Ce qui rend impossible la connectivité vers et depuis le réseau 192.168.42.0 (le sous-réseau qui fait l’objet du routage statique).
Comment résoudre ce problème et utiliser tout de même un routage statique ? C’est simple, mettre en oeuvre le routage statique de manière recommandée, à savoir suivre la procédure suivante :
On obtient ceci :
Table de routage avec la ressource IP Address online
Table de routage avec la ressource IP Address offline
On voit ici que la route statique reste active même lorsque la ressource IP Address est offline.
Meilleures pratiques
Rendons à César ce qui appartient à César, le bulletin qui m’a permis de résoudre cet incident : Active Route gets removed on Windows Server 2008 offline Cluster IP Address – Blog Microsoft Enterprise Networking Team
What is a Microsoft Failover Cluster Virtual Adapter anyway? – Blog de l’équipe Core aux US
Multi-Site Failover Cluster Communications Connectivity – Blog de l’équipe Core aux US