====== Convertir un disque virtuel VMDK en image Ghost GHO ======
La conversion d'un VMDK n'est pas un clone du disque comme le ferait l'agent Ghost
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