Convertir un disque virtuel VMDK en image Ghost GHO
Quand vous etes en milieu professionnel, vous devez certainement faire des déploiements d'une installation d'une machine sur plusieurs dizaines ou centaines d'autre pour avoir la même installation. Ici on va utiliser Altiris Ghost (anciennement nommé Symantec Ghost). Pour avoir l'image (master) de la machine à déployer soit on travaille avec une machine physique soit avec une machine virtuelle. Cette dernière solution est de loin la plus simple et flexible, car on peut faire des snapshots pour faire plusieurs tests de configuration ou installation de logiciel sans limite avec un gain de temps incomparable!!! Il existe plusieurs solutions de virtualisation, mais les plus utilisées sont Virtualbox et VMware (oui il y a Parallels, Qemu, HyperV,…). Perso j'utilise VirtualBox, car multi-plateforme et gratuit.
On peut certes faire une image comme avec une machine physique (PXE, Automation Folder) mais le plus simple est de transformer/convertir directement le disque virtuel en image. L'utilitaire ghost32.exe ou ghost64.exe de Ghost Standard Tools permet de le faire à partir des disques virtuel VMDK. Vous devez donc pensez à choirsir ce type de disque lors de la création de votre machine virtuelle. Sinon il faudra convertir votre disque. Avec VirtualBox il y a les commande pour cela.
Voici donc le script, à adapter selon vos besoins
convertVMDKtoGHO.bat
@echo off cls REM REM Script de conversion de disque virtuel VMDK en image ghost GHO REM REM by O.brizard (a.k.a beemoon.fr) REM @2021 REM TITLE Convert VirtualBox VMDK to Ghost image GHO rem **** EXTRA pour Virtualbox **** rem https://www.virtualbox.org/manual/ch08.html REM **** Paramètes selon votre usage **** REM *** Optionnel *** set VMtoClone="" REM **** Fin Paramètres **** "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms> %TMP%\tmp.txt :choixVM if %VMtoClone%=="" ( set /p VMtoClone=Nom de la VM à convertir en GHO: ) if %VMtoClone%=="" goto :choixVM FOR /F %%a IN ('findstr /i /c:"%VMtoClone%" %TMP%\tmp.txt^|find /C """%VMtoClone%"""') do set nbFind=%%a if not %nbFind%==1 ( echo. echo La VM "%VMtoClone%" n'existe pas. echo. "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms echo. set VMtoClone="" goto :choixVM ) del /Q %TMP%\tmp.txt REM Check Ghost Tools If "%PROCESSOR_ARCHITECTURE%"=="AMD64" set arch=64 If "%PROCESSOR_ARCHITECTURE%"=="x86" set arch=32 if not exist "C:\Program Files (x86)\Symantec\Ghost\ghost%arch%.exe" ( echo Ghost Tools n'est pas installé sur cette machine. echo. pause exit ) REM Info sur la VM FOR /F "tokens=*" %%a IN ('"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showvminfo %VMtoClone% --machinereadable^>%TMP%\showvminfo.txt') do set %%a REM OSType FOR /F "tokens=*" %%a IN ('findstr /i /c:ostype %TMP%\showvminfo.txt^|find /C "Windows"') do set isWindows=%%a REM Disque type FOR /F "tokens=*" %%a IN ('findstr /i /c:.vmdk %TMP%\showvminfo.txt^|find /C "SATA-0-0"') do set isVMDK=%%a REM VM Folder FOR /F "tokens=*" %%a IN ('findstr /i /c:CfgFile %TMP%\showvminfo.txt') do set %%a for /f "delims=" %%i in (%CfgFile:\\=\%) do set a=%%~dpi for /f "delims=" %%i in ("%a:~0,-1%") do set b=%%~dpi set VMsFolder=%b:~0,-1% REM nettoyage des infos del /Q %TMP%\showvminfo.txt> nul set _src="" set newVM=master%VMtoClone% set _target=%newVM% set VMsFolder=%VMsFolder:"=% REM Info sur la VM FOR /F "tokens=*" %%a IN ('"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showvminfo %VMtoClone% --machinereadable^>%TMP%\showvminfo.txt') do set %%a REM OSType FOR /F "tokens=*" %%a IN ('findstr /i /c:ostype %TMP%\showvminfo.txt^|find /C "Windows"') do set isWindows=%%a REM Disque type FOR /F "tokens=*" %%a IN ('findstr /i /c:.vmdk %TMP%\showvminfo.txt^|find /C "SATA-0-0"') do set isVMDK=%%a REM nettoyage des infos del /Q %TMP%\showvminfo.txt> nul if exist "%VMsFolder%\%newVM%" ( "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" unregistervm %newVM% --delete>nul 2>&1 if %errorlevel% EQU 1 ( rd /Q /S "%VMsFolder%\%newVM%" set errorlevel=0 ) ) if NOT %isVMDK%==1 ( echo Seul les disques virtuels VMDK sont pris en charge echo. pause goto :eof ) echo Merge des snapshots par clone de la machine référente %VMtoClone% echo. "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevm %VMtoClone% --mode machine --name %newVM% --register set _src="%VMsFolder%\%newVM%\%newVM%.vmdk" if not exist %_src% ( set _src="%VMsFolder%\%newVM%\%newVM%-disk1.vmdk" ) if not exist "%USERPROFILE%\Desktop\%_target%" mkdir "%USERPROFILE%\Desktop\%_target%" cd /d "C:\Program Files (x86)\Symantec\Ghost" rem https://www.symantec.com/connect/articles/converting-image-file-format-gho-vmdk-and-vmdk-gho REM Pour linux set vboxParams=-clone,mode=create,src=%_src%,dst=%USERPROFILE%\Desktop\%_target%\%_target%.gho -batch -sure -split=100 -id -ntil -ntic REM Pour Windows if %isWindows%==1 ( set vboxParams=-clone,mode=create,src=%_src%,dst=%USERPROFILE%\Desktop\%_target%\%_target%.gho -batch -sure -split=100 ) echo Démarrage du Ghost... ghost%arch%.exe %vboxParams% rem Suppresion du clone Virtualbox if exist "%VMsFolder%\%newVM%" ( "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" unregistervm %newVM% --delete>nul 2>&1 if %errorlevel% EQU 1 ( rd /Q /S "%VMsFolder%\%newVM%" ) ) :end echo. echo *** Terminé *** echo. explorer "%USERPROFILE%\Desktop\%_target%" pause