Windows PE: creare un'immagine WIM personalizzata per il ripristino del sistema

I notebook e i personal computer in commercio offrono diverse soluzioni per ripristinare il sistema in caso di malfunzionamento del software installato.
Windows PE: creare un'immagine WIM personalizzata per il ripristino del sistema

I notebook e i personal computer in commercio offrono diverse soluzioni per ripristinare il sistema in caso di malfunzionamento del software installato. Utilizzando tali meccanismi, è possibile riportare il sistema allo stato di fabbrica (cioè al momento dell’acquisto) tramite una procedura semplice, utilizzabile anche dai non esperti. In tutte le situazioni è quasi sempre presente una partizione di ripristino, generalmente nascosta, che contiene un backup della partizione di sistema e un programma che effettua il ripristino vero e proprio. I principali vantaggi di questa modalità sono comodità e velocità, poiché senza utilizzare dei supporti esterni (uno o più CD/DVD) è possibile far ritornare il sistema ad uno stato sicuramente funzionante. Di contro, non viene offerta alcuna protezione rispetto ai problemi riguardanti il disco rigido che non consentano più l’accesso alla partizione di ripristino: la tabella delle partizioni potrebbe essere modificata dall’uso non corretto di qualche programma o peggio ancora dall’azione di malware, dall’utente che elimina tale partizione con l’intento di recuperare un po’ di spazio od infine dal danneggiamento del disco fisso.

Per tali ragioni, il produttore del sistema solitamente fornisce uno o più supporti (CD o molto più probabilmente DVD nei sistemi recenti) con lo stesso contenuto della partizione di ripristino e con le stesse funzioni di ripristino automatizzato. Talvolta tali supporti non sono forniti fisicamente ma è necessario crearli con un programma fornito direttamente dal produttore e installato nel sistema. In altri casi, i supporti di ripristino sono sostituiti dal DVD del sistema operativo, da quello con i driver e da uno o più supporti contenenti i programmi forniti col sistema (per esempio quello di masterizzazione). In quest’ultima ipotesi il ripristino è sempre possibile, però risulta più dispendioso in termini di tempo e inoltre non tutti gli utenti sono in grado di portarlo a termine con successo: il ripristino manuale richiede l’installazione e la configurazione di sistema operativo, dei driver e dei programmi, operazioni che non sempre sono alla portata di tutti.

L’utente che non vuole o non è in grado ripristinare manualmente il sistema si rivolge ad utility di terze parti che consentono di creare un backup delle singole partizioni e del settore di avvio principale (MBR) del disco rigido. Quasi tutte queste utility offrono anche la possibilità di produrre un supporto avviabile contenente il programma di ripristino, utilizzabile anche quando il sistema operativo non si avvia (ved., a tal proposito, questi articoli); in alcuni casi si può optare per la creazione di un unico supporto avviabile contenente anche il backup, il che consente di ripristinare il sistema in un singolo click. L’utilizzo di queste utility, oltre ad ovviare al problema dell’installazione manuale sopra descritto, permette comunque a tutti gli utenti di effettuare una o più installazioni di base personalizzate e di disporne in base alle necessità: per esempio un primo backup potrebbe contenere soltanto il sistema operativo eventualmente attivato, un secondo backup potrebbe includere i driver, un terzo backup in aggiunta i programmi essenziali ed eventuali aggiornamenti importanti, e poi si potrebbe procedere effettuando backup incrementali e differenziali.

Il più delle volte, comunque, quello che interessa all’utente è almeno un supporto di ripristino contenente l’installazione di base del sistema operativo con driver sicuramente funzionanti e i programmi essenziali, in altre parole un’installazione abbastanza stabile da ripristinare in caso di malfunzionamenti. Con questo obiettivo ci si può servire di uno strumento prodotto della Microsoft e scaricabile gratuitamente: Windows PE.
La versione 2.0, qui descritta, è compatibile con i sistemi operativi di casa Microsoft fino a Windows Vista (“Windows PE 3.0“, generato a partire dal codice di Windows 7, è incluso nel pacchetto WAIKWindows Automated Installation Kit -, del quale parleremo in un altro articolo) ed è dotato tutti i tool necessari allo scopo: tra questi, ImageX consente di gestire backup di partizioni o singole cartelle, DiskPart permette di configurare le partizioni del disco rigido, BCDEdit è in grado di ripristinare la configurazione di avvio, ecc..

