Aller au contenu

Sauvegarde des machines virtuelles

De TIC Enseignement Agricole BFC
Version datée du 1 février 2024 à 11:10 par Cv5lw (discussion | contributions) (1 version importée)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Document réalisé par Michel, RSI de la DRAF

Principe

[modifier]
  • Les machines virtuelles sont hébergées sur vmw-server
  • Elles sont sauvegardées sur vmw-backup
  • Certaines sont sauvegardées chaque nuit (CS4, serveur d'applis, Free-EOS...), d'autres sont sauvegardées une fois par semaine (GLPI, antivirus...).
  • Les tâches de sauvegardes sont exécutées depuis une machine Windows nommée Sauvegarde, qui exécute aussi les sauvegardes des serveurs de fichiers. Il s'agit de fichiers batch lancés par des tâches programmées et utilisant l'utilitaire robocopy.
  • La machine sauvegarde accède aux machines virtuelles des 2 serveurs vmware, situées dans les 2 cas dans /opt/virtual_machines faisant l'objet d'un partage samba (voir Installation de vmware server).
  • Les machines sauvegardées chaque nuit sont également copiées sur un disque USB de la machine Sauvegarde dans un dossier portant le nom du jour.
  • Pour garantir l'état des machines virtuelles sauvegardées, il est recommandé de suspendre leur fonctionnement avant de copier les fichiers.

Opérations

[modifier]

Suspension des machines virtuelles

[modifier]

Le serveur vmware dispose d'un utilitaire nommé vmrun qui permet de suspendre et redémarrer les machines virtuelles.

La syntaxe est la suivante:

vmrun suspend /path/to/virtual_machine/virtual_machine.vmx

et

vmrun start /path/to/virtual_machine/virtual_machine.vmx

Par exemple:

vmrun suspend "/opt/virtual_machines/Windows 2000 server/Windows 2000 server.vmx"

Remarque: si le nom de dossier ou de fichier contient des espaces, mettre le chemin d'accès complet entre guillemets.

Accès ssh au serveur vmware

[modifier]

Le serveur vmware étant un serveur linux, il faut y accéder en ssh depuis une machine windows pour exécuter vmrun en mode batch (tâche programmée).

Putty permet d'accéder en mode console interactive. Il est également possible de l'utiliser en ligne de commande. L'outil le plus pratique dans ce cas est plink.exe, qui est un des modules installés avec putty. Au besoin, plink est téléchargeable ici

Accès par Putty

[modifier]
  • Installer Putty sur la machine Windows Sauvegarde
  • Il faut se connecter au moins une fois par putty sur le serveur vmw-server depuis la machine Sauvegarde. Cela a pour effet d'enregistrer une clé dans la base de registre. Attention: il faut la créer en ayant ouvert une session qui sera celle utilisée pour exécuter les tâches programmées (par exemple celle d'un compte d'opérateur de sauvegarde). Le nom d'ordinateur utilisé pour créer la clé devra être utilisé dans les commandes plink (ça peut être l'IP).
  • Tester le fonctionnement de Plink en ouvrant une fenêtre ligne de commande DOS
"c:\program files\putty\plink.exe" vmw-server -ssh -l <user-name> -pw <password>

Voir l'aide de Putty pour plus d'informations sur Plink

Suspension d'une machine virtuelle

[modifier]

Taper la commande (sur une seule ligne):

"c:\program files\putty\plink.exe" vmw-server -ssh -l <user-name> -pw <password> 
    vmrun suspend '/opt/virtual_machines/Windows 2000 server/Windows 2000 server.vmx'

Redémarrage d'une machine virtuelle

[modifier]

Taper la commande (sur une seule ligne):

"c:\program files\putty\plink.exe" vmw-server -ssh -l <user-name> -pw <password> 
    vmrun start '/opt/virtual_machines/Windows 2000 server/Windows 2000 server.vmx'

Remarques:

  • Utiliser des single quotes au lieu des guillemets pour le chemin d'accès à la machine virtuelle
  • Pour exécuter plusieurs commandes en une seule fois, écrire un script dans un fichier .TXT et remplacer la commande ci-dessus par -m <fichier-script.txt>

Interdire le redémarrage des sauvegardes

[modifier]

Attention: les machines virtuelles sont sauvegardées dans leur intégralité. Le fichier VMX contient le mode de démarrage des machines virtuelles (généralement automatique avec le démarrage du service vmware-server). Si les 2 serveurs s'arrêtent et redémarrent en même temps, il y aura redémarrage de 2 exemplaires de chaque machine virtuelle. Pour éviter cela, il faut régler le serveur vmw-backup pour que les machines virtuelles ne démarrent pas automatiquement.

  • Accéder par l'interface web: https://vmw-backup:8333
  • Aller dans l'onglet Options
  • Décocher Start Up and Shut Down Virtual Machines

Ecriture des batch

[modifier]

Une fois les commandes ci-dessus testées, elles peuvent être regroupées dans un batch qui sera appelé par une tâche programmée.

Principe

[modifier]

Rem: le fichier dow a été réalisé par mon collège de la draf (auteur de cette remarquable fiche), je pourrais lui demander en cas de besoin

Le fichier batch doit sauvegarder plusieurs machines. Le nom du jour est nécessaire pour la seconde sauvegarde (celle sur le disque USB où figure un dossier par jour de la semaine). Le nom du jour est obtenu par l'utilitaire dow.exe écrit en Delphi (téléchargeable ici), qui l'envoie dans un fichier texte dow.txt. Un fichier batch vm-jour.bat appelle dow.exe, puis récupère le jour contenu dans dow.txt pour l'envoyer comme paramètre au batch vm-copie-jour.bat. Le batch vm-copie-jour.bat exécute une boucle autour du fichier texte vm-copie-jour.txt pour récupérer les noms des machines virtuelles à sauvegarder. Le fichier vm-copie-jour.txt contient alors les machines virtuelles sous la forme:

dossier_de_la_machine_virtuelle/nom_de_la_machine_virtuelle.vmx

Le nom du dossier est celui que l'on voit lorsqu'on est dans /opt/virtual_machines, par exemple:

Windows 2000 server/win2000server.vmx
cs4_pdc/cs4_pdc.vmx
freeEOS/Other Linux 2.4.x kernel.vmx

A chaque itération de la boucle, vm-copie-jour.bat exécute:

- la suspension de la machine virtuelle par vmrun suspend via plink.exe
- la copie par robocopy
- le redémarrage de la machine virtuelle par vmrun start via plink.exe

Une deuxième boucle est exécutée, cette fois pour copier les sauvegardes faites par la première vers le disque USB de la machine Sauvegarde.

On dispose d'un système similaire pour les sauvegardes hebdomadaires, mais, cette fois, le nom du jour n'est plus utile. Un fichier vm-hebdo.bat récupère la liste des machines à sauvegarder dans vm-hebdo.txt puis exécute une boucle pour suspendre, copier et redémarrer les machines virtuelles. Il n'y a pas de seconde boucle dans ce cas.

On remarque que les commandes robocopy ne spécifient pas de type de fichiers à copier. En effet, on sauvegarde tous les fichiers contenus dans le dossier de la machine virtuelle, tous étant nécessaires à son redémarrage, s'il fallait le faire depuis le serveur vmw-backup.

Fichiers batch

[modifier]

vm-jour.bat

[modifier]

vm-jour.bat est appelé par une tâche planifiée quotidienne (la nuit)

echo off
rem Récupérer le nom du jour
rem L'utilitaire dow.exe doit être installé dans c:\windows ou dans le répertoire courant

dow.exe > dow.txt

rem Récupérer le nom du jour dans la variable %%a

for /f "eol=." %%a in (dow.txt) do call vm-copie-jour.bat %%a

vm-copie-jour.bat

[modifier]

(les commandes plink et robocopy sont sur une seule ligne)

REM Lecture des machines à sauvegarder dans le fichier vm-copie-jour.txt
REM Compléter ce fichier pour ajouter des machines à sauvegarder
REM sous la forme <dossier>/<machine>.vmx

REM copie de vmw-server vers vmw-backup
REM le nom du dossier de la MV est dans %%d
REM le nom de la machine virtuelle (fichier vmx) est dans %%e

for /F "tokens=1,* delims=/" %%d in (vm-copie-jour.txt) do (

"c:\program files\putty\plink.exe" vmw-server -ssh -l root -pw ****** -batch
          vmrun suspend '/opt/virtual_machines/%%d/%%e'

ROBOCOPY "\\10.126.100.99\virtual_machines\%%d" "\\10.126.100.98\virtual_machines\%%d"
          /MIR /R:0 /W:0 /NP /LOG:"D:\Logs\vm-%%d-%1.txt"

"c:\program files\putty\plink.exe" vmw-server -ssh -l root -pw root66 -batch
         vmrun start '/opt/virtual_machines/%%d/%%e'
)

REM Une fois toutes les machines copiées vers vmw-backup, 
REM on les copie de vmw-backup vers le disque USB H: dans le dossier du jour
REM le nom du jour est dans %1

for /F "tokens=1,* delims=/" %%d in (vm-copie-jour.txt) do (
ROBOCOPY "\\10.126.100.98\virtual_machines\%%d" "H:\%1\%%d" /MIR /R:0 /W:0 /NP
           /LOG+:"D:\Logs\vm-%%d-%1.txt"
)

vm-hebdo.bat

[modifier]

vm-hebdo.bat est appelé par une tâche planifiée hebdomadaire (le week-end)

(les commandes plink et robocopy sont sur une seule ligne)

ECHO OFF

REM Lecture des machines à sauvegarder dans le fichier vm-hebdo.txt
REM Compléter ce fichier pour ajouter des machines à sauvegarder
REM sous la forme <dossier>/<machine>.vmx

REM copie de vmw-server vers vmw-backup
REM le nom du dossier de la MV est dans %%d

for /F "tokens=1,* delims=/" %%d in (vm-hebdo.txt) do (

"c:\program files\putty\plink.exe" vmw-server -ssh -l root -pw root66 -batch
            vmrun suspend '/opt/virtual_machines/%%d/%%e'

ROBOCOPY "\\10.126.100.99\virtual_machines\%%d" "\\10.126.100.98\virtual_machines\%%d"
            /MIR /R:0 /W:0 /NP /LOG:"D:\Logs\vm-%%d-%1.txt"

"c:\program files\putty\plink.exe" vmw-server -ssh -l root -pw root66 -batch
            vmrun start '/opt/virtual_machines/%%d/%%e'

)