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


Bitte beachten Sie: Die Antworten und Kommentare zu dieser Frage enthalten Inhalte aus einer anderen, ähnlichen Frage, die viel Aufmerksamkeit von externen Medien erhalten hat, sich aber in einer Art viralem Marketing-Schema als Falschmeldung herausgestellt hat. Da wir ServerFault nicht so missbrauchen dürfen, 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 auf meinem Produktionsserver gewartet, als ich fälschlicherweise den folgenden Befehl ausgeführt habe:

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

Den letzten Platz habe ich noch nicht gefunden / und einige Sekunden später, als Warnungen meine Befehlszeile überfluteten, wurde mir klar, dass ich gerade den Selbstzerstörungsknopf gedrückt hatte. Hier ist etwas, was mir in die Augen gebrannt hat:

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 stoppte die Aufgabe und war erleichtert, als ich entdeckte, dass der Produktionsservice noch lief. Leider akzeptiert der Server meinen öffentlichen Schlüssel oder das Passwort für einen Benutzer nicht mehr per SSH.

Wie würdest du von hier weiterkommen? Ich werde einen Ozean aus Stacheldraht schwimmen, um diesen SSH-Zugang zurück zu bekommen.

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


142
2018-04-07 06:39


Ursprung


Wiederherstellen von Sicherungen. Ehrlich gesagt, ist dies eines dieser einfachen Szenarien. - MadHatter
Wie tippst du überhaupt? --no-preserve-root zufällig?! :-O - ThatGraemeGuy
Greame, die Schlüssel sind gleich nebeneinander. - MadHatter
Arbeit am Dienstag: Suche nach einem neuen Job;) Lerne, warum Backups benötigt werden. - TomTom
Das scheint mir zu trollen. Sie können nicht versehentlich --i-real-mean-delete-my-whole-root eingeben. - psusi


Antworten:


Starte in das Rettungssystem von Hetzner und überprüfe, welchen Schaden du angerichtet hast.
Übertragen Sie alle Dateien an einen sicheren Speicherort und stellen Sie den Server anschließend erneut bereit.

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


92
2018-04-07 07:00



schauen Sie auf die helle Seite, zumindest hat er keine Probleme mit Heartbleed! - metacom


Fakt ist? An dieser Stelle gibt es keine einfache / einfache automatische Lösung dafür. Datenwiederherstellung ist a Wissenschaft und selbst die grundlegenden, gemeinsamen Werkzeuge brauchen jemanden, der sich hinsetzt und sicherstellt, dass die Daten da sind. Wenn Sie davon ausgehen, sich ohne große Ausfallzeiten davon zu erholen, werden Sie enttäuscht sein.

Ich würde vorschlagen, testdisk zu verwenden oder ein Dateisystem-spezifisches Wiederherstellungstool. Probieren Sie ein System aus, sehen Sie, ob es funktioniert, und so weiter. Es gibt keine echte Möglichkeit, den Prozess zu automatisieren aber Das kannst du wahrscheinlich vorsichtig Mach es in Chargen.

Allerdings gibt es 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 mehr. Grundsätzlich, wenn etwas schief geht, ist es besser, es zu beeinflussen wenige anstatt alle Ihre Systeme.

Zweitens

@Tim, wie man ein Backup macht, ohne ein entferntes Laufwerk auf dem Server zu montieren?

Verängstigt mich. Einweg-Backups auf Dateiebene sind a gelöstes Problem. Rsync kann verwendet werden, um Berechtigungen zu erhalten und Dateien zu kopieren Einweg zu einer Backup-Site. Versehentlich etwas? Reinstall (vorzugsweise automatisch) rsync zurück, und die Dinge funktionieren. Zukünftig können Sie Snapshots auf Dateisystemebene mit btrfs- oder zfs-Snapshots verwenden und diese für Sicherungen auf Systemebene bereitstellen. Ich würde eigentlich mit der Trennung von Anwendungsservern, Datenbanken und Speicher spielen und das Prinzip der geringsten Privilegien einführen, so dass Sie das Risiko von so etwas aufteilen würden.

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

Nachdem etwas passiert ist, ist es die schlimmste Zeit, darüber nachzudenken.

Was können wir daraus lernen?

  1. Sicherungen 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 Lichtschwert ... würde unordentlich werden.
  3. Niemals gleichzeitig einen Befehl ausführen. Test- und Produktionsmaschinen trennen und vorzugsweise Produktionsmaschinen in Etappen durchführen. Es ist besser, 1 oder 10 Maschinen als 100 oder 1000 zu reparieren.

  4. Doppel-und Dreifach-Check-Befehle. Es ist keine Schande, wenn ein Mitarbeiter fragt, "Hey, ich bin dabei, eine Fahrt zu machen. Könntest du das vernünftig überprüfen, damit ich nicht am Ende eine Fahrt wische?". Ein Wrapper könnte auch helfen, aber nichts schlägt eine weniger müde Augen.

Was kannst du jetzt tun? Erhalten Sie eine E-Mail an Kunden. Lassen Sie sie wissen, dass es Ausfallzeiten gibt und es katastrophale Ausfälle gibt. Sprechen Sie mit Ihren Vorgesetzten, Legal, Sales und so weiter und sehen Sie, wie Sie den Schaden mildern können. Beginnen Sie mit der Planung für die Wiederherstellung, und wenn nötig, müssen Sie im besten Fall zusätzliche Hände einstellen. Im schlimmsten Fall planen Sie viel Geld für die Erholung. In diesem Stadium werden Sie daran arbeiten, sowohl den Ausfall als auch technische Korrekturen zu reduzieren.


219
2018-04-11 08:02



@MarcoMarsala Wenn Sie vor der Verwendung von rsync etwas bereitgestellt haben, haben Sie es nicht richtig gemacht. Sie sollten rsync über ssh verwenden. - Michael Hampton♦
Ich würde zu dieser ausgezeichneten Antwort hinzufügen: Geh weg vom Computer. Versuche nicht, etwas zu reparieren, bis du dich beruhigt hast. Sie sehen bereits einige ernsthafte Ausfallzeiten an; sich die Zeit nehmen, Dinge zu durchdenken, anstatt Ihre Systeme noch mehr zu zerstören (wie in der dd Problem oben) wird es nicht noch schlimmer machen. - Jenny D
Irgendeine Idee, warum der Befehl tatsächlich ausgeführt wurde? Ob $foound $bar waren beide undefiniert, rm -rf / sollte mit der --no-preserve-root Botschaft. Der einzige Weg, an den ich denken könnte, dass dies auf einer CentOS7-Maschine tatsächlich funktioniert hätte, ist, wenn $bar bewertet zu *Also war was los war rm -rf /*. - terdon
Ich liebe den Stil in "Versehentlich etwas?". Das bedeutet, dass das Wort "entfernt" versehentlich gelöscht wurde. - sehe
@MarcoMarsala gut, zumindest bist du jetzt berühmt independent.co.uk/life-style/gadgets-and-tech/news/... - Martin Smith


Wenn du Sachen mit löschst rm -rf --no-preserve-rootEs ist fast unmöglich, sich zu erholen. Es ist sehr wahrscheinlich, dass Sie alle wichtigen Dateien verloren haben.

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

Um ähnliche Situationen in Zukunft zu vermeiden, würde ich Ihnen vorschlagen:

  • Erstellen Sie Backups wöchentlich oder mindestens vierzehntägig. Dies würde Ihnen helfen, den betroffenen Dienst mit der geringstmöglichen MTTR wiederherzustellen.

  • Arbeiten Sie nicht als root, wenn Sie nicht benötigt werden. Und immer Denke zweimal darüber nach, bevor du etwas tust. Ich würde vorschlagen, dass Sie auch installieren sicher-rm.

  • Geben Sie keine Optionen ein, die Sie nicht aufrufen möchten, sowie --no-preserve-root oder --permission-to-kill-kittens-explicitly-grantedfür diese Angelegenheit.


90
2018-04-07 07:57



Ebenso, wenn Sie es nicht WIRKLICH BEDEUTEN, fügen Sie nicht das hinzu --please-destroy-my-drive Parameter zu hdparm. - MikeyB
Ich möchte hinzufügen; "Überprüfen Sie Ihre Argumente (und Optionen) dreifach, wenn Sie als root arbeiten", "Überprüfen Sie Ihr CurrentWorkingDirectory (bevor Sie etwas wie rm -rf * tun)" und "Verwenden Sie vollständige Pfade zu Befehlen (nicht auf $ PATH weiterleiten). - Baard Kopperud


Ich hatte das gleiche Problem, aber nur mit einer Festplatte testen, ich habe alles verloren. Ich weiß nicht, ob es nützlich sein wird, aber installiere nichts, überschreiben Sie Ihre Daten nicht, müssen Sie Ihre Festplattenlaufwerke montieren und einige forensische Tools wie Autopsie, Photorec, Testdisk starten.

Ich empfehle dringend, Testdisk, mit einigen Grundlagen Befehl können Sie Ihre Daten wiederherstellen, wenn Sie es nicht überschrieben haben.


47
2018-04-11 08:17



Ich würde auf jeden Fall empfehlen, den Speicher offline zu nehmen, wenn überhaupt möglich und als "read only" neu zu mounten, wenn Sie überhaupt können. Ob mit einer Livedisk oder einer anderen Serverinstanz. - mhouston100
Ich würde sogar in Erwägung ziehen, eine dd-Bitkopie der Originalfestplatte von einer Nur-Lese-Einbettung der Originalfestplatte auf eine neue Platte zu kopieren, nur um sicher zu sein. - Jim
«Diese Tools werden den Dateinamen und Pfad nicht wiederherstellen» Ja, sie tun. Von den drei erwähnten Werkzeugen führt nur eines (Photorec) das Schnitzen durch. - Andrea Lazzarotto


Der beste Weg, um ein Problem wie dieses zu beheben, besteht darin, es nicht an erster Stelle zu haben.

Geben Sie keinen Befehl "rm -rf" manuell ein, der in der Argumentliste einen Schrägstrich hat. (Wenn man solche Befehle in ein Shell-Skript mit wirklich guten Validierungs- / Sanitätsroutinen einfügt, ist das anders.)

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

Ändern Sie stattdessen Ihr Arbeitsverzeichnis in das übergeordnete Verzeichnis des Verzeichnisses, von dem Sie beabsichtigen, das Entfernen zu starten, damit das Ziel des Befehls rm keinen Schrägstrich erfordert:

CD / Mnt

sudo rm -rf hetznerbackup


33
2018-04-07 21:22



Ich stelle immer die -rf am Ende der Argumentliste, also rm /bla/foo/bar -rf. Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 So habe ich zumindest keinen großen Ärger, wenn ich nach dem Tippen auf die Return - Taste aktzeptiert rm / Teil. - Jens Timmerman
Ähnlich, wenn ich "* ~" Dateien lösche, gebe ich zuerst die Tilde ein und füge dann das Sternchen hinzu. - tekknolagi
Sie möchten lieber Ihr Zuhause als alles im aktuellen Verzeichnis löschen?!? - greg0ire
@ greg0ire Nein, ich denke, er wollte das sagen /mnt/hetznerbackup, er musste "/" verwenden, um alles in diesem Ordner zu markieren .. aber nur vom Elternteil hetznerbackup ist genug, ohne Schrägstriche. - T.Todua
@ Tazotodua: Ich habe mich auf Tekknolagis Kommentar bezogen - greg0ire


Ich würde versuchen, Backup-Maschine wiederherzustellen, wo alle Kopien gespeichert wurden:

  • 1. Schritt - Erstellen Sie eine Sicherungskopie dieser gelöschten "Backup-Maschine" mit dd comand.
  • 2. Schritt - Verwenden testdisk um Dateien wiederherzustellen.

Also sagen wir, Sie wollen 1 TB wiederherstellen, Sie benötigen zusätzliche 2 TB, 1 TB für Backup (1. Schritt) plus 1 TB für die Wiederherstellung (2. Schritt).

Ich habe einen ähnlichen Fehler mit Alias ​​rm -fr [Telefon klingelte] und CD zu wertvollen Verzeichnis. Jetzt denke ich immer zweimal nach und überprüfe paar mal, bevor ich rm oder dd benutze.


16
2018-04-11 00:32



Ziemlich viel Null auf Ihrer Festplatte, indem Sie das tun. Das macht es sehr viel schwieriger, sich zu erholen. Es gibt einen guten Grund, dass das OP vorgeschlagen hat, testdisk zu benutzen, und zuerst die Wiederherstellung, und obwohl die Syntax von dd etwas seltsam sein kann, ist das ein guter Grund, die Prüfung zu verdoppeln und zu verdreifachen, bevor Sie den Befehl ausführen. Sie haben nur einen Server gelöscht, oder? - Journeyman Geek
Sie können immer noch wiederherstellen, hängt davon ab, wie lange Sie zugelassen haben dd um deine letzte Chance zu löschen. - Abc Xyz
tut mir leid, das zu sagen, aber ich fühle mich in dieser Frage sehr troll ... - tymik
hoffe du fühlst dich kleiner troll in der antwort :) - Abc Xyz
Um ehrlich zu sein. Ich bin mir nicht sicher, ob du echt bist. Wenn Sie sind, sind Sie wahrscheinlich in der falschen Arbeit ... - leftcase


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, um Bildschirm und Tastatur auf Ihrem vserver zu erhalten.

Wenn Sie so viel wie möglich wiederherstellen möchten, starten Sie den Server im Netboot-System neu und loggen Sie sich dann ein und laden Sie ein Abbild des Dateisystems herunter, indem Sie von der 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 ausgeführt, bevor der Befehl ssh aufgerufen wird, daher ist server.img eine lokale Datei. Wenn Sie nur das Root-Dateisystem und nicht die vollständige Festplatte möchten, ersetzen Sie sie sda durch sda3 Angenommen, Sie verwenden dasselbe Bild wie ich.


7
2018-04-07 07:54



könnte vielleicht sein: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz (Das On-The-Fly-Gzip wird oder wird nicht helfen, je nachdem, was der Inhalt des Dateisystems ist ...) - Olivier Dulac
@OlivierDulac Wenn gzip so verwendet wird, werden die Daten unkomprimiert über das Netzwerk gesendet und dann auf der Empfängerseite komprimiert. Ich nehme an, das Ergebnis, das Sie erreichen wollten, war, die Daten während der Übertragung zu komprimieren. Das lokale Bild könnte komprimiert gespeichert werden oder nicht, aber Werkzeuge, die Sie später auf dieses Bild 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 nicht bereits aktiviert ist. - kasperd
Ich habe mehr versucht, die Größe der Datei zu reduzieren. Aber wenn Sie Bandbreite sparen möchten (gute Idee): Fügen Sie einfach Zitate 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 komprimiert werden, da ssh nur am Eingang seines Tunnels komprimiert und vor dem Senden an stdout dekomprimiert wird) - Olivier Dulac


Wie würdest du von hier weiterkommen?

Ich würde schwören verwenden rm für den Rest meines Lebens und denke, dass es verrückt ist, dass trash-cli nicht der Standard-Entfernungsbefehl 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 rm zu etwas, das den Leuten sagt, dass sie es benutzen sollen trash-cli stattdessen. Es würde auch eine Notiz über einen anderen Alias ​​enthalten, der tatsächlich ausgeführt wird /bin/rm aber sagt ihnen, dass sie es in den meisten Fällen vermeiden sollten.

:( Wahre Geschichte


2
2018-04-15 09:51



Meiner Erfahrung nach sind diese Werkzeuge eher eine lästige als eine tatsächliche Hilfe - früher oder später und nach einigem Fluchen wirst du sie entfernen. Es kann für eine Workstation 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 einfach woanders hin verschieben (und wenn das der Fall ist, verwenden Sie einfach mv stattdessen). Darüber hinaus kann das automatische Verschieben von Daten in einen Papierkorbordner zu ernsthaften Problemen führen (z. B. Papierkorb nicht im selben Dateisystem, Sicherheit). - maetthu
@maetthu Oh, natürlich werden Sachen entfernt, nachdem sie eine bestimmte Anzahl von Tagen im Müll waren. Der Ubuntu-Desktop erledigt dies für Objekte, die mehr als 30 Tage im Papierkorb waren. Auf einem Server möchten Sie vielleicht etwas kürzer, z. trash-empty 5 in einem Cron. Der Punkt ist, Ihnen eine Gnadenfrist zu gewähren, weil Menschen Fehler machen. - Gerry
Ist es nicht besser, einen funktionierenden Desaster-Recovery-Plan zu haben, anstatt wesentliche System-Tools zu verbieten? - user292812
@ user292812 Ich habe nicht vorgeschlagen, / bin / rm zu verbannen, nur dass es in den meisten Fällen nicht die erste Option sein sollte (beachte den / bin / rm-Alias). Ihre Frage schlägt auch eine falsche Wahl zwischen Disaster Recovery und einer benutzerfreundlichen Löschoption vor. Du solltest beides haben. - Gerry
Ein zweistufiger Löschvorgang kann viele Probleme ersparen: 1. gehe in den Papierkorb (verbosely), 2. entleere den Papierkorb. Ich habe ein solches Skript als "rm" bezeichnet und es hat mich davor bewahrt, wichtige Dinge mehrmals versehentlich zu löschen. - Sam Watkins