Sauvegarde Automatisée de VM sous HyperV version pdf

Transcription

Sauvegarde Automatisée de VM sous HyperV version pdf
Sauvegarde automatisée de VM sous HyperV !!!
Un sujet plutôt obscur …
La solution de virtualisation de Microsoft, HyperV (aujourd’hui en v1) est très puissante et rivalise
avec les ténors comme la solution ESXi de VMWare.
Ici pas de débat sur les produits, mais des astuces.
Pour ceux qui s’y sont essayé … HyperV n’offre pas de solutions de sauvegarde automatisée des
Machines Virtuelles qui tournent (je mens un peu … car il possible d’utiliser WSB (Windows Server
Backup) en modifiant le registre, cependant les possibilités sont restreintes et contraignantes ! (je ne
citerai que la réservation d’un disque pour que la solution fonctionne…))
La seul solution officielle est bien sur DPM 2007 SP1 (+ RollUP) : très puissant mais surdimensionné
pour la PME PMI.
Nous allons donc voir ici comment remédier à cela en utilisant tous les outils fournis par Microsoft en
standard dans Windows Serveur 2008 (notamment DiskShadow et le VSS Writer d’Hyper-V …)
Allé c’est parti !
Tout d’abord les pré-requis :
Au menu un certain nombre de KB …
1 - KB967902 (elle n’a pas l’air comme ca mais en faite si elle n’est pas appliqué 1 an après
l’installation d’HyperV on ne peut plus lancer les VM … le certificat SSL devient périmé !)
http://support.microsoft.com/?scid=kb;en-us;967902&x=17&y=15
2 - KB958316 (règle les problèmes lors de la manipulation des GUID des VM)
http://support.microsoft.com/?scid=kb;en-us;958316&x=18&y=9
3 - KB960038 (pour ceux qui auraient un plantage pendant les sauvegardes ou des erreurs avec
vds.exe (à appliquer au cas ou …))
http://support.microsoft.com/?scid=kb;en-us;960038&x=11&y=8
4 - KB959962 (LA PLUS IMPORTANTE … celle que l’ont attendait depuis l’année dernière (et qui est
arrivée le 16 Janvier))
http://support.microsoft.com/?scid=kb;en-us;959962&x=12&y=13
Note 1
Juste pour information sans cette KB d’appliquée même DPM 2007 SP1 n’est pas capable de
sauvegarder les VM à chaud … (et oui DPM 2007 SP1 était disponible depuis le 19 Décembre 2008
mais n’a été complètement opérationnel qu’à partir du 16 Janvier …)
Cette KB met à jour Vmms.exe (ainsi que les dll associées) mais surtout met à jour le VMGuest.iso
(Les services d’intégration pour les VM (Integration Services))
Note 2
Si jamais ces KB ne sont pas installées vous aurez ce type d’erreurs dans les journaux d’événements
(erreurs avec lesquelles je me suis battu pendant 1 an …)
ID 1000
Application défaillante vmms.exe, version 6.0.6001.18016, horodatage 0x484fc22e, module
défaillant unknown, version 0.0.0.0, horodatage 0x00000000, code d’exception 0x00000000,
décalage d’erreur 0x0000000000000000, ID du processus 0x6c4, heure de début de l’application
0x01c9773af7d5cdc4.
ID 4354
Le système d'événements de COM+ n'a pas pu déclencher la méthode PostSnapshot de
l'abonnement {82294CA2-FD15-4A52-A8BB-1C071A653B31}-{00000000-0000-0000-0000000000000000}-{00000000-0000-0000-0000-000000000000}. L'abonné a renvoyé HRESULT
80010105.
Ou
Le système d'événements de COM+ n'a pas pu déclencher la méthode RequestWriterInfo de
l'abonnement {E8F22499-7157-4AE9-B40B-4946B6A158C5}-{00000000-0000-0000-0000000000000000}-{00000000-0000-0000-0000-000000000000}. L'abonné a renvoyé HRESULT
80042318.
ID 12366
Une exception non gérée a été rencontrée lors du traitement du rappel d’événement d’un
enregistreur VSS. L’infrastructure de l’enregistreur VSS est dans un état instable. Le processus
d’hébergement de l’enregistreur doit être redémarré en vue de récupérer la fonctionnalité VSS.
Maintenant passons à l’installation :
On install dans cet ordre, une fois les 4 KB d’installées on redémarre le serveur.
Coté Windows Serveur 2008 HyperV on est à jour.
Il faut maintenant réinstaller les services d’intégration (vmguest.iso) dans chaque VM hébergées sur
le serveur concerné, puis redémarrer chaque VM.
Nous sommes à jour ! Nous allons pouvoir mettre en place nos sauvegardes.
Du coté des VM, rien à faire, il faut juste que les composants d’intégration soient à jour, tout va se
faire sur le Windows Serveur 2008 avec le rôle Hyper-V.
Notre procédure de sauvegarde repose sur DiskShadow.exe (l’équivalent de vshadow.exe présent
dans SDK de VSS pour ceux qui faisaient déjà des sauvegardes scriptées avec Virtual Serveur 2005 R2)
Alors regardons un peu comment ca se passe, nous allons lancer un cmd en tant qu’administrateur et
taper diskshadow
LIST WRITERS : listes tous les Writers VSS disponibles (équivalent de la commande VSSAdmin List
Writers) mais ici c’est la version ultra détaillée !!
Ci-dessous la liste des Writers que vous devriez avoir par default de disponibles (sans applications
tierces d’installées)
Vous l’aurez compris, celui qui nous intéresse c’est Microsoft Hyper-V VSS Writer !
Les autres commandes vont nous permettre de gérer nos sauvegardes.
La procédure de sauvegarde
Elle se compose de 4 batch et d’1 script diskshadow.
Le tout se trouve dans le répertoire C:\HyperV (ce répertoire sera pris pour base dans l’explication
des batch suivant)
Nous allons avoir :
1) Un batch pour l’exécution générale qui fera appel aux autres batch (et au script
diskshadow)
2) Un batch pour la gestion de la maintenance
a. Suppression d’anciennes sauvegardes
b. Gestion d’un jeu de roulement de sauvegardes
c. Etc
3) Un batch pour la gestion des exports des sauvegardes des VMvers une destination
choisie
4) Un batch pour la l’export de la partition système hyperV à l’aide d’imagex
Détail des batch :
1 - HyperV.cmd
FOR /F "TOKENS=1* DELIMS= " %%A IN ('echo %date%') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('echo %date%') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ eol= " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET dateStamp=%mm%%dd%%yyyy%
c:
cd HyperV
Echo %date% %time% >>c:\HyperV\logs\%dateStamp%_%computername%_HyperV.log
diskshadow /s c:\HyperV\HyperV_step.dsh
>>c:\HyperV\logs\%dateStamp%_%computername%_HyperV.log
Echo %date% %time% >>c:\HyperV\logs\%dateStamp%_%computername%_HyperV.log
Explications :
La première partie reformate la date pour pouvoir être exploité dans le nom des fichiers de logs
générés pendant la sauvegarde.
La deuxième nous positionne dans le répertoire correct ou se trouve nos batch.
La troisième et cinquième partie injecte dans les logs l’heure de début et de fin de notre sauvegarde
et tag correctement nos fichiers de logs.
La quatrième partie appel le script diskshadow et envoi les étapes effectuées par le script dans les
logs.
2 - HyperV_STEP.DSH
DELETE SHADOWS ALL
SET CONTEXT PERSISTENT
SET METADATA c:\HyperV\cab\Backup.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C: ALIAS Shadow1
ADD VOLUME D: ALIAS Shadow2
ADD VOLUME E: ALIAS Shadow3
ADD VOLUME F: ALIAS Shadow4
WRITER VERIFY {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}
CREATE
EXEC C:\HyperV\backup_maintenance.cmd
EXPOSE %Shadow1% X:
EXEC C:\HyperV\ backup_imagex.cmd
UNEXPOSE X:
EXPOSE %Shadow2% X:
EXEC C:\HyperV\ backup_export.cmd
UNEXPOSE X:
EXPOSE %Shadow3% X:
EXEC C:\HyperV\ backup_export.cmd
UNEXPOSE X:
EXPOSE %Shadow4% X:
EXEC C:\HyperV\ backup_export.cmd
UNEXPOSE X:
END BACKUP
Explications :
DELETE SHADOWS ALL : on supprime toutes les shadows copy précédentes (on ne le fait pas à la fin,
comme ca on garde les shadows copy jusqu’à la prochaine sauvegarde (si jamais on doit manipuler
les shadows copy au moins elles seront déjà sur le système))
Note : votre serveur Hyper-V ne gère que des VM, attention s’il est serveur de fichiers et que vous
utilisez les clichés instantanés sur vos partages réseaux (pour le vertioning) (tous les clichés seront
supprimés à l’exécution de cette commande)
SET CONTEXT PERSISTENT
SET METADATA c:\HyperV\cab\Backup.cab
SET VERBOSE ON
BEGIN BACKUP
Ces commandes préparent l’environnement de sauvegarde
ADD VOLUME C: ALIAS Shadow1
ADD VOLUME D: ALIAS Shadow2
ADD VOLUME E: ALIAS Shadow3
ADD VOLUME F: ALIAS Shadow4
Ici nous ajoutons les volumes que nous voulons sauvegarder (mon système est sur le C et j’ai une VM
sur chaque partition D E et F)
WRITER VERIFY {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}
Nous vérifions que le VSS Writer d’Hyper-V est bien disponible (vous vous souvenez il était dans la list
VSSAdmin list writers) s’il n’est pas disponible la sauvegarde sera annulée.
CREATE : c’est parti, on lance la création de tous les volumes ajoutés précédemment.
EXEC c:\HyperV\backup_maintenance.cmd : on fait appel au batch de maintenance pour la
suppression des anciennes sauvegardes etc etc
EXPOSE %Shadow1% X:
EXEC c:\HyperV\backup_imagex.cmd
UNEXPOSE X:
On expose la shadow copy du système C : et on fait appel au batch d’export au format wim vers la
destination choisie.
EXPOSE %Shadow2% X:
EXEC c:\HyperV\backup_export.cmd
UNEXPOSE X:
Et maintenant on expose la shadow copy sur un lecteur disponible (dans l’exemple X:\ ), puis on fait
appel au batch d’export vers la destination choisie et enfin on retire l’exposition de la shadow copy
pour passer à la VM suivante.
Vous l’avez compris ces 3 lignes sont exécutées autant de fois qu’il y a de VM à sauvegarder (si vos
VM sont bien cloisonnées sur une partition indépendante à chaque fois) (si vos VM sont sur une
seule partition (déjà renvoyé votre implémentation) mais tout sera sauvegardé en une fois).
END BACKUP : pour terminer la sauvegarde et libérer les divers locks lancés par diskshadow
3 - BACKUP_MAINTENANCE.cmd
FOR /F "TOKENS=1* DELIMS= " %%A IN ('echo %date%') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('echo %date%') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ eol= " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET dateStamp=%mm%%dd%%yyyy%
Echo %date% %time% >> c:\HyperV\logs\%dateStamp%_%computername%_maint.log
rd /s /q s:\%computername%-OLD
ren s:\%computername% %computername%-OLD
Echo %date% %time% >> c:\HyperV\logs\%dateStamp%_%computername%_maint.log
La première partie formate la date comme vu tout à l’heure.
La deuxième et quatrième partie gèrent les fichiers de logs comme vu tout à l’heure.
La troisième partie gère ici un roulement sur 2 jours, la sauvegarde d’il y a 2 jours est supprimée,
celle de la veille est renommée en –OLD et nous sommes prêt à ajouter la sauvegarde du jour.
Ici vous pouvez créer votre roulement sur le nombre de jours que vous désirez.
4 - BACKUP_EXPORT.cmd
FOR /F "TOKENS=1* DELIMS= " %%A IN ('echo %date%') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('echo %date%') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ eol= " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET dateStamp=%mm%%dd%%yyyy%
Echo %date% %time% >> c:\HyperV\logs\%dateStamp%_%computername%_xcopy.log
if not exist s:\%computername% md s:\%computername%
robocopy X:\ s:\%computername%\ /E /V /NP
/LOG+:"C:\HyperV\logs\%dateStamp%_%computername%_xcopy.log" /ZB /R:2 /W:30 /XJD /XJF /XD
$RECYCLE.BIN SYSTEM* MP* /XA:SHO
attrib -R -A -S -H -I s:\%computername%
Echo %date% %time% >> c:\HyperV\logs\%dateStamp%_%computername%_xcopy.log
La première partie formate la date comme vu tout à l’heure.
La deuxième et quatrième partie gèrent les fichiers de logs comme vu tout à l’heure.
La troisième partie gère ici un export à l’aide de l’utilitaire RoboCopy, nous vérifions tout d’abord si le
répertoire de destination existe si non nous le créons ensuite on exécute la commande robocopy (la
source est X:\ (La lettre sur laquelle est exposé notre shadow copy) et la destination est notre
répertoire de sauvegarde (ici sur le lecteur S:\ (Dans le répertoire qui porte le nom de notre
serveur)))
Les paramètres de robocopy sont :
/E -> Copie tous les sous dossiers
/V -> passe en mode verbose pour les logs
/NP -> pas d’affichage de l’état de progression
/LOG+:"c:\HyperV\logs\%dateStamp%_%computername%_xcopy.log" -> envoi le résultat dans le
fichier de log desiré
/ZB -> utilisation du mode restartable (si un accès refuse passage en mode backup)
/R:2 -> nombre de tentatives si échec
/W:30 -> temps d’attente entre les tentatives
/XJD -> exclusion des points de jonctions pour les répertoires
/XJF -> exclusion des points de jonctions pour les fichiers
/XD $RECYCLE.BIN SYSTEM* MP* -> exclusion des répertoires désirés
/XA:SHO -> exclusion des fichiers avec les attributs désirés (S : fichier système, H : fichier caché et O :
fichier offline)
On fini avec l’exécution de attrib -R -A -S -H -I s:\%computername% si non notre répertoire de
destination passe en répertoire caché (ça par contre je n’ai pas encore compris pourquoi …)
5 - BACKUP_IMAGEX.cmd
FOR /F "TOKENS=1* DELIMS= " %%A IN ('echo %date%') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('echo %date%') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ eol= " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET dateStamp=%mm%%dd%%yyyy%
Echo %date% %time% >> C:\HyperV\logs\%dateStamp%_%computername%_imagex.log
C:\HyperV\ImageX\imagex /capture X: S:\%computername%\SystemeHyperV.wim "SVG Disque
Systeme Serveur HyperV" /compress fast /check
Echo %date% %time% >> C:\HyperV\logs\%dateStamp%_%computername%_imagex.log
La première partie formate la date comme vu tout à l’heure.
La deuxième et quatrième partie gèrent les fichiers de logs comme vu tout à l’heure.
La troisième partie gère ici un export à l’aide de l’utilitaire ImageX (de la suite Windows AIK
(Automated Installation Kit))
Note : Pour pouvoir utiliser ImageX il vous faudra récupérer le répertoire ou il est installer par défaut
avec le Windows AIK (Automated Installation Kit) (par défaut il se trouve dans program
files\Windows AIK\Tools\amd64 (bien prendre la version d’imagex pour 64 bits)
Récapitulons :
Un petit schéma de l’exécution globale de la sauvegarde
Début
On appel HyperV.cmd
Diskshadow /s HyperV_STEP.DSH
BACKUP_MAINTENANCE.cmd
BACKUP_IMAGEX.cmd
BACKUP_EXPORT.cmd
Fin
Au final j’aurai au niveau des fichiers générés
• Le répertoire des batch contient
C:\HyperV
Cab (répertoire)
ImageX (répertoire)
Logs (répertoire)
BACKUP_IMAGEX.CMD
BACKUP_EXPORT.CMD
BACKUP_MAINTENANCE.CMD
HyperV.CMD
HyperV_STEP.DSH
• Logs (3 fichiers) dans le répertoire C:\HyperV\logs
01_SRV-HYPERV01_HyperV.txt
01_SRV-HYPERV01_imagex.txt
01_SRV-HYPERV01_maint.txt
01_SRV-HYPERV01_xcopy.txt
01 pour le mois de janvier (change en fonction du mois concernée)
SRV-HYPERV01 (ici mon serveur s’appel comme ca)
HyperV la partie concernée par le log
• Fichiers de sauvegardes
S:\SRV-HYPERV01
VM1
Snapshots
Virtual Hard Disks
Virtual Machines
VM2
VM3
SystemeHyperV.wim
S:\SRV-HYPERV01-OLD
Mise en place de l’automatisation du lancement de la sauvegarde avec le
gestionnaire des taches planifiées de Windows :
Dans la console de gestion du serveur
Configuration > Planificateur de taches > bibliothèque du planificateur de taches
Nous allons crées une nouvelle tache
Ici j’utilise le compte admin pour l’exécution (il est recommandé d’utiliser un compte dédié aux
sauvegardes)
On valide les modifications.
Et voilà votre sauvegarde est maintenant opérationnelle !!
Bonne continuation à tous et bon scripting :)

Documents pareils