La creazione di un supporto di ripristino necessita in primo luogo di una copia di backup della partizione di sistema: per ottenerla è sufficiente creare un CD di avvio di Windows PE, riavviare il sistema optando per il boot dal lettore ottico e attendere l’avvio di quest’ambiente preinstallato. In sostanza, in questa prima fase si tratta di seguire le istruzioni proposte in questo articolo fino alla generazione di un unico file .wim relativo alla partizione di sistema: questo ne costituisce il backup. All’interno di questo tipo di file si possono aggiungere più di un’immagine, relativa ognuna anche ad una partizione differente; ogni immagine all’interno di uno stesso file .wim è indirizzabile tramite un numero (il numero 1 indica la prima che è stata aggiunta, il numero 2 la seconda, e così via) oppure mediante il nome specificato al momento dell’aggiunta.

Dopo aver inserito il CD di Windows PE, ed avendo avuto cura di selezionare il boot da lettore ottico, questa sorta di “sistema operativo ridotto” viene caricato interamente nella memoria RAM: nello specifico, una parte di essa viene allocata per creare un cosiddetto disco RAM di dimensioni opportune ed a questo viene assegnata la lettera identificativa X:. Non appena viene visualizzato il prompt dei comandi e wpeinit termina la sua esecuzione, come mostrato nella figura sottostante, non è più necessario mantenere il CD di Windows PE nel lettore e quindi è anche possibile estrarlo.

A questo punto è possibile seguire le istruzioni dell’articolo sopra citato per creare un backup della partizione di sistema con ImageX, specificando Backup.wim come file di destinazione e “stivandolo” in una partizione differente da quella di sistema: si può anche sfruttare un dispositivo di memorizzazione esterno, come una pendrive od un disco rigido rimovibile. È importante salvare il backup come Backup.wim, poiché il programma di ripristino, che si preparerà in seguito, si aspetta che abbia questo nome. Oltre al file di destinazione è possibile indicare anche un nome (“Partizione C”) da associare all’immagine della partizione. Ecco il comando da utilizzare:

imagex /capture c: d:\ripristino\Backup.wim “Partizione C” /compress maximum

Non appena la creazione del backup giunge a termine, si è pronti per preparare il disco di ripristino, prima però bisogna riavviare il sistema. Il procedimento da seguire è analogo a quello illustrato nell’articolo prima indicato, con la differenza che bisogna aggiungere il programma di ripristino e il file di backup, oltre a modificare un file di sistema di Windows PE in modo da fargli avviare automaticamente il programma di ripristino. Le indicazioni che seguono sono, pertanto, nate dall’integrazione delle indicazioni contenute nell’articolo prima citato con delle nuove istruzioni per aggiungere il programma di ripristino e l’immagine di backup.

Per prima cosa bisogna avviare il Prompt dei comandi degli strumenti di Windows PE ed usare il comando copype.cmd x86 d:\ripristino\winpe per estrarre i file necessari alla creazione del disco nella cartella “d:\ripristino\winpe”; è altresì possibile scegliere una cartella di destinazione differente, modificando coerentemente i comandi specificati in seguito. Tra i file estratti in questa cartella, il file winpe.wim è l’immagine di base di Windows PE ed è necessario montarla nella sottocartella mount digitando il seguente comando:

imagex /mountrw d:\ripristino\winpe\winpe.wim 1 d:\ripristino\winpe\mount

Aggiunta di alcuni strumenti

Il contenuto della cartella “mount” in fase di boot verrà caricato nel disco RAM come unità X:: è possibile includere in essa tutti gli strumenti utili, evitando comunque di copiare file di grosse dimensioni, per i quali il quantitativo di memoria RAM a disposizione potrebbe di conseguenza non essere sufficiente.
Prima di tutto conviene aggiungere alcuni tool di servizio, e a tal fine è sufficiente digitare i seguenti comandi:

xcopy "c:\Programmi\Windows AIK\Tools\Servicing" d:\ripristino\winpe\mount\Windows /s
xcopy "c:\Programmi\Windows AIK\Tools\x86" d:\ripristino\winpe\mount\Windows /s /y

