13 Mar 2017

Système générique de restauration de systèmes d'exploitations

Système générique de restauration de systèmes d’exploitations

Ce tuto sera très bientôt mis à jour avec des nouveautés

Ce tutoriel vous aidera à concevoir un CD/DVD/Bluray ou tout autre media bootable vous permettant d’installer de manière automatisée ou simplifié à peut prêt n’importe quel système d’exploitation. Attention ce tutoriel ne permet pas de faire bêtement du copier/coller, vous devrez comprendre ce que vous faites !

Nous ne pouvons que vous recommander de bien tester votre système avant d’utiliser ce DVD en production. Nous ne pouvons être responsable de ce que vous faites, les ressources et les scripts de ce tuto vous sont fournis gratuitement, et ne sont probablement pas exempt de bug. Donc testez et contrôlez à deux fois ce que vous faites.

Pré-requis

Vous souhaitez vous lancer? Il vous faudra quand même au minimum les éléments suivants :

  • Un ordinateur sous Debian au minimum avec Jessie (celui qui va servir à générer l’ISO).
  • Un ordinateur de test (machine virtuelle par exemple) ainsi qu’un media de démarrage (USB, DVD, PXE,…)

Création de votre media de démarrage

Depuis votre ordinateur Debian, installez tout d’abord ce qu’il faut pour générer un ISO grâce à live-build, installez également git qui vous servira a récupérer les fichiers de configuration :

apt install live-build git

Clonez maintenant le dépôt public depuis Github :

git clone https://github.com/olivierb2/universal-live-deploy.git

Entrez dans le dossier cloné, puis tapez la commande pour générer votre live CD :

lb build

Cette opération peut un peu de temps, donc il faudra un peu de patience. En cas d’échec, il faudra tout recommencer, tapez les commandes suivantes :

lb clean
lb build

A la fin de cette étape, vous aurez un ISO tout prêt. Ne graver pas cet ISO pour le moment car nous devront intégrer ensuite notre image.

Choix de la technologie de déployement

Vous devez maintenant choisir quelle technologie vous allez utiliser en fonction de votre besoin. Ce live CD vous permet de choisir parmis 4 systèmes :

  • Partimage : outil de clonage bit par bit d’une partition
  • Fsarchiver : outil de clone de partition par archivage
  • Wimlib : outil de restauration ou d’installation d’image Windows.
  fsarchiver partimage wimlib
Installation de Windows 7/Vista/8/10 N/A N/A Oui
Installation de Debian Jessie N/A N/A Non
Clonage de Windows / Linux / Mac Oui Oui Oui
Support des partitions linux standard (ext2, ext3, reiserfs, xfs, jfs) Oui Oui N/A
Support des partitions linux nouvelles générations (exz4, reiser4, btrfs) Oui Non N/A
Sauvegarde/restauration des partitions ntfs Oui Oui Oui
Restaurer une image dans une partition plus grande que l’originale. Oui Oui Oui
Restaurer une image dans une partition plus petite que l’originale Oui Non Oui
Utilisation de checksum pour vérifier l’intégrité de l’image Oui Non Oui
Compression de l’image utile les processeurs multi coeurs Oui Non Oui
Informations utilisées pour sauvegarder la partition Fichiers Blocks Fichiers
Interface avec progression Non Oui Oui

Création de l’image

Avant toute chose, vous devez savoir que Wimlib permet d’utiliser l’image fournie dans un DVD d’installation officiel de Windows. Si vous prenez cette option, vous pourrez donc déployer Windows sans créer d’image. Reportez vous directement à la section Wimlib pour plus d’information.

Pour les autres cas, vous devrez créer un ordinateur master qui servira de référence. Si vous choisissez cette option, je vous conseille alors de graver l’ISO généré précédemment ou bien de vous créer un media de démarrage par USB.

Création d’une clef bootage (méthode conseillée)

Connectez une clé USB vierge sur votre PC Debian et effectuez les étapes suivantes :

# Permet de répérer le chemin du périphérique de votre clé
fdisk -l
# Partitionnement de votre clef (remplacer le x par la lettre de votre clef)
cfdisk /dev/sdx

Créez une partition au format de votre choix (évitez FAT afin de contourner la limite des fichier de 2Go), et indiquez le drapeau Amorçage. Vous devrez ensuite installer syslinux et rendre la clef amorçable. (Les commandes sont relatives au dossier git récupéré précédemment).

