Ich habe gerade "/ bin" gelöscht. Was ist der beste Weg, um sich zu erholen?

10

Ich bin gerade gelaufen (nicht absichtlich!) rm -rf /bin.

Ich habe den Computer hochgefahren und benutze Finnix, um zu versuchen, mich davon zu erholen. Ich habe das Laufwerk erfolgreich gemountet und bestätigt, dass der gesamte /binOrdner gelöscht wurde.

Ist es möglich, dies wiederherzustellen, ohne das Betriebssystem neu zu installieren?

Ich denke, ich könnte eine VM mit demselben Betriebssystem und derselben Architektur (Ubuntu Server 11.10 Alpha Release, x86) einrichten und alle Pakete installieren, die ich auf dem Server installiert hatte, und dann einfach den /binOrdner kopieren .

Ob das funktioniert? Bin ich besser dran, wenn ich gerade von vorne anfange?

Tom Marthenal
quelle

Antworten:

15

Im Allgemeinen würde ich mich zu einer Neuinstallation neigen (von den Backups, die Sie unbedingt haben sollten). Aber ich fühle mich hackisch, also hier ein anderer Weg (vorausgesetzt, Ihr System ist unter montiert /target):

  1. Rufen Sie eine Liste aller installierten Pakete ab, in denen sich Dateien befinden /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (Auf meinem Debian Squeeze-System sind das insgesamt 34 Pakete, von denen so ziemlich alle Kern sind)

  2. Laden Sie jedes dieser Pakete herunter (ich konnte mir nicht die Mühe machen, dieses Bit zu skripten, also klicken Sie einfach auf packages.ubuntu.com und laden Sie sie irgendwo unter herunter /target). Wenn Sie Glück haben, schweben einige der Pakete möglicherweise noch herum /target/var/cache/apt/archives.

  3. Führen Sie für jedes Paket aus /target/usr/bin/dpkg -x <package> /target. Ich bin mir ziemlich sicher, dass dpkgalles heutzutage in sich geschlossen ist und nichts an /binsich rufen sollte .

Sobald Sie das System wieder in Betrieb genommen haben, sollten Sie sicherstellen apt-get --reinstall install <all the packages from step 1>, dass die Versionen der Pakete ausgeführt werden , da (da Sie eine Vorabversion ausführen, die laut Sysadmin Cat auf Produktionssystemen ein No-No ist) Sie haben sich gerade von denen unterschieden, die zuvor auf dem System waren, und Sie sollten sicherstellen, dass das System genau weiß, was was ist.

womble
quelle
Schöne Antwort, aber fehlt mir etwas? Würden Sie nicht dpkg-query -S /bindasselbe tun wie Ihre grep .. | sedStrophe? Wenn die Liste bereinigt werden muss, um einen Paketnamen pro Zeile aufzulisten, dpkg-query -S /bin | sed 's/\,\ /\n/g'funktioniert dies (obwohl in der letzten Zeile ein zusätzliches: / bin vorhanden ist).
Janne Pikkarainen
1
Ja, das würde es - ich habe versucht, die Menge der im Zielsystem ausgeführten Dinge zu minimieren, falls irgendetwas ausgeführt werden sollte /bin, und ich wollte mich nicht auf irgendetwas Debian-spezifisches im Rettungssystem verlassen, um es als zu machen allgemein wie möglich für zukünftige Finder.
Womble
Es scheint, dass dies nur eine Liste der wichtigsten Systemdienstprogramme ist - gibt es nicht auch andere Pakete, in denen Dateien enthalten sind /bin? Sollte ich jedes Paket auf meinem System neu installieren oder nur die, die als Ergebnis der Liste generiert wurden? (Auch: Danke, ich liebe dich!)
Tom Marthenal
1
In der Regel enthalten nur wichtige Pakete Dateien. Die /binmeisten Pakete sollten alle ihre Daten enthalten /usr. Auf meinem System befinden sich nur ein paar nicht wesentliche Pakete (z. B. zsh) in der /binListe "hat Sachen in ". Upvotes sind übrigens eine großartige Möglichkeit, Liebe zu zeigen ...
womble
1
Ich habe Ihre Anweisungen befolgt und sie haben einwandfrei funktioniert - mein Server ist wieder betriebsbereit. Vielen Dank für die Hilfe!
Tom Marthenal
5

