Outils pour utilisateurs

Outils du site


net-sys:admin:pivot_root

Procédure de récupération du système via un live take-over

Retrait de l'inutile

Fermer les services superflus, les logiciels qui vont gêner (bureau, applications user, sessions diverses, le serveur web etc).

Démonter ensuite les points de montage superflus (/home etc).

Il ne doit alors rester que la racine en montage disque.

Création de la racine temporaire

Créer et copier les fichiers nécessaires à la constitution d'un système basique :

mkdir /tmp/tmproot
mount -t tmpfs none /tmp/tmproot
mkdir /tmp/tmproot/{proc,sys,dev,run,usr,var,tmp,oldroot}
cp -ax /{bin,etc,mnt,sbin,lib,lib64} /tmp/tmproot/
cp -ax /usr/{bin,sbin,lib,lib64} /tmp/tmproot/usr/
cp -ax /var/{account,empty,lib,local,lock,nis,opt,preserve,run,spool,tmp,yp} /tmp/tmproot/var/

Compter environ 4 à 5 Gio pour un système bureautique. Il vous faudra donc une certaine quantité de ram… Ou savoir faire le tri.

Sinon il est possible de voir et récupérer une archive Stage3 gentoo en lieu et place de la copie complète du système actuel, qui peut être trop gros pour la taille de la mémoire vive (l'archive stage3 pèse quelques centaines de Mio maximum)

Passage du flambeau

Vous pouvez maintenant basculer depuis votre session :

mount --make-rprivate / # necessary for pivot_root to work
pivot_root /tmp/tmproot /tmp/tmproot/oldroot
for i in dev proc sys run; do mount --move /oldroot/$i /$i; done

Relancez ensuite le démon SSH pour vérifier que tout fonctionne bien (service sshd restart suivi d'un service sshd status)

Nettoyage des restes

Vérifier ce qui tourne encore sur l'ancienne racine avec fuser -vm /oldroot ou lsof /oldroot. Fermer les programmes en question (ou les relancer si ce sont des services utiles). Relancer ensuite init via la commande telinit u (ou init u si cette dernière ne fonctionne pas). Normalement à ce stade la commande mentionnée plus haut ne doit plus rien lister. Vous pouvez alors démonter la racine d'origine : umount -vR /oldroot

Retour

Vous pouvez retourner au système normal en refaisant un pivot_root :

mount <blockdev> /oldroot
mount --make-rprivate / # again
pivot_root /oldroot /oldroot/tmp/tmproot
for i in dev proc sys run; do mount --move /tmp/tmproot/$i /$i; done

Redémarrez le démon ssh (service sshd restart puis service sshd status) puis progressivement nettoyer les processus restants (cf point précédent en remplaçant /oldroot par /tmp/tmproot)

Remontez les FS manquants avec mount -va puis exécutez la commande suivante :

mount --make-rshared /

Vous pouvez relancer le runlevel normalement (init 3 ou rc default) pour redémarrer les services manquants.

net-sys/admin/pivot_root.txt · Dernière modification: 2017-11-15 22:38 par electron