A questo punto all’interno della cartella “mount” occorre aggiungere una nuova cartella Scripts e creare all’interno di quest’ultima i seguenti file di testo: restore.bat, findbck.vbs, dpscript.sc ed opzionalmente un file di documentazione (readme.txt); questi file costituiranno il già citato programma di ripristino.

Per quanto riguarda il file di backup, non è consigliabile inserirlo all’interno della cartella “mount”, poiché le sue dimensioni dell’ordine dei gigabyte potrebbero superare abbondantemente la quantità di RAM installata nel sistema. Per questo motivo, si deve creare una nuova cartella image all’interno della directory d:\ripristino\winpe\ISO e copiare dentro image il file Backup.wim ed opzionalmente un semplice file di testo che descrive il contenuto dettagliato del file .wim, per esempio i programmi e i service pack installati, ecc., o anche documentazione aggiuntiva su come adoperare questo file. Durante la fase di boot, tutto il contenuto della cartella ISO sarà associato al lettore ottico: come conseguenza, il disco di ripristino non deve essere rimosso dal lettore finché la procedura di ripristino non verrà completata.

Il file restore.bat è il programma di ripristino vero e proprio che, tramite DiskPart, crea le partizioni nel primo disco rigido; poi si serve di ImageX per ripristinare il contenuto della partizione di sistema a partire dal file Backup.wim ed infine usa BCDEdit per ricostruire la configurazione di avvio.
E’ quindi necessario copiare il seguente codice e incollarlo nel nuovo file restore.bat:

@echo off
cls
echo.
echo Ricerca dell'immagine di backup necessaria per il ripristino...
start /w cscript //Nologo findbck.vbs
echo Fatto!
echo.
echo Impostazione variabili d'ambiente...
call setenv.bat
echo Fatto!
echo.
goto welcome

:welcome
cls
echo.
echo.
echo                                  Windows PE 2.0
echo                -------------------------------------------------
echo                    Programma di ripristino per Windows Vista
echo   ---------------------------------------------------------------------------
echo.
echo     Il software di sistema sarà ripristinato allo stato in cui si trovava
echo     quando è stato effettuato il backup (domenica 19 settembre 2010).
echo     Durante il ripristino, tutti i file personali verranno sovrascritti.
echo.
set /p choice=Continuare? (S/N): 
if "%choice%"=="s" goto recovery
if "%choice%"=="S" goto recovery
if "%choice%"=="n" goto cancel
if "%choice%"=="N" goto cancel
goto welcome

:recovery
cls
echo.
echo Preparazione del disco rigido...
start /w diskpart /s dpscript.sc
if %errorlevel% neq 0 goto dperror
echo Fatto!
echo.
echo Ripristino della partizione di sistema...
start /w imagex /apply %BACKUP_IMAGE% 1 C:
if %errorlevel% neq 0 goto ixerror
echo Fatto!
echo.
echo Ripristino della configurazione di avvio...
start /w bcdedit /set {default} device partition=C:
if %errorlevel% neq 0 goto bcerror
start /w bcdedit /set {default} osdevice partition=C:
if %errorlevel% neq 0 goto bcerror
start /w bcdedit /set {bootmgr} device partition=C:
if %errorlevel% neq 0 goto bcerror
start /w bcdedit /set {ntldr} device partition=C:
if %errorlevel% neq 0 goto bcerror
echo Fatto!
echo.
echo Il sistema è stato ripristinato con successo!
echo Se necessario, eseguire lo strumento di ripristino all'avvio.
echo.
goto end

:dperror
echo.
echo Errore durante la preparazione del disco rigido.
echo Exit Code (DiskPart): %errorlevel%
echo Il programma di ripristino verrà terminato.
echo.
goto end

:ixerror
echo.
echo Errore durante il ripristino della partizione di sistema.
echo Exit Code (ImageX): %errorlevel%
echo Il programma di ripristino verrà terminato.
echo.
goto end

:bcerror
echo.
echo Errore durante il ripristino della configurazione di avvio.
echo Exit Code (BCDEdit): %errorlevel%
echo Il programma di ripristino verrà terminato.
echo.
goto end