Während Ihre Strategie möglicherweise funktioniert (es gibt gute Chancen dafür, mehr, wenn Sie nach dem Zurückkopieren des bin-Verzeichnisses alle Pakete in Ihrem System erneut installieren), kann dies in Zukunft zu Problemen führen, da Sie möglicherweise Probleme haben ein instabiler Server.

Wenn mir das passiert wäre, würde ich das tägliche Backup neu installieren und wiederherstellen. Sie haben ein tägliches Backup - einen Disaster Recovery-Plan - nicht wahr?

Falls Sie keinen Notfallwiederherstellungsplan hatten, würde ich vorschlagen, alle Konfigurationsdateien und die Daten, die Sie beibehalten möchten, zu sichern und eine Neuinstallation durchzuführen. Auf diese Weise können Sie sicher sein, dass Sie wieder mit einem stabilen Server enden.

hmontoliu
quelle
1
Vermutung, seit er hier gepostet hat, wie man den Ordner / bin wiederherstellt, hat er kein Backup.
Goez
Leider habe ich kein tägliches Backup. Das Bash-Skript, das ich damals schrieb, war ironischerweise ein tägliches Backup-Skript. Sieht so aus, als würde ich neu installieren - danke für den Rat.
Tom Marthenal
Keine Neuinstallation erforderlich; siehe meine Antwort.
womble
Dateisystem-Snapshots sind äußerst nützlich, um solche Probleme wiederherzustellen. Leider implementieren ext2 / 3/4 Dateisysteme diese nicht und dies mit LVM zu tun hat einen großen Leistungsverlust. Wenn ich versehentlich / bin auf meiner FreeBSD-Box lösche, mounte ich einfach einen früheren Snapshot und kopiere die Dateien zurück in die Live-Version des Dateisystems. OS X hat dies angeblich auch (dort heißt es "Zeitmaschine").
Snap
3

Ich würde versuchen, eine VM zu erstellen und dann den Inhalt /binauf Ihren beschädigten Computer zu kopieren . Das sollte dich zum Laufen bringen. Dann renne

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

Das sollte alle Pakete neu installieren, die auf Ihrem System waren.

user9517
quelle
1

Wenn Sie Zugriff auf den Computer haben, können Sie am einfachsten das Dateisystem bereitstellen und alle Ihre Daten sichern (nur als Vorsichtsmaßnahme).

Dann können Sie Ubuntu wie eine normale Installation neu installieren. Im Prinzip sollten alle Ihre Daten (Home-Verzeichnis usw. und var) noch vorhanden sein.

Es gibt eine Möglichkeit, alle Pakete neu zu installieren, sodass / bin neu gefüllt wird, aber das ist ziemlich kompliziert.

Joris
quelle
0

Die Dateien sind weg. Sie können zwar versuchen, Dateien wiederherzustellen, ich würde es jedoch nicht empfehlen.

Hinweis: Ich verwende Ubuntu nicht (und habe Debian-Distributionen eine Weile nicht verwendet). Allerdings habe ich in der Vergangenheit verschiedene Distributionen wiederhergestellt, die alle einem ähnlichen Szenario folgen.

Ihre beste Vorgehensweise:

  • booten von liveCD
  • Mithilfe von LiveCD können Sie Ihr System an einem Ort einbinden (z. B. /mnt/mint).
  • mit dpkg Abfrage alle installierten Pakete:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • Installieren Sie alle diese Pakete mit apt-get in Ihrem / mnt / mint-Ziel.
# apt-get -o RootDir = / mnt / mint .... 
  • (Alternative Nr. 1) Möglicherweise müssen Sie Deboostrap durchführen /mnt/mint- nicht sicher
  • (Alternative Nr. 2) Sie können /binInhalte von liveCD auf kopieren, /mnt/mint/binaber ich weiß nicht, ob liveCD for mint eine Busybox verwendet, was die Sache komplizieren kann - Alternative Nr. 1 scheint in diesem Fall sicherer zu sein.

Im Allgemeinen sollte dies Ihre Dateien durch "Brute-Reinstall" von allem, was Sie haben, zurückgeben. Sie können etwas mehr "clevere" Tricks ausführen und alle Pakete abfragen, die Binärdateien in / bin abgelegt haben

Droopy4096
quelle