Ist es möglich?
Nun, die meisten einfachen und wichtigen Hilfsprogramme sind in installiert /bin
, und jetzt haben Sie den Zugriff auf alle verloren. Tatsächlich kann Ihr System nach einem Neustart nicht mehr gestartet werden.
Wie auch immer, wir werden das Problem beheben und den /bin
Inhalt so nah wie möglich an den Ort bringen, an dem er sich befand. Der einzige Unterschied wären einige symbolische Links, die wir ebenfalls reparieren werden.
Wie?
Zuerst sollten wir chroot
in Ihr kaputtes System eindringen, aber mit einem kleinen Unterschied ! Danach erhalten wir eine Liste der auf Ihrem System installierten Pakete, auf denen eine Datei im /bin
Verzeichnis installiert ist. Anschließend laden wir nur die benötigten Pakete herunter und extrahieren die erforderlichen Dateien in dieses Verzeichnis /bin
. Dann sind wir fertig.
Zum Beispiel können chroot
wir nachher eine Liste von Paketen erhalten, die Dateien installiert haben, in /bin
denen verwendet wird:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Und wir können auch verwenden:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
um die installierten Dateien nach diesen Paketen aufzulisten /bin
.
Dann erstellen wir einfach eine Liste aller Pakete, die für uns notwendig sind, laden sie herunter und extrahieren sie /bin
mit etwas wie:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Wir müssen jedoch ein Skript verwenden, um alle installierten Pakete auf unserem System zu überprüfen, da es nur Wahnsinn ist, dies manuell zu tun.
Also habe ich ein Skript geschrieben, das alles tut, was wir brauchen. Es findet alle für die Wiederherstellung erforderlichen Pakete /bin
, zeigt den Namen jedes Pakets und die zugehörigen zugehörigen Dateien an /bin
. Hier ist ein Screenshot:
Am Ende entscheiden wir uns, alle Pakete neu zu installieren oder nur die erforderlichen Dateien herunterzuladen und zu extrahieren /bin
(was die empfohlene Option ist):
Sie können eine Kopie dieses Skripts herunterladen oder direkt herunterladen .
Lasst uns beginnen
Chroot
Booten Sie Ihr System mit einer Live-Festplatte, die dieselbe Architektur hat wie Ihr installiertes Ubuntu, öffnen Sie ein Terminal und erhalten Sie root-Zugriff:
sudo -i
Hängen Sie Ihr root
Dateisystem ein (für mich ist es /dev/sda1
):
mount /dev/sda1 /mnt
Wir benötigen eine Verbindung zum Internet, kopieren Sie also resolv.conf
von Ubuntu live auf Ihre gemountete Root-Partition:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Kopieren Sie nun das Skript irgendwo auf die gemountete Partition, zB:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
oder Sie können es herunterladen mit wget
, etc. wie:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Andere notwendige Pfade einhängen:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Und hier ist der kleine Unterschied : Wie können wir chroot
zu einem kaputten System kommen, wenn sich dort kein /bin
Verzeichnis befindet? Welche Shell sollen wir ausführen?
Erstellen Sie also ein temporäres bin-Verzeichnis. zB: benannt bintmp
in Ihrem kaputten Systemstamm:
mkdir /mnt/bintmp
Dann binde das Leben /bin
in das:
mount --bind /bin /mnt/bintmp
Starten Sie das System, während Sie die /bintmp/bash
als Login-Shell festlegen:
chroot /mnt /bintmp/bash
Exportieren Sie die /bintmp
als PATH
Umgebungsvariable:
export PATH=/bintmp:$PATH
Geben Sie dem Skript das ausführbare Bit:
chmod +x restore-bin.sh
Führen Sie das Skript aus:
./restore-bin.sh
Warten Sie, bis die Suche abgeschlossen ist, und beantworten Sie die im Screenshot angezeigte Frage. Es wird anfangen, das wiederherzustellen /bin
und wir sind fast fertig.
Verwenden Sie anschließend CTRL+ D, um die chroot
Umgebung zu verlassen und die gemounteten Pfade zu entfernen:
umount -R /mnt
Starten Sie das System neu.
Wiederherstellung der Links innerhalb /bin
Jetzt sind fast alle Dateien im /bin
Verzeichnis zurück, mit Ausnahme von 5 symbolischen Links, die von verwaltet werden update-alternatives
.
Führen Sie in Ihrem laufenden System Folgendes aus:
sudo update-alternatives --all
Es stellt Ihnen einige Fragen; Sie können einfach drücken ENTER, um alle zu akzeptieren.
Und jetzt sind wir fertig.
/bin
Ubuntu nicht nur ein Symlink zu/usr/bin
diesen Tagen? Alles was Sie tun müssen, ist den Symlink zurückzusetzen?