:cancel
cls
echo.
echo Operazione annullata dall'utente
echo Il programma di ripristino verrà terminato.
echo.
goto end

:end
if exist setenv.bat del setenv.bat
echo.
echo Per riavviare il sistema, usare il comando exit dal prompt dei comandi.
pause
@echo on

Per compiere queste operazioni, restore.bat adopera anche gli script dpscript.sc e findbck.vbs: le istruzioni del primo le dà in pasto a DiskPart per configurare il disco rigido, mentre grazie al secondo è in grado di conoscere il percorso completo del file .wim col backup. Quest’ultimo, infatti, sarà accessibile tramite il lettore ottico contenente il disco di ripristino, ma non è possibile conoscere a priori la lettera che verrà associata al dispositivo. In ciò viene in aiuto lo script vbs: mandandolo in esecuzione, esso s’incarica di effettuare la ricerca del file di backup soltanto tra i lettori ottici e alla fine genera un file batch ausiliario (setenv.bat) che, avviato dallo script principale (il suddetto restore.bat), imposta la variabile d’ambiente BACKUP_IMAGE contenente il percorso completo del file di backup.
L’avvio dello script ausiliario da parte di quello principale garantisce la visibilità della variabile anche all’interno di quest’ultimo.
Copiare il seguente codice e incollarlo nel nuovo file findbck.vbs:

Option Explicit

' Inizio dello script.
WScript.Echo "Ricerca dell'immagine di backup necessaria per il ripristino..."    

' Variabili globali usate nel resto dello script.
Dim strComputer: strComputer = "."
Dim objWMIService: Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")

' Verifica il percorso in cui si trova l'immagine di backup.
Dim backupImagePath: backupImagePath = ""
Dim opticalDrives: Set opticalDrives = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
Dim objDrive
For Each objDrive in opticalDrives
    If objDrive.MediaLoaded = True Then
        backupImagePath = objDrive.Drive & "\image\Backup.wim"
        If (objFSO.FileExists(backupImagePath) And objFSO.GetFile(backupImagePath).Size > 0) Then
            Exit For
        Else
            backupImagePath = ""
        End If
    End If
Next
Set objDrive = Nothing
Set opticalDrives = Nothing

' Crea un file batch ausiliario per impostare la variabile d'ambiente col percorso trovato.
Dim objBatchFile: Set objBatchFile = objFSO.CreateTextFile("setenv.bat", True)
objBatchFile.WriteLine("set BACKUP_IMAGE=" & backupImagePath)
objBatchFile.Close
Set objBatchFile = Nothing

' Dealloca risorse.
Set objFSO = Nothing
Set objWMIService = Nothing

' Termine dello script.
WScript.Echo "Fatto!"
WSCript.Sleep(500)

Generazione dell’immagine ISO e ripristino del sistema

Il file dpscript.sc deve includere almeno le istruzioni necessarie per creare una partizione primaria C: delle dimensioni idonee ad ospitare il sistema originario (almeno pari allo spazio occupato dal sistema operativo al momento del backup) e contrassegnarla come attiva; per il resto è possibile personalizzarlo in base alle proprie esigenze. È utile sottolineare che, dal momento che il programma di ripristino si aspetta che la nuova partizione di sistema sia associata alla lettera C:, è importante che le istruzioni per crearla siano eseguite prima della creazione delle altre partizioni affinché la lettera C: sia disponibile. Inoltre, lo spazio da allocare per le partizioni deve essere espresso in MB. A titolo di esempio, il seguente script permette di creare una partizione primaria di 30 GB (cfr. 30720 MB) per il sistema operativo ed una logica per i dati nello spazio rimanente. In particolare, la prima istruzione serve per selezionare il primo disco rigido, la seconda ne esegue la pulitura eliminando tutte le eventuali partizioni presenti in esso. Le successive quattro istruzioni sono quelle indispensabili per creare una partizione C:\ primaria e per attivarla; per tale ragione è fondamentale inserirle subito dopo il comando di pulitura (cfr. clean). Le tre istruzioni seguenti allocano lo spazio rimanente per una partizione logica, e con l’ultima termina l’esecuzione di DiskPart.
Copiare il seguente codice e incollarlo nel nuovo file dpscript.sc:

