Quelle est la bonne façon de préparer chroot pour récupérer une installation Linux cassée?

52

Cette question concerne des questions qui sont posées souvent. La procédure est fréquemment mentionnée ou liée à un site externe, mais elle n’est pas souvent énoncée clairement et correctement. Dans le but de concentrer des informations utiles en un seul endroit, cette question vise à fournir une référence claire et correcte pour cette procédure.


Quelles sont les étapes appropriées pour préparer un environnement chroot pour une procédure de récupération?

Dans de nombreux cas , il est préférable de réparer une installation Linux endommagée depuis l’installation. Mais si le système ne démarre pas, comment le réparer de l'intérieur?

Supposons que vous parveniez à démarrer sur un autre système. Une fois là-bas, vous devez accéder à votre installation endommagée afin de la réparer. Beaucoup de récupération Comment-Tos recommandons l' utilisation de chroot afin d'exécuter des programmes comme si vous démarré votre ordinateur dans l'installation cassée.

  • Quelle est la procédure de base?
  • Existe-t-il des meilleures pratiques acceptées à suivre?
  • Quelles variables faut-il prendre en compte pour adapter les étapes de préparation de base à une tâche de récupération particulière?

Comme il s'agit d'un wiki de communauté, n'hésitez pas à éditer cette question pour l'améliorer également.

quixote
la source

Réponses:

72

Voici quelques ressources:

"Changer de racine" ou "chrooter" est une méthode permettant de zoomer sur une partie de votre système de fichiers, de sorte que, par exemple, fasse /pathréférence à ce qui était auparavant accessible à /mnt/path. La "racine" dans l'expression "chroot" fait référence au système de fichiers racine /, pas à l'utilisateur root. (Cependant, vous aurez généralement besoin des privilèges d’utilisateur root pour pouvoir chrooter.)

Préparation

  • Toutes les étapes de ce guide devront être effectuées en tant qu'utilisateur root.

  • Nous supposons que votre disque dur est à / dev / sda1 et que son type de fichier est ext3. Si vous ne connaissez ni l'emplacement ni le type de fichier de votre disque, lisez le résultat de fdisk -l.

  • Assurez-vous que les architectures du système que vous avez démarré (par exemple, un LiveCD 32 bits) et du système que vous souhaitez entrer (par exemple, une installation 32 bits sur votre disque dur) correspondent. Vous pouvez déterminer l'architecture que vous avez démarrée avec using uname -m.

  • Assurez-vous que tous les modules du noyau dont vous avez besoin ont été chargés.

  • Configurez votre réseau si vous en avez besoin (par exemple, pour installer des packages mis à jour).

  • Initialisez votre partition d'échange si nécessaire (par exemple, swapon /dev/sda3).

Effectuer le chroot

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

Si votre /bootrépertoire se trouve sur une partition différente de la vôtre /et que vous souhaitez y manipuler des fichiers (par exemple, si vous travaillez avec GRUB, effectuez une mise à niveau du noyau, etc.), vous devrez également monter cette partition. Si c'est à / dev / sda2 et que son type de fichier est ext2, alors faites:

mount -t ext2 /dev/sda2 /mnt/boot

De même pour toutes les autres parties de votre système de fichiers ( /var, /usr) qui résident sur des partitions distinctes, mais auxquelles vous devez accéder. Généralement, lorsque vous chrootez pour réparer quelque chose que vous n'avez pas besoin d'accéder à / home, vous n'avez donc pas besoin de vous en préoccuper.

(Il est également possible de monter des systèmes de fichiers après avoir chrooté, mais il est plus judicieux de le faire auparavant. La raison en est que si vous le faites après, l'environnement extérieur / noyau ne saura rien sur les systèmes de fichiers montés; les démonter avant de quitter le chroot, le système ne saura pas non plus les démonter à la fermeture, ce qui pourrait endommager ces systèmes de fichiers.)

Si vous avez configuré votre réseau et souhaitez l'utiliser dans le système en mode chroot, copiez-le /etc/resolv.confafin de pouvoir résoudre les noms de domaine:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

Vous êtes maintenant prêt à passer au système de fichiers monté:

chroot /mnt /bin/bash

(Si cela renvoie une erreur chroot: cannot run command '/bin/bash': Exec format error, cela indique généralement que vous avez démarré avec une architecture (par exemple, x86_32) et que vous essayez de chrooter vers une autre (par exemple, x86_64). La solution consiste à utiliser un LiveCD possédant la même architecture que le système que vous souhaitez utiliser. chroot dans.)

À ce stade, vous exécutez toujours le noyau avec lequel vous avez démarré, mais tous les chemins /pathrenvoient à ce qui était auparavant /mnt/path.

Si vous faites quelque chose avec GRUB, vous devez vous assurer que votre /etc/mtabfichier est à jour:

grep -v rootfs /proc/mounts > /etc/mtab

Il pourrait également être utile à ce stade:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

Faites votre sale boulot

À ce stade, vous pouvez effectuer le dépannage que vous devez effectuer:

  • resintaller GRUB sur le MBR de votre disque
  • réinitialiser un mot de passe oublié
  • effectuer une mise à niveau (ou rétrogradation) du noyau
  • reconstruire votre disque initram
  • réparer votre / etc / fstab
  • réinstaller des paquets en utilisant votre gestionnaire de paquets
  • peu importe

Nettoyer

Lorsque vous avez terminé, assurez-vous que tous les programmes en cours sont arrêtés. Puis quittez le chroot:

exit

Maintenant démontez toutes les partitions que vous avez montées:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

Enfin, essayez de démonter votre disque dur:

umount /mnt

Si vous obtenez une erreur indiquant que / mnt (ou toute autre partition) est occupé, cela peut signifier l'une des deux choses suivantes:

  • Un programme a été laissé en cours d'exécution à l'intérieur du chroot.

  • Ou plus fréquemment: un point de montage existe toujours sur ce montage. Par exemple, / mnt / usr est toujours monté lorsque vous essayez de démonter / mnt.

Dans ce dernier cas, démontez simplement le point de montage incriminé en premier. Pour obtenir un rappel de tous les points de montage actuels, exécutez-le mountsans aucun paramètre.

Finalement:

reboot
dubiousjim
la source
10
En guise de préparation, j'ai tendance à laisser un script appelé chroot.shà la racine de chaque système que j'utilise, dont le contenu correspond plus ou moins à ce qui précède. Quand j'ai besoin de chrooter dans ce système depuis un LiveCD ou quelque chose du genre, je monte simplement le système de fichiers racine et lance le script chroot. Pas plus google frénétique pour les bonnes commandes.
Ryan Thompson
4
Vous, monsieur, avez sauvé mon bacon - un brillant exposé. Dans de telles situations, j'aimerais que SO ait un bouton +1000.
Zelanix
1
Utilisez ceci: SHELL=/bin/bash chroot /mntsi le shell par défaut de livecd n'est pas dans l'environnement chrooté (par exemple, defalut zsh de systemrescuecd), il convient de le réparer, par exemple !dans Vim.
Alois Mahdal
J'ai découvert que vous devez également monter /runces jours avec mount --bind /run /mnt/run.
Cengique le