systemx

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, avril 5 2013

Comment Sauvegarder/restaurer/deplacer ses distro/partitions linux

Le but de ce billet est de faire un point sur la politique de sauvegarde, linux et les partitions afin de ne plus craindre de perdre son boot, son OS ou ses données.
Ca m'a été très précieux suite aux taquineries de l'installeur de Rosa.
Ce billet explique comment sauvegarder, restaurer et deplacer son OS/partition et accessoirement ses données.
Il se base sur un poste avec plusieurs linux en utilisation desktop, installés chacun sur une unique partition et les données dans une autre. Le boot est sous grub. voir le billet sur les install multiples.
  1. Sauvegarde OS
  2. Pour sauvegarder une partition entière, j'ai trouvé l'utilitaire fsarchiver qui corresponds parfaitement à ce besoin.
    Les partitions font 15/20GB et sont toutes nommées (via e2label), Le fichier de sortie est appelé "LABEL-Partition.fsa" (par exemple Korora-sda12.fsa).
    La commande à lancer pour chaque partition sera du type :
    fsarchiver savefs -o /backup/Korora-sda12.fsa -v -j2 -z 1 /dev/sda12
  3. Sauvegarde MBR
  4. Il faut de plus bien sauvegarder la table des partitions du disque au cas ou elle serait perdue.
    C'est un grand classique que celle ci soit effacée par un programme sans pourtant avoir de perte de données.
    Le résultat est d'avoir tout perdu (on peut essayer testdisk) alors que c'est très simple d'en faire une sauvegarde.
    Comme deux précautions valent mieux qu'une j'utilise 2 commandes dont je sauvegarde la sortie :
    dd if=/dev/sda of=dd.out bs=512 count=1
    sfdisk -d /dev/sda > sfdisk.out
  5. Restauration sans perte de la table de partition
  6. Il suffit booter si un autre Linux ou un media externe de restaurer le fichier via fsarchiver.
    fsarchiver restfs  Korora-sda12.fsa id=0,dest=/dev/sda12
    Si la partition destination est différente de la paritition source, il faudra éditer le fichier /etc/fstab et eventuellement les fichiers grub si ils ont étés customisé avec des nom de partition.
    Pour la fstab il faut changer la partition d'entrée qui est le premier élément (/dev/sda12) :
    /dev/sda12 / ext4 defaults,acl 1 1
  7. Restauration avec perte de la table de partition
  8. Si la partition du disque disparaît, j'applique les commandes sfdisk/dd inverses pour reprendre mon partitionnement original.
  9. Récupération de grub
  10. Il est très simple de reconstruire grub après par exemple un déplacement de partition :
    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install  /dev/sda
    
    Cependant ca se complique si on doit booter sur un média externe (type livecd) ou que l'on veut restaurer grub à partir d'une partition sur laquelle on ne peut booter.
    Dans ce cas, on utilise un chroot qui permet de deplacer temporairement le / du système.
    L'exemple suivant permet de reconstituer le grub pour le disque à partir du linux de la partition 12.
    mount /dev/sda12 /mnt/
    mount -t proc none /mnt/proc
    mount -o bind /dev /mnt/dev
    mount -t sysfs sys /mnt/sys
    chroot /mnt/ /bin/bash
    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install  /dev/sda
    exit
    umount /mnt 
    reboot
    En gros on met la parition cible sur le repertoire /mnt, ensuite les autres mount servent à utiliser les fichiers dynamiques de l'OS en cours d'execution dans la partition qui sera "chrootée" et enfin deplacer la racine dans cette partition puis installation de grub en utilisant les données de celle ci.
    Si il y a des partitions lvm il faut faire avant le mount :
    vgchange -a y
    lvscan
    
  11. Deplacement de paritition
  12. De la même manière il est très simple de déplacer son OS de partition.
    On boot sur un autre OS, on fait le dump, on le restaure sur une autre partition via fsarchiver.
    fsarchiver restfs  Korora-sda11.fsa id=0,dest=/dev/sda12
    Ensuite il faut monter cette partition et changer la fstab pour changer la reference du /
    On peut regenerer grub simplement avec :
    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install /dev/sda 
    
    Par contre si on boot sur un media externe, il faudra passer par un chroot.

