web-dev-qa-db-fra.com

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

Cette question concerne des questions fréquemment posées. 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 plusieurssituations , il est préférable de réparer une installation Linux endommagée de l'intérieur. 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 récupérationHow-Tos recommande d'utiliser chroot afin d'exécuter des programmes comme si vous étiez réellement démarré dans l'installation endommagé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.

50
quack quixote

Voici quelques ressources:

"Changer de racine" ou "chrooter" est une méthode permettant de zoomer sur une partie de votre système de fichiers. Ainsi, par exemple, /path fera ré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 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 de swap 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 répertoire /boot se trouve sur une partition différente de votre / et que vous souhaitez manipuler des fichiers dessus (par exemple, si vous travaillez avec GRUB, effectuez une mise à niveau du noyau, etc.), vous devrez également monter ce fichier. cloison. 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 que vous souhaitez l'utiliser dans le système chrooté, copiez-le sur /etc/resolv.conf afin 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 souhaité. chroot dans.)

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

Si vous faites quelque chose avec GRUB, vous devez être sûr que votre fichier /etc/mtab 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:

  • resintall 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 mount sans paramètres.

Finalement:

reboot
71
dubiousjim