Montagmorgen-Fehler: sudo rm -rf --no-preserve-root /

146

Bitte beachten Sie: Die Antworten und Kommentare zu dieser Frage enthalten Inhalte einer anderen, ähnlichen Frage, die von externen Medien viel Beachtung gefunden hat, sich jedoch als Scherzfrage in einer Art viralem Marketing herausstellte. Da wir nicht zulassen, dass ServerFault auf diese Weise missbraucht wird, wurde die ursprüngliche Frage gelöscht und die Antworten mit dieser Frage zusammengeführt.


Hier ist eine unterhaltsame Tragödie. Heute Morgen habe ich einige Wartungsarbeiten an meinem Produktionsserver durchgeführt, als ich versehentlich den folgenden Befehl ausgeführt habe:

sudo rm -rf --no-preserve-root /mnt/hetznerbackup /

Ich habe das letzte Leerzeichen vorher nicht gesehen /und ein paar Sekunden später, als Warnungen meine Kommandozeile überschwemmten, wurde mir klar, dass ich gerade den Selbstzerstörungsknopf gedrückt hatte. Hier ist ein bisschen von dem, was mir in die Augen gebrannt ist:

rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..

Ich beendete die Aufgabe und war erleichtert, als ich feststellte, dass der Produktionsdienst noch lief. Leider akzeptiert der Server meinen öffentlichen Schlüssel oder mein Passwort für keinen Benutzer mehr über SSH.

Wie würden Sie von hier aus vorankommen? Ich werde einen Ozean aus Stacheldraht durchschwimmen, um den SSH-Zugang wieder herzustellen.

Der Server läuft unter Ubuntu-12.04 und wird bei Hetzner gehostet.

Jonas Nielsen
quelle
48
Aus Backups wiederherstellen. Ehrlich gesagt ist dies eines dieser Szenarien, die sich nicht einfach zurückbilden lassen.
MadHatter
310
Wie tippst du überhaupt --no-preserve-rootversehentlich ?! : -o
ThatGraemeGuy
144
Greame, die Tasten sind wie direkt nebeneinander.
MadHatter
38
Dienstagsarbeit: Suche nach einem neuen Job;) Nimm es als eine Lektion, warum Backups benötigt werden.
TomTom
43
Das kommt mir sicher wie ein Troll vor. Sie können nicht versehentlich --i-really-mean-delete-my-whole-root eingeben.
Psusi

Antworten:

95

Starten Sie das von Hetzner bereitgestellte Rettungssystem und überprüfen Sie, welchen Schaden Sie angerichtet haben.
Übertragen Sie alle Dateien an einen sicheren Ort und stellen Sie den Server anschließend erneut bereit.

Ich fürchte, das ist die beste Lösung in Ihrem Fall.

Schwindler
quelle
102
schau mal auf die gute seite, zumindest hat er keine probleme mit herzbluten!
metacom
222

Fakt ist? Zu diesem Zeitpunkt gibt es keine einfache automatische Lösung für dieses Problem. Datenrettung ist eine Wissenschaft, und selbst die grundlegenden, gängigen Tools erfordern jemanden, der sich hinsetzt und sicherstellt, dass die Daten vorhanden sind. Wenn Sie damit rechnen, sich ohne große Ausfallzeiten davon zu erholen, werden Sie enttäuscht sein.

Ich würde vorschlagen, Testdisk oder ein dateisystemspezifisches Wiederherstellungstool zu verwenden. Probieren Sie ein System aus, prüfen Sie, ob es funktioniert, und so weiter. Es gibt keine wirkliche Möglichkeit, den Prozess zu automatisieren, aber Sie können ihn wahrscheinlich sorgfältig stapelweise ausführen.

Das heißt, es gibt ein paar sehr beängstigende Dinge in den Fragen und Kommentaren, die Teil Ihrer After-Action-Berichte sein sollten.

Erstens haben Sie den Befehl überall ausgeführt, ohne ihn vorher zu überprüfen. Führen Sie einen Befehl für eine Box aus. Dann ein paar, dann noch mehr. Grundsätzlich , wenn etwas schief geht, ist es besser, haben sie einen Einfluss auf wenige und nicht alle Systeme.

Zweitens

@Tim Wie mache ich ein Backup, ohne ein Remote-Laufwerk auf dem Server zu mounten?

