Est-ce possible ?
Bien, la plupart des utilitaires triviaux et importants sont installés dans /bin
et maintenant vous avez perdu l'accès à tous. En fait, si vous redémarrez, votre système ne sera plus capable de démarrer.
Quoi qu'il en soit, nous allons résoudre le problème et faire en sorte que /bin
Le contenu du site est aussi proche que possible de ce qu'il était. La seule différence serait certains liens symboliques que nous allons également corriger.
Comment ?
Premièrement, nous devons chroot
dans votre système brisé, mais avec une petite différence ! Après cela, nous obtiendrons une liste des paquets installés sur votre système qui ont un fichier installé dans le dossier de l'utilisateur. /bin
puis nous allons seulement télécharger les paquets nécessaires et extraire les fichiers nécessaires dans le répertoire /bin
. Ensuite, nous aurons terminé.
Par exemple, après chroot
nous pouvons obtenir une liste des paquets qui ont installé des fichiers dans le dossier de l'utilisateur. /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 lister les fichiers installés par ces paquets dans /bin
.
Ensuite, nous créons simplement une liste de tous les paquets qui nous sont nécessaires, puis nous les téléchargeons et les extrayons dans le répertoire de l'entreprise. /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 paquets installés sur notre système, car le faire manuellement est juste une folie.
J'ai donc écrit un script qui fait tout ce dont nous avons besoin. Il trouve tous les paquets nécessaires pour que nous puissions restaurer /bin
nous montre le nom de chaque paquet et de leurs fichiers associés qui appartiennent à /bin
. Voici une capture d'écran :
À la fin, nous choisissons de réinstaller tous les paquets ou de télécharger et d'extraire uniquement les fichiers nécessaires à l'installation. /bin
(qui est l'option recommandée) :
Vous pouvez prendre une copie de ce script ou le télécharger directement .
Commençons
chroot
Démarrez votre système avec un disque vivant qui a 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 connexion à Internet, alors copiez resolv.conf
de l'Ubuntu live 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 ex :
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
Monter les autres chemins nécessaires :
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Et voici le différence mineure comment pouvons-nous chroot
à un système brisé quand il n'y a pas /bin
là-dedans ? Quel Shell doit-on exécuter ?
Donc, créez un répertoire temporaire pour la poubelle, par exemple : nommé bintmp
dans la racine de votre système brisé :
mkdir /mnt/bintmp
Puis lier le live /bin
dans ce domaine :
mount --bind /bin /mnt/bintmp
Chroot dans le système tout en définissant le /bintmp/bash
comme votre login Shell :
chroot /mnt /bintmp/bash
Exporter le /bintmp
comme votre 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 commencera à restaurer le /bin
et nous avons presque terminé.
Une fois que c'est fait, utilisez CTRL + D pour sortir de chroot
et démonter les chemins montés :
umount -R /mnt
Redémarrez le système.
Restaurer les liens dans /bin
Maintenant, presque tous les fichiers dans /bin
sont de retour, sauf environ 5 liens symboliques qui sont gérés par update-alternatives
.
Dans votre système de fonctionnement, exécutez :
sudo update-alternatives --all
Il vous pose quelques questions ; vous pouvez simplement appuyer sur ENTER de les accepter tous.
Et maintenant, nous avons terminé.