68 votes

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

Cette question se rapporte à des questions qui sont souvent posées. La procédure est fréquemment mentionnée ou liée hors site, mais elle n'est pas souvent énoncée clairement et correctement. Dans le but de concentrer les 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 à suivre pour préparer un chroot environnement pour une procédure de récupération ?

Sur beaucoup de situations la réparation d'une installation Linux défectueuse doit être effectuée depuis l'intérieur de l'installation. Mais si le système ne démarre pas, comment le réparer depuis l'intérieur ?

Supposons que vous parveniez à démarrer sur un autre système. Une fois sur place, vous devez accéder à votre installation défectueuse afin de la réparer. De nombreux sites récupération Comment faire recommande d'utiliser chroot afin d'exécuter des programmes comme si vous étiez réellement démarré dans l'installation cassée.

  • Quelle est la procédure de base ?
  • Existe-t-il des pratiques exemplaires reconnues à suivre ?
  • Quelles variables doivent être prises 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 communautaire, n'hésitez pas à modifier cette question pour l'améliorer également.

93voto

Luc Points 225

Voici quelques ressources :

Le "changement de racine" ou "chrooting" est une méthode permettant de zoomer sur une partie de votre système de fichiers, de sorte que, 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. / et non à l'utilisateur root. (Bien que typiquement vous aurez besoin des privilèges de l'utilisateur root afin de chrooter).

Préparation

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

  • Supposons que votre disque dur se trouve sur /dev/sda1 et que son type de fichier est ext3. Si vous ne connaissez pas la localisation et le type de fichier de votre disque, lisez la sortie de fdisk -l .

  • Assurez-vous que les architectures du système sur lequel vous avez démarré (par exemple, c'est un LiveCD 32bit) et du système dans lequel vous souhaitez entrer (par exemple, c'est une installation sur votre disque dur). Vous pouvez déterminer l'architecture avec laquelle vous avez démarré en utilisant 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 les paquets mis à jour).

  • Initialiser votre partition swap si nécessaire (par exemple, swapon /dev/sda3 ).

Exécution du 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 /boot se trouve sur une partition différente de celle de votre / et que vous voulez manipuler des fichiers dessus (par exemple, si vous travaillez avec Grub, effectuez une mise à jour du noyau, etc.), vous devrez également monter cette partition. Si elle se trouve sur /dev/sda2 et que son filetype 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 se trouvent sur des partitions séparées mais auxquelles vous devez accéder. En général, lorsque vous faites un chrootage pour réparer quelque chose, vous n'avez pas besoin d'accéder à /home, donc vous n'avez pas besoin de vous en préoccuper.

(Il est également possible de monter des systèmes de fichiers après avoir effectué un chrootage, mais il est plus judicieux de le faire avant. La raison en est que si vous le faites après, l'environnement extérieur/kernel ne connaîtra pas les systèmes de fichiers montés, donc si vous oubliez de les monter avant de quitter le chroot, le système ne saura pas non plus les monter lorsqu'il s'éteindra. Cela pourrait endommager ces systèmes de fichiers).

Si vous avez configuré votre réseau et que vous voulez l'utiliser dans le système chrooté, copiez sur /etc/resolv.conf afin que vous puissiez résoudre les noms de domaine :

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

Maintenant vous êtes prêt à vous déplacer dans le 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 vous connecter à une autre (par exemple x86_64). La solution est d'utiliser un LiveCD qui a la même architecture que le système dans lequel vous voulez chrooter).

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

Si vous devez faire quoi que ce soit avec Grub, vous devez vous assurer que votre /etc/mtab est à jour :

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

Il pourrait également être utile à ce stade de faire :

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

Faites votre sale boulot

À ce stade, vous pouvez effectuer tous les dépannages dont vous avez besoin :

  • resintall Grub au MBR de votre disque
  • réinitialiser un mot de passe oublié
  • effectuer une mise à niveau du noyau (ou une mise à niveau inférieure)
  • reconstruire votre initramdisk
  • corrigez votre /etc/fstab
  • réinstaller les paquets en utilisant votre gestionnaire de paquets
  • quoi que ce soit

Le nettoyage

Lorsque vous avez terminé, assurez-vous que tous les programmes en cours se sont arrêtés. Ensuite, 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ée, cela peut signifier deux choses :

  • Un programme a été laissé en 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 l'on essaie de démonter /mnt.

Dans ce dernier cas, il suffit de démonter d'abord le point de montage incriminé. Pour obtenir un rappel de tous les points de montage actuels, exécutez mount sans paramètres.

Enfin :

reboot

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X