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. Ce nouveau script gere le clonage temporaire des disques VDI en VMDK.
Voici donc le script, à adapter selon vos besoins
convertVMDKtoGHO.bat
@echo off
cls
chcp 65001> nul
chcp 850> nul
REM
REM Script de conversion de disque virtuel VMDK en image ghost GHO
REM
REM by O.brizard (a.k.a beemoon.fr)
REM @2025
REM
TITLE Convert VirtualBox VMDK to Ghost image GHO
SETLOCAL EnableDelayedExpansion
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 - installez d'abord Symantec_Ghost_Standard_Tools
echo - ou d‚placez le r‚pertoire dans "C:\Program Files (x86)\Symantec"
echo.
pause
exit
)
pushd "C:\Program Files\Oracle\VirtualBox"
rem **** EXTRA pour Virtualbox ****
rem https://www.virtualbox.org/manual/ch08.html
REM **** Paramètes pour automatiser (Optionnel) ****
set VMtoClone=""
REM **** Fin Paramètres ****
:listVMs
echo.
echo Nom des VMs disponibles :
VBoxManage.exe list vms> %TMP%\tmp.txt
VBoxManage.exe list vms
echo.
set VMtoClone=""
for /f %%i in ("%TMP%\tmp.txt") do set size=%%~zi
if %size% leq 0 (
echo Il n'y a pas de VM disponibles
echo.
pause
goto :eof
)
:choixVM
if %VMtoClone%=="" (
set /p VMtoClone=Nom de la VM qui est entre double quote … convertir en GHO:
)
if %VMtoClone%=="" goto :listVMs
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.
goto :listVMs
)
:_start
del /Q %TMP%\tmp.txt
REM Info sur la VM originale
VBoxManage.exe showvminfo %VMtoClone% --machinereadable>%TMP%\showvminfo.txt
for /f "tokens=*" %%a in (%TMP%\showvminfo.txt) do (
set z=%%a
set z=!z:"=!
set z=!z:\\=\!
set "!z!" 2>nul
REM echo !z!
)
REM nettoyage des infos
del /Q %TMP%\showvminfo.txt> nul
REM https://beemoon.fr/doku.php?id=systeme:windows:expandfilename
for /f "delims=" %%i in ("%SATA-0-0%") do set disqueType=%%~xi
for /f "delims=" %%i in ("%CfgFile%") do set VMsFolder=%%~dpi
set VMsFolder=%VMsFolder:~0,-1%
for /f "delims=" %%i in ("%ostype%") do set osType=%%i
set osType=%osType:~0,7%
set newVM=master_%VMtoClone%
set /p "newVMTmp=Nomage du GHO [ %newVM% ] :"
if NOT "%newVMTmp%"=="" (set newVM=%newVMTmp%)
if exist "%VMsFolder%" (
VBoxManage.exe unregistervm %newVM% --delete>nul 2>&1
if %errorlevel% EQU 1 (
rd /Q /S "%VMsFolder%"
set errorlevel=0
)
)
echo.
echo Merge des snapshots par clone de la machine r‚f‚rente %VMtoClone%
VBoxManage.exe clonevm %VMtoClone% --mode machine --name %newVM% --register
REM Info sur la nouvelle VM
VBoxManage.exe showvminfo %newVM% --machinereadable>%TMP%\showvminfo.txt
for /f "tokens=*" %%b in (%TMP%\showvminfo.txt) do (
set z=%%b
set z=!z:"=!
set z=!z:\\=\!
set "!z!" 2>nul
)
REM nettoyage des infos
del /Q %TMP%\showvminfo.txt> nul
REM https://beemoon.fr/doku.php?id=systeme:windows:expandfilename
for /f "delims=" %%i in ("%SATA-0-0%") do set disqueType=%%~xi
for /f "delims=" %%i in ("%CfgFile%") do set VMsFolder=%%~dpi
set VMsFolder=%VMsFolder:~0,-1%
for /f "delims=" %%i in ("%ostype%") do set osType=%%i
set osType=%osType:~0,7%
if NOT "%disqueType%"==".vmdk" (
if "%disqueType%"==".vdi" (
echo.
echo Conversion du disque VDI en format VMDK pour le clonage avec Ghost.
VBoxManage.exe clonemedium "%SATA-0-0%" "%SATA-0-0:~0,-4%.vmdk" --format=VMDK
) else (
echo Seuls les disques virtuels VMDK et VDI sont pris en charge
echo.
pause
goto :eof
)
)
REM Création du dossier de stockage de la capture GHO.
if not exist "%USERPROFILE%\Desktop\%newVM%" mkdir "%USERPROFILE%\Desktop\%newVM%"
rem https://www.symantec.com/connect/articles/converting-image-file-format-gho-vmdk-and-vmdk-gho
set _src="%SATA-0-0:~0,-4%.vmdk"
REM Pour VM linux
set ghostParams=-clone,mode=create,src=%_src%,dst="%USERPROFILE%\Desktop\%newVM%\%newVM%.gho" -batch -sure -split=2048 -Z -id -ntil -ntic
REM Pour VM Windows
FOR /F "tokens=*" %%a IN ('echo %osType%^|find /C "Windows"') do set isWindows=%%a
if %isWindows%==1 (
set ghostParams=-clone,mode=create,src=%_src%,dst="%USERPROFILE%\Desktop\%newVM%\%newVM%.gho" -batch -sure -split=2048 -Z
)
echo.
echo D‚marrage de la capture en GHO avec Ghost...
"C:\Program Files (x86)\Symantec\Ghost\ghost%arch%.exe" %ghostParams%
rem Suppresion du clone Virtualbox
if exist "%VMsFolder%" (
if exist "%SATA-0-0:~0,-4%.vdi" (
echo.
echo Suppression du VMDK temporaire
VBoxManage.exe closemedium disk "%SATA-0-0:~0,-4%.vmdk" --delete
)
echo.
echo Suppression du clone temporaire.
VBoxManage.exe unregistervm %newVM% --delete
if %errorlevel% EQU 1 (
rd /Q /S "%VMsFolder%"
)
)
:end
echo.
echo ===================================================================
echo Stockage de la capture GHO dans "%USERPROFILE%\Desktop\%newVM%"
echo ===================================================================
echo.
echo *** Termin‚ ***
echo.
REM Pour déplacer la capture
REM move "%USERPROFILE%\Desktop\%newVM%" c:\>nul
pause