select disk 0
clean
create partition primary size=30720
format fs=NTFS label="OS" quick
assign letter=C
active
create partition extended
create partition logical
format fs=NTFS label="DATA" quick
exit

Dopo aver personalizzato Windows PE con gli script di ripristino sopra descritti e con l’immagine di backup, è necessario aggiungere ulteriori componenti utilizzando i seguenti comandi:

peimg /install=WinPE-HTA-Package d:\ripristino\winpe\mount\Windows
peimg /install=WinPE-MDAC-Package d:\ripristino\winpe\mount\Windows
peimg /install=WinPE-Scripting-Package d:\ripristino\winpe\mount\Windows
peimg /install=WinPE-XML-Package d:\ripristino\winpe\mount\Windows
peimg /install=WinPE-WMI-Package d:\ripristino\winpe\mount\windows

Per verificare che i suddetti pacchetti siano stati installati correttamente, è sufficiente digitare il comando peimg /list d:\ripristino\winpe\mount\Windows e controllare che accanto al nome del pacchetto sia presente il segno +, come mostrato nella seguente immagine:

Per far avviare automaticamente il programma di ripristino è necessario modificare lo script startnet.cmd contenuto nella cartella d:\ripristino\winpe\mount\Windows\System32, aggiungendo i seguenti comandi dopo wpeinit:
set PREVIOUS_DIR=%cd%
cd\
cd Scripts
call restore.bat
cd\
cd %PREVIOUS_DIR%
set PREVIOUS_DIR=
cls

Dopo queste modifiche all’immagine montata, è possibile eliminare gli elementi superflui da essa e smontarla confermando le modifiche, che verranno salvate nel file winpe.wim. Queste operazioni si concretizzano utilizzando i seguenti due comandi:

peimg /prep d:\ripristino\winpe\mount\Windows /f
imagex /unmount d:\ripristino\winpe\mount /commit

I prossimi due comandi, quelli finali, consentono di applicare gli ultimi perfezionamenti alla cartella ISO aggiungendovi il file appena modificato winpe.wim (rinominato in boot.wim dentro la sottocartella sources) e di generare un’immagine ISO da masterizzare su un CD/DVD avviabile, che in fase di boot caricherà il contenuto del file boot.wim all’interno del disco RAM associandogli la lettera identificativa X:

copy d:\ripristino\winpe\winpe.wim d:\ripristino\winpe\ISO\sources\boot.wim /y
oscdimg -lBACKUP -n -m -bd:\ripristino\winpe\etfsboot.com d:\ripristino\winpe\ISO d:\ripristino\backup.iso

L’opzione -m dell’ultimo comando serve per ignorare la massima dimensione del file ISO che verrà prodotto, dimensione che di default è pari alla capacità di un CD, quindi non sufficiente quando si include l’immagine di backup di una partizione di sistema contenente Windows Vista.
Col file ISO generato si conclude la procedura di creazione di un CD/DVD di ripristino che permette di ripristinare automaticamente il sistema, previa conferma da parte dell’utente.

La figura sottostante mostra il programma di ripristino che si è appena avviato: lo script startnet.cmd ha appena avviato restore.bat (tramite il comando call) e quest’ultimo sta attendendo che lo script findbck.vbs (la finestra in primo piano) termini la sua esecuzione.

Successivamente viene messo in esecuzione setenv.bat e alla fine il programma di ripristino è pronto e attende conferma da parte dell’utente.

Dando la conferma, il programma di ripristino avvia DiskPart affinché configuri il disco rigido in base alle istruzioni del file dpscript.sc.

Non appena le partizioni sono state create, viene eseguito ImageX per ripristinare il contenuto della partizione di sistema.

Quando il contenuto della partizione di sistema viene ripristinato, il programma di ripristino esegue BCDEdit per creare il settore di avvio principale e permettere così al sistema ripristinato di avviarsi. Subito dopo l’utente viene avvisato che il ripristino è stato completato.

Per riavviare il sistema è sufficiente premere un tasto qualunque per tornare al prompt dei comandi, digitare il comando exit ed attendere il riavvio.

Ti consigliamo anche

Link copiato negli appunti