Verängstigt mich. Einweg-Backups auf Dateiebene sind ein gelöstes Problem . Rsync kann verwendet werden, um Berechtigungen beizubehalten und Dateien auf eine Weise auf eine Sicherungssite zu kopieren . Aus Versehen etwas? Installieren Sie rsync zurück (am besten automatisch), und alles funktioniert. In Zukunft könnten Sie Snapshots auf Dateisystemebene mit BTRFS- oder ZFS-Snapshots verwenden und diese für Sicherungen auf Systemebene versenden. Tatsächlich würde ich mit der Trennung von Anwendungsservern, Datenbanken und Speicher spielen und das Prinzip der geringsten Berechtigungen einführen, damit Sie das Risiko für so etwas aufteilen.

Ich weiß, dass ich alles tun kann. Ich muss jetzt überlegen, wie ich mich schützen kann

Nachdem etwas passiert ist, ist der schlechteste Zeitpunkt, dies zu berücksichtigen.

Was können wir daraus lernen?

  1. Backups speichern Daten. Möglicherweise Karrieren.
  2. Wenn Sie ein Werkzeug haben und nicht wissen, was es kann, ist es gefährlich. Ein Jedi kann erstaunliche Dinge mit einem Lichtschwert tun. Ein Raum voller Schimpansen mit Lichtschwertern ... würde unordentlich werden.
  3. Führen Sie niemals überall gleichzeitig einen Befehl aus. Trennen Sie Test- und Produktionsmaschinen voneinander ab und führen Sie Produktionsmaschinen vorzugsweise schrittweise aus. Es ist besser, 1 oder 10 Maschinen anstatt 100 oder 1000 zu reparieren.

  4. Doppel- und Dreifachkontrollbefehle. Es ist keine Schande, einen Kollegen zu bitten, noch einmal zu prüfen: "Hey, ich bin im Begriff, eine Festplatte zu reparieren. Könnten Sie dies überprüfen, damit ich am Ende keine Festplatte abwische?". Ein Wrapper könnte auch helfen, aber nichts geht über ein weniger müdes Paar Augen.

Was können Sie jetzt tun? Erhalten Sie eine E-Mail an Kunden. Lassen Sie sie wissen, dass es Ausfallzeiten und katastrophale Ausfälle gibt. Sprechen Sie mit Ihren Vorgesetzten, Rechtsabteilungen, Verkäufen usw. und sehen Sie, wie Sie den Schaden abmildern können. Planen Sie die Wiederherstellung, und wenn nötig, müssen Sie im besten Fall zusätzliche Hände engagieren. Im schlimmsten Fall sollten Sie viel Geld für die Erholung ausgeben. In dieser Phase arbeiten Sie daran, den Ausfall sowie technische Korrekturen zu mildern.