Notes :
  • Au final tout cela est très simple, un peu de pratique et cela semblera très naturel.
  • Les commandes grub peuvent etre un peu différentes selon les distro comme grub2-mkconfig ou install-grub2.
  • fsarchiver permet de sauvegarder plusieurs partitions dans un même fichier, utile en cas de systeme installé avec cette configuration.
  • J'ai ecris ce script qui automatise les sauvegardes (en fonction du type de part, montage, MBR ...).


  1. Sauvegarde des Données
  2. Pour les données afin qu'elle restent accessible sous forme de file system sur disque externe, j'utilise rsync, il y a beaucoup de doc sur cette commande, je ne m'étant pas sur le sujet.
    Par rapport à fsarchiver qui prends une image à un instant t, rsync copie des données selon pas mal de critères.
    J'ai fais un script qui utilise un fichier de propriété pour sauvegarder les repertoires importants (home,musique, photos ...).

mardi, octobre 23 2012

comment installer plusieurs linux sur un PC (2ème partie)


Après les explications sur le partitionnement et le boot loader sur cette page, on démarre avec l'installation via un Live CD.
Sur l'installation proprement dite, on verra uniquement le partitionnement et le boot loader qui sont à peu près identiques sur tout les distributions linux.
A noter que bien souvent grub est installé sans choix pour l'utilisateur, se reporter sur la partie post installation pour savoir comment retrouver sa configuration ou comment la customiser.
Les explications de post installation comprennent aussi des trucs pour pouvoir retrouver l’environnement utilisateur quel que soit l'OS sur lequel on boote.
Le partitionnement
On retrouve donc la partition nommée Suse (/dev/sda1) qui sera la cible de l'installation et la partition de swap devrait être détectée et utilisée automatiquement (à vérifier selon la distro).
suseinst3.png

On choisit la partition sda1, on la formate et lui assigne la partition / qui contient donc l'ensemble du système.
suseinst4.png
Cette partition sera référencée dans le boot loader et le fichier fstab sur le filesystem qui sera crée lors de l'installation.
Il n'y aura pas de confusion avec les autres partitions des autres systèmes car c'est le boot et les données sur la partition qui déterminent l'usage.
Au final on aura un partitionnement simple :
  1. /dev/sda1 => /
  2. /dev/sda6 => swap

Le boot loader
La deuxième partie est le boot loader qui va crée l'amorce de partitionnement qui pointera vers votre nouvel os.
Il faut installer grub (c'est parfois optionnel) sous peine de ne pas avoir de fichier de boot dans le repertoire /boot.
Je choisis dans l'exemple de l'installer sur la partition racine, cette étape va me faire perdre le boot loader qui est situé sur la partition /boot de Sabayon, je montrerai plus tard comment trouver ma configuration d'origine.
suseinst8-2.png
Ne pas oublier de créer un utilisateur générique à toute vos installations qui sera local (non partagé) appelé par exemple admin et qui possède les droits admin (sudo).
On termine l'installation et on reboote (à noter que Suse fait une installation en 2 étape, au reboot il faut la terminer).


Post Installation
Lorsque l'installation est terminée on a grub qui pointe vers notre nouvelle distribution. On reboot sur celle ci pour :
  1. Récuperer l'ancienne config GRUB
  2. Configurer le système pour accéder aux données et home dir
  3. Faire un mini tuning de l'install


Grub :
Examinons attentivement le grub.cfg (/boot/grub/grub.cfg) généré par Suse, il serait certainement identique quelque soit la distribution car il est généré par des commandes grub.
On peut d'ailleurs voir que sont présentes toutes les partitions bootables du disque (windows inclus) dans le fichier de config.
L'entrée opensuse est la suivante :
menuentry 'openSUSE 12.2' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-10d4ccec-af7f-41e1-818a-a557634f038e' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
         ......
        echo    'Loading Linux 3.4.6-2.10-desktop ...'
        linux   /boot/vmlinuz-3.4.6-2.10-desktop root=UUID=10d4ccec-af7f-41e1-818a-a557634f038e   resume=/dev/disk/by-id/ata-ST9500325AS_5VE922ZR-part6 splash=silent quiet showopts
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd-3.4.6-2.10-desktop
}
On y voit le texte du menu qui apparaît lors du boot, des chargements de modules, un peu de blahblah puis enfin les lignes intéressantes linux et initrd qui sont le boot en 2 étapes de linux.
  1. initrd
  2. Initrd est en fait un mini disk RAM (initramfs) qui permet de charger certains drivers (liés au disque, driver IDE/SCSI/RAID..) pour permettre ensuite d’accéder au filesystem ROOT (/) où est installé le système. Ce disque est en général lié au kernel mais on peut booter sur un initramfs d'une distro A pour lancer le boot d'une distro B.
  3. linux
  4. C'est là le noyau qui va nous permettre de booter le système réel avec un paramètre extrêmement important root= qui donne la partition / à utiliser et donc pour booter. Il est à noté que il n'est pas écrit /dev/sda1 mais UUID=10d4cc.... C'est un système d'identification des devices différent que certains apprécient, je le change systématiquement ensuite par /dev/sda (voir plus bas).
    On y voit aussi resume= c'est utilisé lors de l'hibernation pour copier les données RAM -> disque.
    Ensuite des options pour principalement faire joli avec un splash et cacher les messages.

