Est-ce possible?
Eh bien, la plupart des utilitaires triviaux et importants sont installés dans /bin
, et vous avez maintenant perdu l'accès à tous. En fait, si vous redémarrez, votre système ne pourra plus démarrer.
Quoi qu'il en soit, nous allons résoudre le problème et rendre le contenu de /bin
aussi proche que possible de celui où il se trouvait. La seule différence serait des liens symboliques que nous corrigerons aussi.
Comment?
Premièrement, nous devrions chroot
dans votre système endommagé, mais avec une différence mineure ! Après cela, nous obtiendrons une liste des paquetages installés sur votre système contenant un fichier installé dans le répertoire /bin
. Nous allons seulement télécharger les paquetages nécessaires et extraire les fichiers nécessaires dans /bin
. Ensuite, nous aurons fini.
Par exemple, après chroot
, nous pouvons obtenir la liste des paquetages contenant des fichiers installés dans /bin
en utilisant:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Et nous pouvons aussi utiliser:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
pour répertorier les fichiers installés par ces packages dans /bin
.
Ensuite, nous créons simplement une liste de tous les paquetages nécessaires, puis nous les téléchargeons et les extrayons dans /bin
avec quelque chose comme:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Cependant, nous devons utiliser un script pour vérifier tous les packages installés sur notre système, car le faire manuellement est une folie.
J'ai donc écrit un script qui fait tout ce dont nous avons besoin. Il trouve tous les packages nécessaires à la restauration de /bin
, nous indique le nom de chaque package et leurs fichiers associés appartenant à /bin
. Voici une capture d'écran:

Àlafin,nousavonschoisideréinstallertouslespaquetagesouseulementdetéléchargeretd'extrairelesfichiersnécessairesdans/bin
(cequiestl'optionrecommandée):

Vouspouvezrécupérer une copie de ce script ou téléchargez-le directement .
Permet de commencer
chroot
Démarrez votre système avec un disque live ayant la même architecture que votre Ubuntu installé, ouvrez un terminal et obtenez un accès root:
sudo -i
Montez votre système de fichiers root
(pour moi c’est /dev/sda1
):
mount /dev/sda1 /mnt
Nous aurons besoin de la connectivité à Internet. Copiez donc resolv.conf
de Ubuntu en direct sur votre partition racine montée:
cp /etc/resolv.conf /mnt/etc/resolv.cof
Copiez maintenant le script quelque part sur la partition montée, par exemple:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
ou vous pouvez le télécharger en utilisant wget
, etc. comme:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Montez les autres chemins nécessaires:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Et voici la différence mineure : comment pouvons-nous chroot
accéder à un système en panne alors qu'il n'y a pas de répertoire /bin
dans ce répertoire? Quel shell devrions-nous exécuter?
Créez donc un répertoire bin temporaire. par exemple: nommé bintmp
dans la racine de votre système endommagé:
mkdir /mnt/bintmp
Liez ensuite le live /bin
à celui-ci:
mount --bind /bin /mnt/bintmp
Connectez-vous au système en définissant /bintmp/bash
comme shell de connexion:
chroot /mnt /bintmp/bash
Exportez le /bintmp
en tant que variable d’environnement PATH
:
export PATH=/bintmp:$PATH
Donnez au script le bit exécutable:
chmod +x restore-bin.sh
Exécutez le script:
./restore-bin.sh
Attendez que la recherche soit terminée puis répondez à la question que nous avons vue dans la capture d'écran. Il va commencer à restaurer le /bin
et nous avons presque fini.
Ensuite, utilisez CTRL + D pour sortir de l'environnement chroot
et démonter les chemins montés:
umount -R /mnt
Redémarrez le système.
Restauration des liens dans /bin
Maintenant, presque tous les fichiers du répertoire /bin
sont de retour, sauf environ 5 liens symboliques gérés par update-alternatives
.
Dans votre système en cours d'exécution, exécutez:
sudo update-alternatives --all
Il vous pose quelques questions. vous pouvez simplement appuyer sur ENTER pour les accepter tous.
Et maintenant nous avons fini.