Geselle Geek
quelle
9
@MarcoMarsala Wenn Sie vor der Verwendung von rsync etwas gemountet haben, haben Sie es nicht richtig gemacht. Sie sollten rsync über ssh verwenden.
Michael Hampton
67
Zu dieser hervorragenden Antwort möchte ich hinzufügen: Steigen Sie vom Computer weg. Versuchen Sie nichts zu reparieren, bis Sie sich beruhigt haben. Sie haben bereits ernsthafte Ausfallzeiten zu verzeichnen. Sich die Zeit zu nehmen, Dinge durchzudenken, anstatt Ihre Systeme noch mehr zu ruinieren (wie im ddobigen Problem), wird es nicht schlimmer machen.
Jenny D
22
Irgendeine Idee, warum der Befehl tatsächlich ausgeführt wurde? Wenn $foound $barbeide undefiniert waren, rm -rf /sollte mit der --no-preserve-rootNachricht ein Fehler aufgetreten sein . Der einzige Weg, wie ich mir vorstellen kann, dass dies auf einem CentOS7-Computer tatsächlich funktioniert hätte, ist, wenn $barbewertet würde *, was also ausgeführt wurde rm -rf /*.
Terdon
9
Ich liebe den Stil in "Versehentlich etwas?". Dies muss bedeuten, dass das Wort "entfernt" versehentlich "gelöscht" oder "fallengelassen" wurde.
sehe
20
@MarcoMarsala Nun, zumindest bist du jetzt berühmt. Independent.co.uk/life-style/gadgets-and-tech/news/…
Martin Smith
92

Wenn Sie etwas mit löschen rm -rf --no-preserve-root, ist es nahezu unmöglich, es wiederherzustellen. Es ist sehr wahrscheinlich, dass Sie alle wichtigen Dateien verloren haben.

Wie @faker in seiner Antwort sagte, ist die beste Vorgehensweise, die Dateien an einen sicheren Ort zu übertragen und den Server anschließend erneut bereitzustellen .

Um ähnliche Situationen in Zukunft zu vermeiden, empfehle ich Ihnen:

  • Machen Sie wöchentlich oder mindestens alle zwei Wochen Backups . Dies würde Ihnen dabei helfen, den betroffenen Dienst mit der geringstmöglichen MTTR wiederherzustellen.

  • Arbeiten Sie nicht als root, wenn Sie nicht gebraucht werden . Und denke immer zweimal nach, bevor du etwas tust. Ich würde vorschlagen, dass Sie auch safe-rm installieren .

  • Geben Sie keine Optionen ein, die Sie nicht aufrufen möchten , z. B. --no-preserve-rootoder --permission-to-kill-kittens-explicitly-granted.

Amal Murali
quelle
18
Wenn Sie es nicht WIRKLICH BEDEUTEN, fügen Sie den --please-destroy-my-driveParameter ebenfalls nicht hinzu hdparm.
MikeyB
3
Ich möchte hinzufügen; "Überprüfen Sie Ihre Argumente (und Optionen) dreimal, wenn Sie als root arbeiten", "Überprüfen Sie Ihr CurrentWorkingDirectory (bevor Sie etwas wie rm -rf * ausführen)" und "Verwenden Sie vollständige Pfade für Befehle (leiten Sie $ PATH nicht weiter).
Baard Kopperud
47

Ich hatte das gleiche Problem, aber beim Testen mit einer Festplatte habe ich alles verloren. Ich weiß nicht, ob es nützlich ist, aber installieren Sie nichts , überschreiben Sie Ihre Daten nicht , Sie müssen Ihre Festplatten einbinden und einige forensische Tools wie Autopsie, Fotorekorder und Testdisk starten.

Ich empfehle dringend Testdisk. Mit einigen grundlegenden Befehlen können Sie Ihre Daten wiederherstellen, wenn Sie sie nicht überschrieben haben.

Octo
quelle
8
Ich würde definitiv empfehlen, den Speicher offline zu schalten, wenn dies möglich ist, und ihn als schreibgeschützt neu zu laden, wenn dies überhaupt möglich ist. Ob mit einem Livedisk oder einer anderen Serverinstanz.
mhouston100
2
Ich würde sogar in Betracht ziehen, aus Sicherheitsgründen eine DD-Bitkopie der ursprünglichen Festplatte von einer schreibgeschützten Version der ursprünglichen Festplatte auf eine neue Festplatte zu kopieren.
Jim
3
«Diese Tools können den Dateinamen und den Pfad nicht wiederherstellen.» Ja, das tun sie. Von den 3 genannten Werkzeugen schnitzt nur eines (Photorec).
Andrea Lazzarotto
34

Der beste Weg, um ein solches Problem zu beheben, besteht darin, es erst gar nicht zu haben.

Geben Sie den Befehl "rm -rf", dessen Argumentliste einen Schrägstrich enthält, nicht manuell ein. (Das Einfügen solcher Befehle in ein Shell-Skript mit wirklich guten Überprüfungs- / Sicherheitsroutinen, um Sie davor zu schützen, etwas Dummes zu tun, ist etwas anderes.)

Tu es einfach nicht.
Je. Wenn Sie denken, dass Sie es tun müssen, denken Sie nicht stark genug.

Ändern Sie stattdessen Ihr Arbeitsverzeichnis in das übergeordnete Verzeichnis des Verzeichnisses, aus dem Sie die Entfernung starten möchten, sodass das Ziel des Befehls rm keinen Schrägstrich erfordert:

cd / mnt

sudo rm -rf hetznerbackup

Monty Harder
quelle
31
Ich setze die -rf immer an das Ende der Argumentliste, also rm /bla/foo/bar -rf. Zumindest habe ich auf diese Weise keine großen Probleme, wenn ich versehentlich die Eingabetaste drücke, nachdem ich das rm /Teil eingegeben habe .
Jens Timmerman
5
Ebenso gebe ich beim Entfernen von "* ~" - Dateien zuerst die Tilde ein und füge dann den Stern hinzu.
Tekknolagi
4
Sie möchten also lieber Ihr Zuhause löschen als alles im aktuellen Verzeichnis?!?
Greg0ire
@ greg0ire Nein, ich glaube, er wollte sagen, dass er innerhalb von /mnt/hetznerbackup"/" alles in diesem Ordner markieren musste. Aber von den Eltern reicht nur hetznerbackup, ohne Schrägstriche.
T.Todua
1
@ tazotodua: Ich bezog mich auf tekknolagis Kommentar
greg0ire
16

Ich würde versuchen, eine Sicherungsmaschine wiederherzustellen, auf der alle Kopien gespeichert waren:

  • 1. Schritt - ddErstellen Sie ein Backup dieser gelöschten "Backup-Maschine" -Laufwerke mit dem Befehl.
  • 2. Schritt - testdiskZum Wiederherstellen von Dateien.

Nehmen wir also an, Sie möchten 1 TB wiederherstellen. Sie benötigen zusätzliche 2 TB, 1 TB für die Sicherung (1. Schritt) und 1 TB für die Wiederherstellung (2. Schritt).

Ich habe einen ähnlichen Fehler mit dem Alias ​​rm -fr [Telefon klingelte] und der CD in ein wertvolles Verzeichnis gemacht. Jetzt denke ich immer zweimal nach und überprüfe es ein paar Mal, bevor ich den Befehl rm oder dd verwende.

Abc Xyz
quelle
6
Auf diese Weise haben Sie Ihre Festplatte so gut wie auf Null gestellt. Das macht es sehr viel schwieriger, sich zu erholen. Es gibt einen guten Grund, warum das OP vorschlug, dass Sie versucht haben, testdisk zu verwenden und sich zuerst zu erholen. Die Syntax von dd kann zwar etwas seltsam sein, dies ist jedoch ein guter Grund, die Überprüfung vor Ausführung des Befehls zu verdoppeln und zu verdreifachen. Sie haben nur einen Server gelöscht, oder?
Geselle Geek
1
Sie können sich immer noch erholen, je nachdem, wie lange Sie ddIhre letzte Chance gelöscht haben.
ABC XYZ
129
Tut mir leid, das zu sagen, aber ich fühle mich riesig Troll in dieser Frage ...
Tymik
3
Ich
5
Um ehrlich zu sein. Ich bin mir nicht sicher, ob du echt bist. Wenn Sie sind, sind Sie wahrscheinlich im falschen Job ...
Leftcase
7

Wie in einer anderen Antwort erwähnt, hat Hetzner ein Rettungssystem. Es enthält sowohl eine Netboot-Option mit SSH-Zugriff als auch ein Java-Applet, mit dem Sie Bildschirm und Tastatur auf Ihrem vserver einrichten können.

Wenn Sie so viel wie möglich wiederherstellen möchten, starten Sie den Server im Netboot-System neu, melden Sie sich an und laden Sie ein Image des Dateisystems herunter, indem Sie es vom entsprechenden Geräte-Inode lesen.

Ich denke so etwas sollte funktionieren:

ssh root@host cat /dev/sda > server.img

Natürlich wird die Umleitung von der Shell durchgeführt, bevor der Befehl ssh aufgerufen wird. Server.img ist also eine lokale Datei. Wenn Sie nur das Root - Dateisystem wollen und nicht die volle Scheibe, ersetzt sdadurch sda3vorausgesetzt , Sie das gleiche Bild wie ich verwenden.

Kasperd
quelle
könnte vielleicht sein: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz(die on-the-fly gzip wird oder wird nicht helfen, je nachdem, was der Inhalt des Dateisystems ist ...)
Olivier Dulac
@OlivierDulac Wenn Sie auf diese Weise gzip verwenden, werden die Daten unkomprimiert über das Netzwerk gesendet und dann auf der Empfängerseite komprimiert. Ich gehe davon aus, dass Sie beabsichtigt haben, die Daten während der Übertragung zu komprimieren. Das lokale Image kann komprimiert gespeichert werden oder nicht, aber Tools, die Sie später auf dieses Image anwenden möchten, funktionieren nicht mit der komprimierten Version. Wenn Sie nur Daten während der Übertragung komprimieren möchten, können Sie die Komprimierungsfunktion in ssh verwenden. Es kann mit aktiviert werden, -Cwenn es in Ihrer Konfiguration noch nicht aktiviert ist.
Kasperd
2
Ich habe mehr versucht, die Größe der Datei zu reduzieren. Aber wenn Sie Bandbreite sparen möchten (gute Idee): Fügen Sie einfach Anführungszeichen hinzu: ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz(Die Option -c von ssh ist normalerweise auch gut, aber Sie müssten am Ende noch komprimieren, da ssh nur am Eingang seines Tunnels komprimiert wird und dekomprimieren vor dem Senden an stdout)
Olivier Dulac
2

Wie würden Sie von hier aus vorankommen?

Ich würde schwören, rmfür den Rest meines Lebens zu verwenden, und denken, dass es Wahnsinn ist, dass trash-cli nicht der Standardbefehl zum Entfernen auf nix-Systemen ist.

https://github.com/andreafrancia/trash-cli

Ich würde sicherstellen, dass es das erste ist, was ich auf einem brandneuen System installiere und alias rmetwas, das die Leute dazu auffordert, trash-clistattdessen zu verwenden . Es würde auch einen Hinweis zu einem anderen Alias ​​enthalten, der tatsächlich ausgeführt wird, den Benutzer /bin/rmjedoch auffordert, ihn in den meisten Fällen nicht zu verwenden.

:( Wahre Geschichte

Gerry
quelle
2
Nach meiner Erfahrung sind solche Tools eher ein Ärgernis als eine echte Hilfe - früher oder später und nach einigem Fluchen werden Sie sie entfernen. Für eine Workstation mag dies in Ordnung sein, aber in vielen, wenn nicht den meisten Situationen, in denen Sie administrative Arbeiten auf einem Server ausführen, müssen Sie die Daten wirklich löschen und nicht nur an einen anderen Ort verschieben (und wenn dies der Fall wäre, verwenden Sie einfach mv stattdessen). Außerdem kann das automatische Verschieben von Daten in einen Papierkorb zu schwerwiegenden Problemen führen (z. B. Papierkorb, der sich nicht im selben Dateisystem befindet, Sicherheit).
Maetthu
@maetthu Oh, natürlich werden Dinge entfernt, nachdem sie für eine bestimmte Anzahl von Tagen im Müll waren. Ubuntu Desktop erledigt dies für Objekte, die sich seit mehr als 30 Tagen im Papierkorb befinden. Auf einem Server möchten Sie vielleicht etwas kürzeres, z. trash-empty 5in einem Cron. Es geht darum, Ihnen eine Schonfrist einzuräumen, weil Menschen Fehler machen.
Gerry
Ist es nicht besser, einen funktionierenden Desaster-Recovery-Plan zu haben, als wichtige Systemtools zu verbieten?
User292812
@ user292812 Ich habe nicht vorgeschlagen, / bin / rm zu verbannen, nur, dass dies in den meisten Fällen nicht die erste Option sein sollte (beachte den Alias ​​/ bin / rm). Ihre Frage schlägt auch eine falsche Wahl zwischen Disaster Recovery und einer benutzerfreundlichen Löschoption vor. Du solltest beides haben.
Gerry
1
Ein zweistufiger Entfernungsprozess kann viele Probleme ersparen: 1. In den Papierkorb verschieben (wörtlich), 2. Papierkorb leeren. Ich benenne ein solches Skript als "rm" und es hat mich davon abgehalten, wichtige Dinge versehentlich viele Male zu löschen.
Sam Watkins
1

Ich würde in einem solchen Fall beraten ist Aushängen und verwenden debugfs , und mit Hilfe von lsdel können Sie alle kürzlich gelöschten Dateien auflisten, die in dem nicht aus Zeitschriften gereinigt und dann Dump benötigten Dateien. Schneller Suchlink für dasselbe: http://www.linuxvoodoo.com/resources/howtos/debugfs

hoffe es wird jemandem helfen. ;)

Und ja, einmal von Vorschlägen ist Skript zu machen, die Rieses bewegt rm real.rm und symlinc mv rm ;)

BiG_NoBoDy
quelle
-2

Stoppen Sie alle Server-Prozesse und alles, was zu Festplatten-E / A führen kann. Führen Sie dann testdisk aus. Es sollte sich in Ihrem Software-Stack befinden. Wenn Sie physischen Zugriff haben, verwenden Sie eine Live-CD mit Testdisk.

Heiliger Crusty
quelle
1
Ich verstehe nicht ganz, warum Sie denken, dass drei Antworten mit genau demselben Vorschlag nicht genug waren?
Kasperd