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
Dernière modification : le 2021/05/04