Les autres entrée sont du même format (sauf windows), par exemple pour Sabayon j'ai :
linux   /boot/kernel-genkernel-x86_64-3.5.0-sabayon ro root=/dev/sda9 pcie_aspm=force i915.i915_enable_rc6=1 resume=/dev/sda6
initrd  /boot/initramfs-genkernel-x86_64-3.5.0-sabayon

Ces options sont en fait crée suivant les entrées du fichier /etc/default/grub et c'est la que nous allons faire un peu de tunning.
  1. Utiliser les nom de device /dev au lieu des UUID
  2. Décommenter la ligne GRUB_DISABLE_LINUX_UUID=true
  3. Ajout d'autres paramètres
  4. Si l'installeur ne le fait pas ajouter resume=/dev/... pour permettre le retour de mode d’hibernation ou d'autre parametres type quiet ou le splash screen de boot. Utiliser GRUB_CMDLINE_LINUX= ou si non présent GRUB_CMDLINE_LINUX_DEFAULT=
Ensuite pour regénérer le fichier grub.cfg, il faut utiliser la commande grub-mkconfig (ou grub2-mkconfig) -o /boot/grub/grub.cfg.
On peut aussi ensuite fixer la partition cible de boot, pour ce faire le mieux est de booter sur la distribution de référence pour grub puis de lancer la commande :
grub-install /dev/sda
On utilisera la partition /dev/sda sans chiffre pour désigner le disque et donc le secteur de boot.
Recupération ancienne configuration grub
Donc si on veut reprendre la configuration grub d'avant notre installation il faut rebooter sur la distrib voulue puis tout simplement lancer :
  1. grub-mkconfig -o /boot/grub/grub.cfg
  2. Pour mettre à jour la liste des OS, faire une vérification car grub2 a tendance à oublier des distribs.
  3. grub-install /dev/sda
  4. Va updater le boot loader afin de booter sur la parition de boot courante. /dev/sda est a adapter en fonction de votre machine.

Partager les données et home dir
Les fichiers de données sont dans une partition dédiée (appelée ici /data de la partition /dev/sda4) , l'idée est de mettre sur cette même partition les homes dir des utilisateurs que l'on voudra partager entre les distribs.
Pour ce faire il suffit d'utiliser des liens et de synchroniser les UID/GID.
Il faut dont établir une petite stratégie.
On choisit un groupe pour les utilisateurs locaux par exemple local et on donne un numéro ni trop grand ni trop petit exemple 10000.
De la même manière pour les utilisateurs, on part de 10000 pour pierre, le suivant sera 10001 pour paul ...
On créé ou modifie le user dans la distribution de référence et on change la home directory vers de pierre et paul vers /data/home/pierre et /data/home/paul.
mkdir /data/home
cd /home 
mv pierre /data/home/
mv paul /data/home/ 
ln -s /data/home/pierre
ln -s /data/home/paul
On ne déplace pas /home en entier pour pouvoir garder des utilisateurs locaux comme admin dont j'ai parlé lors de l'installation.
Après l'installation des distributions suivantes il suffit de recréer les utilisateurs/groupes à l'identique, monter la partition /data dans la fstab et faire les liens nécessaires pour retrouver son environnement et ses données.
Pour chaque nouvelle installation, il faut donc monter la partition dans la fstab et refaire les étapes précédentes.
sabayon ~ # grep /data /etc/fstab 
/dev/sda4               /data           ext4    defaults        0 2
Pour l’environnement de root j'ajoute ceci en fin du /root/.bashrc des nouvelles installations :
if [ -f /data/system/bashrc ] ;
then
        . /data/system/bashrc
fi
Pour les utilisateurs de KDE, notez que certaines distributions mettent la home KDE dans .kde (debian like) et d'autres dans .kde4 (gentoo, arch, suse), c'est assez pratique car les versions de kde debian/ubuntu sont moins recentes.
Un exemple de script de synchro est disponible ici.