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.
quelle
--no-preserve-root
versehentlich ?! : -oAntworten:
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.
quelle
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
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.
Nachdem etwas passiert ist, ist der schlechteste Zeitpunkt, dies zu berücksichtigen.
Was können wir daraus lernen?
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.
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.
quelle
dd
obigen Problem), wird es nicht schlimmer machen.$foo
und$bar
beide undefiniert waren,rm -rf /
sollte mit der--no-preserve-root
Nachricht 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$bar
bewertet würde*
, was also ausgeführt wurderm -rf /*
.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-root
oder--permission-to-kill-kittens-explicitly-granted
.quelle
--please-destroy-my-drive
Parameter ebenfalls nicht hinzuhdparm
.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.
quelle
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:
quelle
rm /bla/foo/bar -rf
. Zumindest habe ich auf diese Weise keine großen Probleme, wenn ich versehentlich die Eingabetaste drücke, nachdem ich dasrm /
Teil eingegeben habe ./mnt/hetznerbackup
"/" alles in diesem Ordner markieren musste. Aber von den Eltern reicht nurhetznerbackup
, ohne Schrägstriche.Ich würde versuchen, eine Sicherungsmaschine wiederherzustellen, auf der alle Kopien gespeichert waren:
dd
Erstellen Sie ein Backup dieser gelöschten "Backup-Maschine" -Laufwerke mit dem Befehl.testdisk
Zum 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.
quelle
dd
Ihre letzte Chance gelöscht haben.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:
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
sda
durchsda3
vorausgesetzt , Sie das gleiche Bild wie ich verwenden.quelle
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 ...)-C
wenn es in Ihrer Konfiguration noch nicht aktiviert ist.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)Ich würde schwören,
rm
fü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 rm
etwas, das die Leute dazu auffordert,trash-cli
stattdessen zu verwenden . Es würde auch einen Hinweis zu einem anderen Alias enthalten, der tatsächlich ausgeführt wird, den Benutzer/bin/rm
jedoch auffordert, ihn in den meisten Fällen nicht zu verwenden.:( Wahre Geschichte
quelle
trash-empty 5
in einem Cron. Es geht darum, Ihnen eine Schonfrist einzuräumen, weil Menschen Fehler machen.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 ;)
quelle
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.
quelle