C'est possible?
Eh bien, la plupart des utilitaires les plus triviaux et les plus importants sont installés /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 /bin
le contenu aussi proche que possible de l'endroit où il se trouvait. La seule différence serait des liens symboliques que nous corrigerons également.
Comment?
Tout d’abord, nous devrions chroot
intégrer votre système défectueux, mais avec une différence mineure ! Après cela, nous obtiendrons une liste des packages installés sur votre système contenant un fichier dans le /bin
répertoire, puis nous ne téléchargerons que les packages nécessaires et en extrairons les fichiers nécessaires /bin
. Ensuite, nous aurons fini.
Par exemple, après chroot
, nous pouvons obtenir une liste des paquets qui ont des fichiers installés en /bin
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 lister les fichiers installés par ces paquets dans /bin
.
Ensuite, nous créons simplement une liste de tous les packages nécessaires, puis nous les téléchargeons et les extrayons /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 à restaurer /bin
, nous indique le nom de chaque package et les fichiers associés auxquels il appartient /bin
. Voici une capture d'écran:
À la fin, nous choisissons de réinstaller tous les packages ou seulement de télécharger et d'extraire les fichiers nécessaires dans /bin
(ce qui est l'option recommandée):
Vous pouvez récupérer une copie de ce script ou le télécharger directement .
Commençons
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 root
système de fichiers (pour moi c'est /dev/sda1
):
mount /dev/sda1 /mnt
Nous aurons besoin d'une connectivité à Internet, alors copiez resolv.conf
depuis Ubuntu en direct sur votre partition racine montée:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Maintenant, copiez 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
créer un système défectueux alors qu’il n’ya pas de /bin
répertoire dans ce répertoire? Quel shell devrions-nous exécuter?
Créez donc un répertoire bin temporaire. Exemple: nommé bintmp
dans la racine de votre système endommagé:
mkdir /mnt/bintmp
Ensuite, liez le live /bin
dans ça:
mount --bind /bin /mnt/bintmp
Chroot dans le système en définissant le /bintmp/bash
comme shell de connexion:
chroot /mnt /bintmp/bash
Exportez la /bintmp
comme PATH
variable d’environnement:
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+ Dpour sortir de l’ chroot
environnement et démonter les chemins montés:
umount -R /mnt
Redémarrez le système.
Restaurer les liens au sein /bin
Maintenant, presque tous les fichiers du /bin
répertoire 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 te pose quelques questions; vous pouvez simplement appuyer ENTERpour les accepter tous.
Et maintenant nous avons fini.
/bin
Ubuntu, n’est-ce pas simplement un lien symbolique vers/usr/bin
ces jours-ci? Donc, tout ce que vous devez faire est de rétablir le lien symbolique?