Ich habe versehentlich meinen gesamten Server gezippt

10

Okay, wenn jemand Gott spielen und Wunder wirken will, bin ich am Boden.

Also wurde mir die Aufgabe übertragen, ein Skript zu erstellen, das Dateien findet, die älter als 6 Monate sind, sie komprimiert und dann gelöscht hat. Auf dem Weg zu diesem Skript habe ich Folgendes ausgeführt:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla

Und das gab JEDER EINZELNEN DATEI eine .gz-Erweiterung. Jetzt habe ich es rückgängig gemacht, sobald ich es bemerkt habe, aber es war irgendwie zu spät. Nach Abschluss des Befehls würde keiner meiner Bash-Befehle funktionieren, da sich die Variable $ PATH selbst geleert hat. Ich habe viele Dinge ausprobiert, bevor mir klar wurde, was das Problem war.

Nachdem ich alles entpackt habe, kann ich immer noch nicht booten. Ich habe es geschafft, es zu retten, nachdem ich die Online-Anweisungen befolgt habe für:

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]

Danach bootet mein Linux teilweise aber gibt mir folgende Fehler:

Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys/ on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed : No such file or directory
Target filesystem doesn't have requrested /sbin/init.
No init found. Try passing init= bootarg.

Ich habe versucht, das Dateisystem zu reparieren. Ich habe von 3 verschiedenen LiveCDs / Rescue-Festplatten gebootet. Ich habe die Boot-Reparatur von 2 verschiedenen Dicsc ausgeführt. Ich habe fscks gezwungen ...

Ich habe wirklich keine Ideen mehr und ich MUSS diesen Server zumindest zum Booten bringen, damit ich meine SQL-Datenbanken wiederherstellen kann. Ich bin verzweifelt nach Hilfe, ich werde sogar bezahlen, wenn es sein muss.

Ich habe den ganzen Tag 3 Tage lang in Foren gelauert, um eine mögliche Lösung zu finden, und ich bin immer noch am selben Punkt ... Hilfe bitte?

Dexirian
quelle
3
Wenn es sich um MySQL-DBs handelt, müssen Sie nicht unbedingt booten. In diesem Fall würde ich versuchen, das Laufwerk als Slave zu mounten und über das Verzeichnis / var / lib /
mysql zu kopieren
8
Neuinstallation auf neuen Speichergeräten. Hängen Sie das alte Laufwerk ein und übertragen Sie die Daten nach Bedarf. Ich würde wetten, dass die Reparatur die Mühe nicht wert ist.
Zoredache
7
Dies ist der Punkt, an dem Sie aus dem Backup wiederherstellen. Und denken Sie daran, beim nächsten Mal nicht als Root-Benutzer nicht privilegierte Aktionen auszuführen.
Magellan
1
because of version differences,Neuinstallation mit genau der gleichen Version. we have corruption issues,Ihre Daten sind möglicherweise beschädigt. Das Reparieren des Systems, damit es bootfähig ist, hilft Ihnen nicht, wenn die Daten in den Papierkorb verschoben wurden. Wenn Ihr Befehl gzip Ihre Datenbankdateien komprimiert hat, während die Datenbank verwendet wurde, ist eine Beschädigung unvermeidlich.
Zoredache
5
Wenn Ihre DB-Software ausgeführt wurde, während Sie diese Befehle ausgeführt haben, können Sie die DBs möglicherweise nicht wiederherstellen. Gzip hätte die Datei gerne komprimiert und dann die Verknüpfung aufgehoben. In Ihrer DB-Software war die Datei jedoch noch geöffnet, und die Änderungen wurden übernommen. Sobald es gestoppt war, wurde die Datei entfernt.
gestürzter Wagen

Antworten:

8

Dies hängt davon ab, ob die Dateisysteme so repariert sind, dass Sie diese Partitionen von einer LiveCD mounten können. Versuchen Sie noch nicht, das System zu starten. Hängen Sie zuerst die Partitionen ein und entpacken Sie alle .gz-Dateien. Auf diese Weise erhalten Sie Arbeitskopien der Init- und System-Binärdateien. Dann können Sie grub verwenden, um den Bootsektor zu reparieren. Starten Sie dann im Einzelbenutzermodus und überprüfen Sie das Dateisystem erneut. Wenn das funktioniert, haben Sie ein laufendes System. Sie haben auch eine Reihe von entpackten Dateien (wie Manpages), die wirklich komprimiert werden sollten, aber es ist besser als ein nicht bootfähiges System.

Wenn Sie die Partitionen nicht von einer LiveCD mounten können, haben Sie leider kein Glück. Zu diesem Zeitpunkt wird Ihr System durch nichts wiederhergestellt.

Michael Martinez
quelle
1
Das hat tatsächlich wie ein Zauber funktioniert ... ich kann dir nicht genug dafür danken! MySQL würde nicht hochfahren, aber ich habe noch kein --force fsck gemacht, hoffentlich wird es das Problem beheben! DANKE
Dexirian
1
Genial. Ich bin froh, dass es geholfen hat.
Michael Martinez
9

Das erste, was ich versuchen würde, ist eine LiveCD-Umgebung auszuführen und einfach zu versuchen, alles zu entpacken, in der Hoffnung, dass das System wieder in einen bootfähigen Zustand versetzt wird. Hinweis: Ich wäre besorgt über eine mögliche Datenbeschädigung, wenn der ursprüngliche gzip-Prozess unterbrochen würde.

Andernfalls würde ich versuchen, die Datenbank auf ein neues System zu migrieren, wie andere vorgeschlagen haben. Wie Sie jedoch festgestellt haben, kann es zu arbeitsintensiven Abhängigkeits- und Konfigurationsproblemen kommen, die einzeln gelöst werden müssen.

Bob Barker
quelle
Kurze Frage: Wir sind uns des alten SQL-Datenbankservers nicht sicher, und der neuere Server verwendet eine andere Linux-Distribution. Auf dem neueren Server wird CentOS mit WHM ausgeführt, und auf dem alten Server war entweder Debian / Unbuntu. Meine Frage ist also, wie ich meine SQL-Datenbanken effektiv ohne Beschädigung migrieren kann und so weiter.
Dexirian
6

Der allgemeine Konsens hier, dass Sie nur die Festplatte in ein funktionierendes System einbinden und Ihre Dateien retten sollten, ist nicht falsch. Es ist die vernünftige Sache zu tun. Aber der andere Weg macht mehr Spaß und ist sehr lehrreich. Ich habe viel gelernt, als ich mich aus chaotischen Situationen herausgekämpft habe, in denen andere Leute einfach aufgegeben und von Grund auf neu installiert hätten. (Nicht auf einem Server, von dem andere abhängig sind ...)

Sowieso haben Sie bisher ein initramfs (initrd), das ausgeführt wird. Das ist ein guter Anfang. Aber es kann die Übergabe an init nicht abschließen, weil init jetzt init.gzvielleicht ist? Um Fortschritte zu erzielen, ist es hilfreich, genau zu wissen, über welche Linux-Distribution Sie verfügen, damit wir nachschlagen können, welche Tools in den Initramfs für den Notfall verfügbar sind.

Die von Ihnen präsentierten Fehlermeldungen scheinen von Debians initramfs zu stammen. Wenn es Debian ist, sollten Sie (initramfs)in der nächsten Zeile nach dem letzten Fehler eine Shell-Eingabeaufforderung erhalten haben. Wenn Sie dies getan haben, sollten Sie untersuchen, was mit diesen ausgefallenen Reittieren los ist. ist /root/devfehlt? ( /rootHier sollten Ihre normalen Root-Fs während der Ausführung von initramfs gemountet werden.)

Wenn Sie die Shell-Eingabeaufforderung nicht erhalten haben, ist das, was danach kam No init found. Try passing init= bootarg., interessant. Auch wenn es nur ein blinkender Cursor war, ist das ein Hinweis. Wenn es völlig eingefroren erscheint, versuchen Sie, mithilfe von Magic Sysrq oder Strg + ScrollLock Informationen darüber zu erhalten, welche Prozesse noch laufen.

Mit dem Debian-Initramfs können Sie auch eine Shell an einigen speziellen Orientierungspunkten anfordern, indem Sie break=der Kernel-Befehlszeile einen Parameter hinzufügen . Running /scripts/init-bottomVerwenden Sie beispielsweise, um eine Shell vor der Zeile abzurufen break=bottom.

Nebenbei: Ich weiß nicht, wie der findBefehl jede Datei komprimiert haben könnte ... er sieht für mich richtig aus, um Dateien zwischen 180 und 400 Tagen alt auszuwählen.


quelle
Wenn ich ein ls unter / root mache, wird nichts gefunden. Also kann ich davon ausgehen, dass die fs-Montage beim Booten nicht in Ordnung ist? Wo kann ich es ändern?
Dexirian
1
@Dexirian, also hast du eine Shell-Eingabeaufforderung erhalten (musstest du verwenden break=bottom?) ... ja, bis es versucht zu mounten /root/devund /root/procund /root/sys, /rootsollte das echte Root-Dateisystem sein. Es muss früher eine Fehlermeldung aufgetreten sein, dass das Mounten fehlgeschlagen ist. Haben Sie einen root=Parameter in die Kernel-Befehlszeile aufgenommen? Mein Gedächtnis ist in diesem Punkt etwas verschwommen, aber ich denke, das root (hd0,0)sagt grub nur, wo sich seine Unterstützungsdateien befinden, und Sie müssen dem Kernel immer noch separat mitteilen, wo sich das Stammverzeichnis befindet.
Ja, ich habe root =, kernel = initrd = und setup = verwendet, ich musste break = bottom nicht verwenden. Und ich habe keine frühere fehlgeschlagene Mount-Nachricht entdeckt, da sie sehr schnell scrollt
Dexirian
@Dexirian Ist ein Konsolen-Scrollback verfügbar? Umschalt + PgUp. Und können Sie es von der (initramfs) Eingabeaufforderung aus montieren , so etwas wie mount -r /dev/sda1 /root? cat /proc/partitionsum zu sehen, welche Festplatten verfügbar sind.
1
Willkommen in der Welt der Systemadministration.
Michael Martinez