# Installation de syslinux
apt install syslinux
# Installation d'un mbr sur la clé  (remplacer x par la lettre et le numéro de partition de votre clef USB)
cat /usr/lib/SYSLINUX/mbr.bin > /dev/sdx
# Montage de votre clé USB
mount /dev/sdxx /mnt
# Configurer syslinux sur la clef USB
extlinux --install /mnt
# Copie de la structure du live CD
cp -a binary/* /mnt
# Renommage du dossier isolinux pour extlinux
mv /mnt/isolinux /mnt/syslinux

Gravure de l’iso (méthode plus compliquée)

Gravez cette image sur un CD (inutile d’utiliser un DVD). Je ne décrirais pas comment graver un ISO sur un CD bien que je suis sur que certains vont graver l’ISO sur le CD au lieu de graver l’image disque. Allez je vous donne un lien dans le cas ou vous avez un doute sur comment faire :

http://www.tutoriels-animes.com/graver-cd-dvd-donnees-infrarecorder.html

Démarrage sur votre media

Une fois que votre CD est gravé, mettez le dans votre ordinateur “master” puis démarrez votre ordinateur en prenant soin de bien configurer votre BIOS pour démarrer dessus. Aille, vous ne savez pas non plus, je crois qu’on est mal parti, dans le doute, demandez à un amis par téléphone, ou tentez d’appuyer sur les touches F12, F9, ou bien ECHAP. Si vous n’avez pas un menu qui apparaît, essayez de mettre un commentaire, on verra ce qu’on peut faire pour vous.

Lorsque le menu apparaît, appuyez sur la touche TAB puis ajouter le mot debug à la fin de la commande (ajoutez un espace !). Appuyez sur entrée pour démarrer sur la clef.

Créer l’image sur un disque dur ou clef USB ou un partage samba

Vous avez la possibilité de stocker l’image système sur la clef elle même (si elle contient assez de place), sur un autre media ou bien encore sur un partage Windows. Pour rentrer en mode terminal, appuyez sur ALT+F2, puis authentifiez vous avec le compte user et le mot de passe live, puis passez en super utilisateur avec sudo -s.

Sur la clef elle même

Remontez la clef usb en écriture puis accédez au dossier images :

mount -o remount,rw /lib/live/mount/medium/
cd /lib/live/mount/medium/images/

Sur un disque dur externe

Branchez maintenant votre disque dur et tapez

dmesg

Si vous voyez quelque chose comme :

[    3.325090]  sdb: sdb1

C’est sans doute ce que vous venez de connecter. Il va falloir maintenant monter votre disque dur dans un répertoire. En effet, Linux impose de “monter” un disque dur, c’est à dire indiquer le chemin avec lequel on va accéder aux données.

Tapez la commande suivante :

mount /dev/sdb1 /mnt

Attention : adaptez votre commande en fonction de ce que vous avez vu avec la commande dmesg. Vous pourriez très bien avoir sdc1 à la place. Si vous avez plusieurs partitions, ça peut également être sdc2 ou sdb2, mais si vous avez des partitions sur votre disque dur externe, c’est que je n’ai pas besoin de plus détailler.

Si votre disque dur est en ntfs, tapez la commande suivante :

mount -t ntfs-3g /dev/sdb1 /mnt

Enfin accédez au dossier :

cd /mnt

Sur partage de fichier Windows (ou samba)

Tapez la commande suivante :

mount -t cifs //ip/partage /mnt -o username=login

Remplacez “ip” par l’adresse IP de votre ordinateur configuré pour le partage, “partage” par le nom du partage que vous avez créé, “login” par votre compte utilisateur Windows, enfin il vous demandera sans doute un mot de passe, tapez le mot de passe de votre compte.

Si vous n’y arrivez pas, difficile à dire comme ça, mais peut-être devriez vous mettre un petit commentaire dans cet article.

Dans tous les cas

Afin de pouvoir compléter une installation, vous devrez indiquer au système comment partitionner le disque dur cible. Vous avez deux possibilités :

  • Via un script (modèle disponible sur la clef)
  • Via un fichier mbr.

Avec un fichier mbr

Cette méthode est la plus simple mais aussi la moins souple puisque vous devrez avoir des disques dur identiques sur toutes vos machines :

dd if=/dev/sda of=image.mbr bs=512 count=1

Avec un script

Cette méthode est plus compliquée en fonction du type de partition à faire. Sachez par contre que si vous souhaitez installer Windows, vous avez à disposition quelques fonctions. Donc dans le cas ou vous souhaitez simplement installer Windows Vista/7/8/10, décommentez les commandes suivantes dans le fichier scripts/a-restore-pre :

initialize_disk $dev
create_win_partitions $dev
install_win_mbr $dev

Notez que dans le cas d’une restauration Windows, le système peut également créer automatiquement le contenu de la partition boot. Pour ce faire, décommentez les lignes suivantes dans le fichier scripts/a-restore-post :

mkfs.ntfs -f /dev/sda1             # Format the Windows boot partition
mkdir -p /mnt/boot /mnt/system     # Create temp folder
mount /dev/sda1 /mnt/boot          # Mount the Windows boot partition
mount /dev/sda2 /mnt/system        # Mount the Windows system partition
mkdir /mnt/boot/Boot/              # Create the folder structure
cp -a /mnt/system/Windows/Boot/PCAT/bootmgr /mnt/boot/             # Copy the needed files from
cp -a /mnt/system/Windows/Boot/PCAT/??-?? /mnt/boot/Boot/          # the Windows system
cp -a /mnt/system/Windows/Boot/PCAT/memtest.exe /mnt/boot/Boot/    # partition and get the generic
cp ${IMAGES_STORE}/BCD-generic /mnt/boot/Boot/BCD                  # BCD file from the medium

Création de l’image

Enfin on y est, on va pouvoir lancer les commandes magiques qui vont vous permettre de sauvegarder votre ou vos partitions.

Pour rappel, si vous souhaitez lister toutes les partitions de tous vos disques dur, tapez :

fdisk -l

Cas de Fsarchiver

Pour créer une image de votre première partition, tapez :

fsarchiver savefs image-1.fsa /dev/sdx1

Si vous avez plusieurs partitions a sauvegarder (c’est le cas lorsque vous sauvegardez Windows 7), tapez autant de fois la commande que de partition. Si vous souhaitez par exemple sauvegarder la seconde partition de votre disque, tapez :

fsarchiver savefs image-2.fsa /dev/sdx2

Pensez à bien remplacer sdx par votre disque (sdb, sdc) le cas échéant.

Cas de Partimage

Dans le même principe que fsarchiver, sauvegarder votre partition à l’aide de la commande suivante :

partimage -bd save /dev/sdx1 image-1

Cas de Wimlib

Wimlib est aussi très performant pour effectuer une image :

wimcapture /dev/sdx1 image-1.wim

Notez qu’un fichier wim de référence est disponible pour l’installation de Windows dans le dossier sources et nommé install.wim. Vous pouvez récupérer ce fichier et le placer dans le dossier image de la clef USB. Renommez le en image-2.wim.

Conclusion

Vous avez maintenant tout ce qu’il faut pour vous créer un DVD de restauration (oui, je suppose que l’image fait plusieurs giga), tapez halt dans votre terminal afin de pouvoir éteindre l’ordinateur maître.

Restauration manuelle de l’image

Même si ce guide vous propose de créer un Live DVD de restauration automatique, vous avez peut-être envie de restaurer manuellement votre image. Ce cas est souvent utile lorsque vous avez créer une image juste pour sauvegarder votre PC ou bien lorsque vous souhaitez changer de disque dur.

Pour ce faire, je ne vais pas tout ré-expliquer, dans le principe, il faut suivre les mêmes étapes que lors que de la création de l’image à l’exception bien sur des commandes de création de l’image. En gros, suivez le tuto jusqu’à l’étape Création de l’image. C’est bon, vous y êtes ? OK, nous supposons donc que vous êtes dans le dossier là ou vous avez stocké vos images, on va vérifier la présence de ces dernières :

ls -l

Vous devriez donc retrouver le fichier image.mbr qui est la sauvegarde de votre secteur de démarrage, ainsi que image-x.fsa ou image-x.000 en fonction du logiciel que vous avez utilisé pour faire l’image.

Restauration du mbr

Il est nécessaire d’abord de restaurer le mbr. Si vous partitionnez votre disque dur sans restaurer le mbr, vous risquez d’avoir un problème de démarrage voir d’alignement des partitions.

dd if=image.mbr of=/dev/sdx

Remplacez bien sur sda par la valeur de votre disque dur. Encore un doute? Tapez donc de nouveau la commande fdisk -l pour vérifier la présence de vos partitions et disques dur.

Attention : la commande dd va détruire les partitions existantes de votre disque dur. Soyez donc prudent, et surtout, évitez de vous tromper de disque dur !

Afin que les partitions soient prisent en compte sans devoir redémarrer l’ordinateur, il est nécessaire de dire au système qu’on souhaite actualiser la table présente en mémoire.

blockdev --rereadpt /dev/sdx

Avant de passer à la phase de restauration, il est sans doute nécessaire de revoir un peu le schéma de partitionnement de votre disque dur, car ce dernier n’a sans doute pas la même taille que celui d’origine.

fdisk -uc /dev/sdx

Ensuite, utilisez les commandes suivantes en fonction de ce que vous voulez faire :

  • Tapez p pour afficher la table de partition.
  • Tapez s puis le numéro de partition pour supprimer une partition.
  • Tapez n pour ajouter une partition, puis p pour primaire (recommandé sauf si vous voulez plus de 4 partitions). Laissez ensuite les valeurs par défaut pour avoir la plus grand partition possible.
  • Enfin n’oubliez pas de taper w pour sauvegarder votre table de partition.
  • Tapez q pour quitter le logiciel.

En cas d’erreur donc, tapez juste q sans w pour ne pas sauvegarder les changements.

Voilà, j’espère que ça n’était pas trop dur ! Bon petite astuce, si vous trouvez ce logiciel trop difficile, utilisez cfdisk, mais sachez simplement qu’il ne fonctionne pas dans tous les cas (notamment si votre disque dur de destination est plus petit que le disque d’origine).

cfdisk /dev/sda

Restauration de l’image

Maintenant que la partie la plus compliquée est terminée, nous pouvons enfin nous attaquer à la restauration des partitions.

Cas de Fsarchiver

Pour fsarchiver (vous avez des fichiers image-x.fsa).

fsarchiver restfs image-x.fsa id=0,dest=/dev/sdxx

Cas de Partimage

Pour partimage (vous avez des fichiers image-x.000).

partimage restore /dev/sdxx image-x.000 -b

Cas de Wimlib

Remplacez les x par les numéros de partitions. Remplacez y par le numéro de volume de votre fichier wim si applicable.

wimapply image-x-wim y /dev/sdxx

Regénération du fichier ISO

Dans le cas ou vous avez placé votre image sur une Clef USB, vous aurez peut-être besoin de regénérer votre fichier ISO pour pouvoir le graver sur un DVD ou sur un Bluray. Placez vous dans la racine de votre dossier récupéré de GitHub :

genisoimage -J -R -f -b isolinux/isolinux.bin -c isolinux/boot.cat -nobak -no-emul-boot -boot-load-size 4 -boot-info-table -o live-deploy.iso binary/

Une fois générez, vous devriez avoir un fichier live-deploy.iso, si c’est le cas, bravo, vous avez créez votre iso, qui est bootable. Testez le avec Virtualbox ou Vmware !!

Vous avez désormais un ISO gravable et utilisable, vous pouvez le garder tel quel ou bien personnaliser les scripts de restauration.

Utilisation des scripts

L’utilisation des scripts nécessite un minimum de connaissances en programmation. Vous pouvez bien sur vous baser sur les exemples ci-dessous et regarder comment fonctionne ceux déjà présent. Après, tout dépendra du niveau de complexité que vous souhaitez.

Pour vous donner une idée de ce qu’on peut utiliser, nous utilisons couramment cette structure pour faire les tâches suivantes :

  • Assistant qui demande le futur nom de la machine.
  • Création et remplacement dans le fichier Sysprep.inf.
  • Changements dans la base de registre Windows.
  • Copie de fichiers additionnels sur la partition cible, tel que des drivers.
  • Redimensionnement de partition ext4 ou ntfs.

Etc… et tout ça depuis la ligne de commande. Voyons donc quelques exemples.

Comprendre la structure

Avant d’aller plus loin, je vous propose de regarder ce qui est présent dans ce fameux dossier iso. Vous trouverez les dossiers suivants :

Contenu du dossier +iso+

Nom du dossier Rôle
*images* Utilisez ce dossier pour stocker les images, et des créer des sous-dossiers pour les personnalisations.
*isolinux* Contient tout ce qu'il faut pour rendre le CD/DVD bootable, n'y touchez pas.
*live* Contient une image du système linux utilisé, n'y touchez pas.
*scripts* Contient les scripts de restauration du système.

Contenu du sous-dossier +images+

Nom du fichier Rôle
*image.mbr* Fichier image du mbr à installer, contenant également la table de partitions.
*image-x.000* Fichier image d'une partition. Le *x* représente le numéro de la partition dans laquelle l'image sera restaurée. Les fichiers avec l'extension .000 seront automatiquement restaurés avec partimage.
*image-x.fsa* Fichier image d'une partition. Le *x* représente le numéro de la partition dans laquelle l'image sera restaurée. Les fichiers avec l'extension .fsa seront automatiquement restaurés avec fsarchiver.

Contenu du sous-dossier +scripts+

Nom du fichier Rôle
*a-restore* Script principal, c'est lui le chef d'orchestre, mais vous n'êtes pas obligé de le changer.
*a-restore.conf* Fichier de configuration, en principe, inutile d'y toucher.
*a-restore-pre* Script lancé avant la restauration du système. Il peut être pratique de poser des questions ou des confirmations avant d'écraser le contenu d'un disque dur.
*a-restore-post* Script lancé après la restauration du système. Il peut être pratique de lancer des commandes à effectuer sur la partition fraîchement restaurée, comme le redimensionnement de cette dernière ou bien la copie de fichiers personnalisés.
*lib-restore* Fichier de librairie contenant toutes les fonctions, n'y touchez pas a moins de vouloir essayer de comprendre comment tout ça fonctionne en arrière plan.

Personnalisation du script avant restauration

Ouvrez donc le fichier iso/scripts/a-restore-pre dans l’éditeur de texte de votre choix. Vous remarquerez qu’il existe déjà un petit assistant vous évitant ainsi d’effacer votre disque dur par mégarde si vous oubliez le CD dans votre ordinateur.

basez vous sur ces exemples si vous voulez changer les phrases. Voici une liste des commandes possibles :

Afficher un texte en couleur :

Cette commande affiche simplement un message à l’écran dans une couleur donnée. A mettre avant une question par exemple.

   
Syntaxe : echo_color %{color:red}COULEUR% %{color:green}"MESSAGE"%
%{color:red}COULEUR% Indique la couleur souhaitée. Valeurs possibles : *RED*, *GREEN*, *NORMAL*, *PINK*, *BLUE*, *WHITE*, *WHITELIGHT*, *YELLOW*, *CYAN*.
%{color:green}"MESSAGE"% Message au choix, mettre impérativement des guillemets autour.

Exemple :

echo_color RED "Un petit message en rouge."

####. +Effacer tous les messages à l’écran :+

Cette commande nettoie l’écran de tout message pouvant parasiter l’utilisateur. Pratique si on ne veut afficher à l’écran qu’une seule information à la fois.

   
Syntaxe : clear_screen

Exemple :

clear_screen

####. Afficher une erreur fatale :

Affiche un message d’indiquant que le script ne peut pas continuer car quelque chose est manquant. Une fois que l’utilisateur valide, l’ordinateur s’éteint automatiquement.

   
Syntaxe : fatal %{color:green}"MESSAGE"%
%{color:green}"MESSAGE"% Message au choix, mettre impérativement des guillemets autour.

Exemple :

fatal "Vous n'avez pas de fichier image à restaurer, l'ordinateur va s'arrêter."

Faire une pause debug :

Affiche un message avec une pause si VERBOSE est mis à YES dans le fichier de configuration. Utile pour voir les messages avant de passer à l’étape suivante pendant la fabrication du DVD.

   
Syntaxe : debug %{color:green}"MESSAGE"%
%{color:green}"MESSAGE"% Message au choix, mettre impérativement des guillemets autour.

Exemple :

debug "La variable dev contient $dev."

Redimensionner une partition ntfs :

Redimensionne la partition spécifiée à sa taille maximum. Attention, ne fonctionne pour le moment que avec la première partition.

   
Syntaxe : resize_part_ntfs %{color:green}"PARTITION"%
%{color:green}"PARTITION"% Indiquer le numéro de partition à redimensionner (ne fonctionne que avec les partitions primaires).

Exemple :

resize_part_ntfs 1

Pour le reste, il s’agit de programmation bash, n’hésitez pas à utiliser des conditions ou des boucles ou bien encore la commande dialog qui permet de créer des belles boites de dialogues en mode texte. Je peux également vous conseiller l’adresse suivante pour une petite initiation “http://www.haypocalc.com/wiki/Bash#Langage_Bash”:http://www.haypocalc.com/wiki/Bash#Langage_Bash

Tester votre iso

Avant de lancer votre image, je vous conseille de tester que la restauration se passe bien, soit sur un disque dur vierge, soit dans une machine virtuelle (mais votre système risque de ne pas démarrer a cause du changement de matériel).

Nous ne pouvons que vous recommander de bien tester votre système avant d’utiliser ce DVD en production.


Tags: