Mi è stato chiesto di condividere con la comunità il mio modo per creare ripristini rapidi per installazioni Windows, quindi ho scritto questa guida.
Il tutto è nato da quando un netbook di un'amica è rimasto infettato, e il virus in questione mi ha sorpreso infettando anche la partizione nascosta di ripristino: appena ripristinato infatti dava gli stessi errori di prima. A questo punto l'unica era il piallaggio totale di tutte le partizioni, ma non volevo che si perdesse la possibilità di ripristinare... pensando a una soluzione, sono arrivato a una tecnica che permette ripristini molto più rapidi e pratici di quello originale fornito dal produttore del netbook, e totalmente a prova di utonto.
Occorrente:
1) Chiavetta USB o DVD con l'installazione di Windows 7, o CD con l'installazione di XP (ho provato a creare una chiavetta USB con l'installazione di XP e, dopo un pomeriggio perso a smadonnarci dietro, ci ho rinunciato. Se manca un lettore ottico è infinitamente più semplice usarne uno esterno USB che spaccarsi la testa a creare una chiavetta.)
2) Chiavetta USB o CD con Puppy Linux o qualsiasi altra distro live che includa gparted; io uso Puppy perchè è piccola e rapida
3) Chiavetta USB o CD con installer di Debian Stable, versione i386 (netinst da 180 mega, non businesscard da 40)
4) I seguenti pacchetti .deb dal repository di Debian: mingetty (autologin), libntfs-3g, ntfs-3g (per montare la partizione ntfs di Windows), cpufrequtils, libcpufreq0 (per rallentare il processore se la temperatura sale troppo; alcuni laptop mal progettati vanno in protezione termica e si spengono senza questi pacchetti); se usate una chiavetta USB per l'installazione copiateceli, altrimenti metteteli in un'altra chiavetta.
Guida (nota: nella spiegazione do per scontato che siate un minimo nerd, quindi che sappiate trovare le voci giuste nei menu e non vi serva un passo-passo per tutti i click che dovete fare):
Partizionamento
Facciamo il boot da Puppy; una volta che si carica, facciamo partire gparted (si trova nel menu accessibile cliccando sul bottone sulla barra in basso a sinistra, dentro al sottomenu System), selezioniamo "sda1" (assumendo che l'installazione sia da fare su un normale PC o n(o)tebook con un solo hard disk). Apparirà un menu grafico con le partizioni del disco; cancelliamo tutto il cancellabile, dopodichè partizioniamo in questo modo:
Partizione 1: ntfs; Win7 = 25 giga, WinXP = 12 giga (meglio andare sul sicuro che non si sa mai)
Partizione 2: ntfs; tutto il resto del disco meno 6 giga (winXP) o 12 giga (win7)
Partizione 3: ext4; i rimanenti 6 o 12 giga
Clicchiamo "apply" (altrimenti non fa nulla) e aspettiamo che abbia finito. Riavviamo.
Installazione di Windows
Installiamo Windows nella prima partizione ntfs. Installiamo i driver e tutto il software necessario, dopodichè facciamogli eseguire gli aggiornamenti.
Spostamento dei documenti
Questo passo è importante e non va dimenticato: andiamo in D: e creiamo una cartella per i documenti, una per le immagini, una per la musica e una per i video. Andiamo nei documenti dell'utente di Win7, e cambiamo alle 4 cartelle l'indirizzo in modo che porti alle cartelle create in D:.
Accertiamoci di non esserci dimenticati niente. Una volta accertati, andiamo a berci un caffè o a farci un giro; al ritorno, installiamo la roba di cui ci saremo ricordati nel frattempo [img]http://www.***************.it/forum/images/smilies/asd.gif[/img]
Attenzione: questo è lo stato in cui il computer si troverà dopo ogni ripristino, quindi eliminiamo eventuale cronologia di Firefox o altre cose temporanee.
Installazione di Debian base
Facciamo il boot dalla chiavetta/CD con l'installer di Debian; procediamo con l'installazione guidata (dandogli password facili, tanto chissene) finchè non chiede di configurare il network. A questo punto annulliamo l'autoconfigurazione e diciamogli che vogliamo configurare il network in un secondo momento (suggerimento: staccare il cavo ethernet o disabilitare il wifi prima di tutto ciò, altrimenti l'installer potrebbe autoconfigurare troppo rapidamente prima che si riesca a bloccarlo). Procediamo normalmente. Quando chiede come partizionare, selezioniamo "manual", andiamo nella partizione ext4, e impostiamo tutto come da screenshot:
Dovesse saltare lo screenshot:
Use as: ext4 journaling file system
Format the partition: yes, format it
Mount point: /
Mount options: defaults
Label: none
Reserved blocks: 2%
Typical usage: standard
Bootable flag: on
Dandogli conferma si lamenterà della mancanza di una partizione swap. Ignoriamolo e procediamo con le opzioni di default. Quando chiede del bootloader controlliamo che dica che ha visto un altro sistema operativo, quindi confermiamo l'installazione nell'MBR.
Configurazione di Debian
Installazione pacchetti
Al reboot comparirà il bootloader; se non facciamo niente avvierà in Linux e chiederà un login. Facciamo login con "root" con la password che gli abbiamo dato durante l'installazione (io per semplificare le cose gli do la password "root"). Infiliamo la chiavetta in cui ci sono i file .deb che abbiamo scaricato preventivamente prima di iniziare. Diamogli i seguenti comandi per installarli:
mount /dev/sdb1 /mnt
cd /mnt
dpkg -i *.deb
Configurazione autologin
Ci serve che il sistema faccia autologin nell'account da amministratore di Linux in modo che all'utente finale non siano poste richieste di utenti e password che non saprebbe.
nano /etc/inittab
Si aprirà l'editor con dentro il file inittab. Cerchiamo la seguente riga, o una che ci somigli:
1:2345:respawn:/sbin/getty 38400 tty1
Solitamente è seguita da altre righe simili ma con meno numeri all'inizio; a noi interessa solo la prima. Cambiamola così:
1:2345:respawn:/sbin/mingetty --autologin root --noclear tty1
Notare i due trattini prima di autologin e noclear. Usciamo col comando CTRL+X, diamo conferma per salvare. Riavviamo il sistema in Linux per controllare che funzioni tutto:
reboot
Se tutto è stato fatto per bene, ci troveremo in una riga di comando da root.
Configurazione bootloader
Dobbiamo modificare il bootloader in modo che l'utonto finale non veda roba che lo confonda.
cd /etc/default
nano grub
Troviamo questa parte:
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"
E togliamo il cancelletto a inizio della seconda riga:
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_LINUX_RECOVERY="true"
Salviamo e usciamo.
Ora dobbiamo modificare l'ordine delle voci nel bootloader:
cd /etc/grub.d
mv 10_linux 30_linux
mv 30_otheros 10_otheros
E ora la dicitura che compare al menu durante l'avvio (il comando "cp" crea una copia di backup dei file che andiamo a cambiare):
cp 10_otheros bak_otheros
nano 10_otheros
Nel caso di Windows 7 ci sarà una riga con scritta la voce di windows tra virgolette, qualcosa di questo tipo:
menuentry "Windows Vista (loader)" {
Il bootloader non è in grado di capire se il sistema installato è Windows Vista o Windows 7, quindi (a meno che non lo aggiornino) si limita a metterci Vista. Cambiamo la riga in questo modo, eliminando anche la dicitura "loader" che non importa all'utente finale:
menuentry "Windows 7" {
Notare le virgolette prima e dopo il titolo, nonchè la parentesi graffa aperta alla fine: vanno lasciate al loro posto!
Nel caso di Windows XP la dicitura solitamente è "Microsoft Windows XP Professional" (o Home, o qualsiasi altra cosa); per semplicità, si può cambiarla in un semplice "Windows XP".
Ora cambiamo quella di Linux:
cp 30_linux bak_linux
nano 30_linux
Cerchiamo questa riga:
title="$(gettext_quoted "%s, with Linux %s")"
Cambiamola così:
title="Ripristino sistema"
Anche qua lasciamo le virgolette a inizio e fine. Ignoriamo la riga simile alla prima con scritto "(recovery mode)" alla fine. Salviamo e usciamo, dopodichè diamo questo comando:
update-grub
Dovrebbe dare alcuni messaggi (tipicamente 2 o 3 righe) senza errori. Se da qualche errore, abbiamo sbagliato a editare qualcosa; ripristiniamo i backup e riproviamo con più attenzione. Riavviamo il sistema (reboot) per controllare che funzioni: dovrebbe avere Windows come default, e "Ripristino sistema" selezionabile. Selezioniamolo in modo che carichi di nuovo in Linux.
Configurazione del ripristino
Creazione dello script di ripristino
cd /root
nano sysres.sh
Si aprirà l'editor con un file vuoto, nel quale va scritto questo (le parti testuali sono modificabili a piacimento):
clear
echo "Ripristino di Windows 7/XP: con questa operazione si ripristinerà il sistema operativo, con programmi di base e documenti intatti. Tutti i programmi eventualmente installati dal precedente ripristino, assieme al contenuto del desktop, verranno cancellati. Attenzione: a procedura iniziata non sarà più possibile annullarla. L'operazione richiede alcuni minuti; alla fine il computer si riavvierà da solo. Si desidera procedere? Premere invio due volte per confermare, altrimenti premere il pulsante di alimentazione del computer per spegnerlo e annullare l'operazione." | fold -s
echo ""
read -p "Conferma"
read -p "Conferma finale: ultima possibilità di ripensamento"
echo ""
echo "Ripristino in corso..."
gunzip -c /root/sysimg.gz | dd of=/dev/sda1 bs=1M
reboot
Attenzione di nuovo alle maiuscole: la "M" alla fine del penultimo comando va maiuscola, il resto no. Attenzione anche a che il comando di gunzip sia corretto: sbagliando qualcosa qua si rischiano guai! Salviamo e usciamo.
Rendiamo lo script eseguibile con questo comando:
chmod +x sysres.sh
Dopodichè diamo il seguente comando per renderlo auto-eseguente:
echo /root/sysres.sh > /root/.bash_profile
A questo punto volendo possiamo riavviare il sistema (reboot) per verificare che lo script si auto-esegua senza necessità di input dall'utente. Premiamo ctrl+C per interromperlo quando chiede conferma e ci troveremo di nuovo alla riga di comando (non confermiamo assolutamente!).
Creazione immagine di ripristino
Per prima cosa creiamo un file pieno di zeri nella partizione di Windows, così da aiutare poi il processo di compressione (spiegazione di come funziona qua):
mount -t ntfs-3g /dev/sda1 /mnt
dd if=/dev/zero of=/mnt/delete bs=1M
Ci metterà un po', perchè ha parecchi giga da scrivere. A operazione ultimata darà un messaggio "no space left on device" e torneremo in linea di comando. Cancelliamo il file pieno di zeri appena creato e smontiamo la partizione:
rm /mnt/delete
umount /dev/sda1
Adesso procediamo al passo finale, la creazione dell'immagine compressa della partizione di Windows:
dd if=/dev/sda1 | gzip -c9 > /root/sysimg.gz
Quanto ci metterà a questo punto dipende dal processore del computer. Se è ragionevolmente recente ce la farà rapidamente (il mio Q6600 ci mette circa mezz'ora a comprimere un'immagine di Windows 7 con varia roba installata). Se è un Atom o qualcosa di molto vecchio conviene lasciarlo lavorare la notte. A fine operazione tornerà in riga di comando, e a questo punto si può riavviare e cominciare a usare normalmente il computer, anche se personalmente consiglio di provare a ripristinare una volta per vedere se va tutto liscio.
FAQ
- Ma è un procedimento incredibilmente complicato! [img]http://www.***************.it/forum/images/smilies/icon_uhoh.gif[/img]
No, è molto più rapido eseguire il tutto che leggere questa guida... tolto il tempo necessario al computer per eseguire le procedure, l'avrei potuto fare parecchie volte nel tempo che ho impiegato a scrivere tutto. Una volta imparati i comandi diventa molto veloce...
- Tutto molto bello, ma che vantaggio c'è rispetto a Norton Ghost o $sistema_di_backup_a_caso?
I vantaggi sono tre. Per prima cosa, col mio metodo l'utente finale ha la vita molto semplificata: il ripristino del sistema richiede, letteralmente, la pressione di 4 tasti della tastiera (freccia giù, enter, enter, enter), ed è fattibilissimo senza avere neanche idea di cosa sia una partizione o un'immagine compressa. Secondariamente si riducono le possibilità di errori e problemi, in quanto non si copiano singoli file o contenuto della partizione, ma si fa un'immagine della partizione nella sua totalità, incluso lo spazio vuoto (che viene compresso quindi è quasi irrilevante ai fini della dimensione dell'immagine) e potenziali stramberie di filesystem che potrebbero creare intoppi. L'ultimo vantaggio è che, interrompendo lo script quando chiede conferma, si ottiene un sistema Linux da cui si può smanettare sui filesystem di Windows in modo da (per esempio) recuperare dati incautamente registrati sulla partizione C: prima di un ripristino, o porre rimedio a eventuali problemi "leggeri" senza la necessità di un ripristino totale. Ovviamente bisogna sapere come usare la shell di Linux per poter fare tutto questo...
Ah, ovviamente Linux è completamente gratuito, quindi non c'è da preoccuparsi di pagare per una soluzione commerciale o darsi alla pirateria...
- Quanto ci mette a ripristinare?
Poco. Decomprimere un file gzippato richiede molto meno tempo che comprimerlo, tanto che persino un orripilante Atom Z520 su cui ho provato il ripristino ha fatto tutto in poco più di mezz'ora.
- C'è qualche svantaggio?
Uno solo: questo sistema è altamente sconsigliabile in ambienti in cui i dati devono andare protetti, perchè interrompendo lo script si ottiene accesso root al sistema, da cui è possibilissimo copiare qualsiasi file non criptato, o cancellare tutti i dati da D:. Questo problema è comunque arginabile facilmente non abilitando l'autologin; in questo caso la password root da usare in caso di ripristino sarebbe nota solo all'utente finale, e chi non la sapesse non avrebbe accesso al sistema.
- Ma non si perdono i documenti?
No, perchè abbiamo impostato Windows in modo che li salvi in D:. Durante il ripristino la partizione D: non viene toccata, quindi i documenti rimangono tutti la, e poichè l'impostazione è salvata nell'immagine del sistema una volta ripristinato saranno tutti di nuovo al loro posto.
- E se si rompe l'hard disk?
E' possibile copiare l'immagine della partizione su una chiavetta e/o masterizzarla su un DVD o due, in modo da averla a disposizione anche in caso di malfunzionamento del disco. Il nuovo disco va ripartizionato con attenzione e bisogna reinstallarci Debian, ma poi basta ripristinare l'immagine per avere Windows di nuovo a posto.
- Ottimo, grazie per l'idea, adesso farò il tutto da una distribuzione live senza installare niente e mi salverò il file a parte, in modo da poter ripristinare con minimo dispendio di tempo e farmi pagare come per una reinstallazione normale, muahahaha!
Sconsiglio di fare i furbi. Per ragioni etiche, certo (mettetevi nei panni dell'utente, non sareste più contenti e sereni se sapeste di poter ripristinare il sistema rapidamente in caso di urgenza, senza dover correre alla ricerca del tecnico che potrebbe peraltro essere irreperibile?), ma anche per ragioni economiche: pochi sono quelli che tentano di rendere la vita più facile all'utente finale sforzandosi oltre il minimo indispensabile, e se lo fate il passaparola vi darà più reputazione e profitti dello sfruttamento dell'ignoranza.