Il arrive (mais pas chez moi :-)) qu'on désire utiliser un système propriétaire dont le nom commence par W en le réinitialisant régulièrement à un état connu.
Voici une méthode, pas optimale mais facile à mettre en oeuvre avec des outils classiques et aisée vu la taille confortable des disques actuels. Elle nécessite:
On part d'un système avec Windows installé classiquement et dans l'état dans lequel on veut pouvoir le restaurer. Démarrer l'ordinateur sur System Rescue CD et utiliser parted/gparted pour réduire la partition Windows et faire de la place pour les aménagements à venir: 2 fois la RAM pour le swap Windows, un bon 500 Mb pour le système Debian, autant de fois la moitié de l'espace disque utilisé par Windows qu'on désire avoir d'images de sauvegarde et un peu de marge. Sur l'espace libéré créer et formater une partition FAT32 ou NTFS de 2 fois la taille de la RAM. Eteindre le PC et retirer le CD.
Pour réduire la taille des images et accélérer leurs restaurations, on peut réaliser les opérations suivantes sur Windows:
De mémoire, les deux dernières opérations se font depuis "Panneau de Configuration -> Système sous XP. Lorsqu'elles sont finies, redémarrer et vérifier que les fichiers pagefile.sys et hiberfil.sys n'existent plus
Installer Debian classiquement en dual boot sur l'espace libre. Pas besoin de swap, d'exploser le système en 36 partitions ou d'interface graphique: garder le système petit et simple. Y installer partimage depuis les dépôts.
Editer /boot/grub/menu.lst, et dans les commentaires spéciaux Debian, ajouter une ligne #altoptions = (Windows Restore) 4. Il y a déjà une telle ligne pour le mode single user; cette nouvelle ligne va ajouter au menu GRUB une option pour démarrer en runlevel 4, runlevel qu'on va configurer plus bas.
Toujours dans le même fichier, repérer les lignes pour lancer Windows en bas du fichier et les déplacer juste en haut de la ligne # BEGIN AUTOMATIC KERNELS LIST pour qu'il apparaisse en première option et par défaut au boot. Regénérer ensuite le fichier de configuration avec update-grub.
Ensuite, créer le fichier /usr/local/bin/sysrestore comme suit et le rendre exécutable:
#!/bin/bash
image=`ls /root/partimage/*.000|tail -1`
partimage -b -f2 restore /dev/sda1 $image
Ce script va récupérer la dernière image (dans l'ordre alphabétique) dans /root/partimage et la restaurer sur la partition /dev/sda1 (à changer si Windows est installé ailleurs). L'option -b va réaliser l'opération sans rien demander, et -f2 va redémarrer le PC après la restauration.
Finalement, éditer /etc/inittab et localiser les lignes lançant les gettys: remplacer
1:2345:respawn:/sbin/getty 38400 tty1
par:
1:23:respawn:/sbin/getty 38400 tty1
et ajouter une ligne
r4:4:once:/sbin/getty -n -l /usr/local/bin/sysrestore 38400 tty1
qui va lançer la restauration au runlevel 4.
Il reste à créer une première image: créer le répertoire /root/partimage, s'y placer et lancer partimage sans paramètres. Donner au fichier un nom du genre YYYYMMDD-description.img (pour que le système restaure automatiquement la dernière image), comprimer en gzip pour économiser de la place et veiller à ce que le fichier image soit séparé en plusieurs fichiers de 2 GB, sinon la restauration échouera.
En temps normal, GRUB démarre Windows. Pour la restauration, il faut y sélectionner l'option Linux (Windows Restore) qu'on a définie plus haut dans menu.lst. Pour créer de nouvelles images (ex: incluant des mises à jours), faire une restauration du sysème (pour repartir d'un état propre), faire les modifications nécessaires et redémarrer le système Linux en mode normal, puis y créer une nouvelle image comme au paragraphe précédent.
Évidemment, on peut adapter les comportements à souhait: arrêter le PC après la restauration au lieu de le redémarrer, configurer un runlevel supplémentaire pour restaurer une autre version que la dernière, conservation d'une partition séparée pour des données à conserver ...
Julien De Bona - http://debona.dyndns.org - e-mail: julien(chez)bawet(point)org - Jabber: julien@debona.dyndns.org