Allgemeines 22.008 Themen, 149.001 Beiträge

Datenrettung aus RAM?

dl7awl / 10 Antworten / Baumansicht Nickles

Eine Rubrik "Datenrettung" oder "Tools" gibt es wohl nicht; bitte ggf. in die nächst passende Rubrik verschieben!

Schon öfter stand ich vor dem Problem, dass durch eine unüberlegte Handlung, einen Absturz oder ähnliches plötzlich der soeben eingegebene Text weg war, bevor er abgespeichert bzw. abgeschickt werden konnte. Besonders ärgerlich: man weiß, irgendwo in einem RAM-Buffer steht er wahrscheinlich noch, mein Text, aber ich komm nicht ran. Dabei ist es ganz egal, mit welchem Programm man zugange war, Hauptsache man macht danach nichts anderes und der Computer bleibt eingeschaltet.

Ist jemandem ein (Windows-)Tool bekannt, mit dem man den RAM-Inhalt wieder zu fassen bekommt?

Zu DOS-Zeiten war's relativ einfach, da hatte ich sowas mal selbst geschrieben. Es muss ja auch möglichst klein sein, um möglichst wenig vom Arbeitsspeicher zu überschreiben. Meine damalige 29-Byte-Assembler-Lösung namens ramimage.com (hoffentlich wird das hier richtig dargestellt):


0100 1E PUSH DS
0101 33D2 XOR DX,DX
0103 BB0100 MOV BX,0001
0106 B90040 MOV CX,4000
0109 B440 MOV AH,40
010B CD21 INT 21
010D 58 POP AX
010E 050004 ADD AX,0400
0111 8ED8 MOV DS,AX
0113 3D00A0 CMP AX,A000
0116 72E8 JB 0100
0118 B8004C MOV AX,4C00
011B CD21 INT 21

Mit dem Aufruf ramimage >datei konnte ich dann den relevanten Teil des Arbeitsspeichers in eine Datei retten und darin anschließend in Ruhe nach dem verlorenen Text suchen. Hat meistens geklappt und mir oft geholfen.

Nur für Windows ist mir sowas noch nicht begegnet - dürfte dort wegen des virtuellen Speichermodells auch nicht ganz so trivial sein, allerdings auch nicht unmöglich. Weiß jemand was?

Gruß, Manfred
bei Antwort benachrichtigen
Borlander dl7awl „Datenrettung aus RAM?“
Optionen

Naja, der Ruhezustand würde eigentlich schon das machen was Du möchtetest: Den kompletten Speicherinhalt in eine Datei schreiben. Anschließen müsstest Du dann nur vor dem erneuten Starten eine Kopie dieser Datei angelegen (z.B. mit ner Knoppix sollte das kein Problem sein auf eine externe Platte oder was in der Richtung) und könntest anschließend mehr oder weniger gemütlich drin suchen. Zu bedenken wäre allerdings noch: Eine manuelle Suche kannst Du natürlich vergessen zu Zeiten in denen 2GB RAM nichts außergewöhnliches mehr sind, darüber hinaus liegt der Text auch nicht umbedingt im Klarformat vor, NurText ist in heutiger Zeit schließlich selten geworden.

Schon öfter stand ich vor dem Problem, dass durch eine unüberlegte Handlung, einen Absturz oder ähnliches plötzlich der soeben eingegebene Text weg war, bevor er abgespeichert bzw. abgeschickt werden konnte.
Das kann man durch rechtzeitiges Speichern wirkungsvoll verhindern. Erste aktion bei einem frischen Dokument ist das Speichern unter einem passenden Dateinamen, beim Arbeiten Zwischendurch ist ein Strg+S auch kein zusätzlicher Aufwand. Generell scheint mir der Aufwand einer solchen Rettungs-Aktion in keinem Verhältnis zum Nutzen zu stehen, lieber meine eben Hinweise zu Herzen nehmen um das Problem in Zukunft zu vermeiden...


Gruß
Borlander

bei Antwort benachrichtigen
dl7awl Borlander „Naja, der Ruhezustand würde eigentlich schon das machen was Du möchtetest: Den...“
Optionen

"Naja, der Ruhezustand würde eigentlich schon das machen was Du möchtetest: Den kompletten Speicherinhalt in eine Datei schreiben."

Hey, na klar! Wieso bin ich da nicht selbst drauf gekommen? Aber manchmal sieht man ja bekanntlich den Wald vor lauter Bäumen nicht. ;-)

Und, ist das nun die Lösung? Hm...

Ich habe es probiert. Da Windows natürlich im Resume-Modus starten wollte und somit gar nicht erst nachsieht, ob eine Knoppix-Boot-CD im Laufwerk liegt, habe ich die Platte ausgebaut (unkompliziert, da Notebook) und via USB-Gehäuse an einen anderen Rechner angeschlossen und dort die hiberfil.sys gesichert. Ich habe darin dann auch tatsächlich einige (!) Teile meines Textes gefunden, allerdings immer nur sehr kleine verstreute Bruchstücke inmitten von "Zufallszahlenwüsten". Man kennt das von manchen Kompressionsformaten, da sieht es ähnlich aus. Nanu, Kompression? Obwohl die hiberfil.sys doch genau der RAM-Größe entspricht? Keine Ahnung, was das zu bedeuten hat; 1:1 das RAM-Abbild scheint es jedenfalls nicht zu sein.

Also Fehlanzeige - mit dem Datenschrott ist ohne nähere Kenntnis des Formats nichts anzufangen.

"Das kann man durch rechtzeitiges Speichern wirkungsvoll verhindern. Erste aktion bei einem frischen Dokument ist das Speichern unter einem passenden Dateinamen, beim Arbeiten Zwischendurch ist ein Strg+S auch kein zusätzlicher Aufwand. Generell scheint mir der Aufwand einer solchen Rettungs-Aktion in keinem Verhältnis zum Nutzen zu stehen, lieber meine eben Hinweise zu Herzen nehmen um das Problem in Zukunft zu vermeiden..."

Oh je, ich hätte es ahnen müssen. Ja doch, Du hast ja sooo recht! Und da ich mich schon mit Computern befasste, als man die noch selber bauen musste, weil es sowas noch lange nicht im Laden gab (seit 1978, um genau zu sein), ist mir das auch längst in Fleisch und Blut übergegangen! Den Strg-S-Reflex (damals: Ctrl-S) hatte ich schon mit schlafwandlerischer Routine drauf, als ich 1984/85 meine Diplomarbeit schrieb - übrigens ohne jegliche Probleme mit WordStar unter CP/M auf einem selbstgebauten Z80-Rechner mit 64 k RAM und zwei 8-Zoll-Diskettenlaufwerken, die ein Vermögen gekostet hatten.

Aber der akute Fall war andes gelagert: Browser, Eingabefeld einer HTML-Seite, größerer Forumsbeitrag. Du verstehst? Da ist nix mit Strg-S! Wenn ich schon von vornherein weiß, dass es ein größerer Beitrag wird (was diesmal leider nicht der Fall war), dann schreibe ich eben genau aus diesem Grund lieber erstmal in Notepad und mache zum Schluss C&P ins Eingabefeld. Nur, diesmal halt nicht, weil sich der Text erst während des Schreibens entwickelte. Es ist auch nicht so sehr die Länge des Textes, die den Verlust ausmacht, als vielmehr die sorgfältige und gelungene Formulierung, die so einfach nicht wieder hinzukriegen ist.

Na ja, shit happens.... Jedenfalls vielen Dank für Deine Anregung!

Gruß, Manfred

bei Antwort benachrichtigen
Borlander dl7awl „ Naja, der Ruhezustand würde eigentlich schon das machen was Du möchtetest:...“
Optionen
Da Windows natürlich im Resume-Modus starten wollte und somit gar nicht erst nachsieht, ob eine Knoppix-Boot-CD im Laufwerk liegt
Also trotz Ruhezustand sollte es kein Problem sein ein anders OS zu booten, das BIOS ist schließlich für die Auswahl des Bootlaufwerkes zuständig...

habe darin dann auch tatsächlich einige (!) Teile meines Textes gefunden, allerdings immer nur sehr kleine verstreute Bruchstücke inmitten von "Zufallszahlenwüsten". [...] 1:1 das RAM-Abbild scheint es jedenfalls nicht zu sein.
Wieso nicht? Wer sagt denn, daß der Text in einem Stück im Speicher liegen muß? Keiner, daß kann das Programm, oder die zugrunde liegenden Bibliotheken machen wie sie es wollen. Eine Darstellung als komplettes Zeichenarray ist zumidendest alles andere als optimal wenn man den Text noch bearbeiten möchte...

Also Fehlanzeige - mit dem Datenschrott ist ohne nähere Kenntnis des Formats nichts anzufangen.
Ich habs ja bereits befürchtet ;-)

Aber der akute Fall war andes gelagert: Browser, Eingabefeld einer HTML-Seite, größerer Forumsbeitrag. Du verstehst?
Das macht es natürlich komplizierter.

Es ist auch nicht so sehr die Länge des Textes, die den Verlust ausmacht, als vielmehr die sorgfältige und gelungene Formulierung, die so einfach nicht wieder hinzukriegen ist.
Klar, das würde mich auch extrem ärgern, aber es realistisch betrachtet ist ein Neuschreiben immer noch deutlich weniger aufwendig als technische Wege :-\

Abgesehen davon: Aus theoretischen Überlegungen ist die Thematik natürlich trotzallem hochinteressant.


Gruß
Borlander
bei Antwort benachrichtigen
dl7awl Borlander „ Also trotz Ruhezustand sollte es kein Problem sein ein anders OS zu booten, das...“
Optionen

Hi Borlander!

"Wieso nicht? Wer sagt denn, daß der Text in einem Stück im Speicher liegen muß? Keiner, das kann das Programm, oder die zugrunde liegenden Bibliotheken machen wie sie es wollen."

Schon klar, einen "Rechtsanspruch" auf Klartext gibt es nicht. ;-) Trotzdem hielt ich es nicht für abwegig, mit einer gewissen Wahrscheinlichkeit darauf zu hoffen, dass der Eingabebuffer anhand seiner letzten Inhalte zu erkennen sein müsste - wenn nicht als fortlaufender zusammenhängender Text, dann als String-Array oder Zeiger-Array auf Strings oder ähnliches. Hätte mir ja schon gereicht. Aber das war eben nicht der Fall. Mit Abstand die meisten Teile meines Textes tauchten nirgendwo auf.

Ich glaube nach nochmaligem Nachdenken zu wissen, welchem ganz anderen Denkfehler wir beide aufgesessen sind: Gesichert wird in der hiberfil.sys ja ausschließlich der pyhsikalische Speicher, aber das Programm "sieht" bekanntlich nur logischen virtuellen Speicher mit einem linearen Adressraum, der weit größer als der physikalische Speicher sein kann. Bei so einem Speichermodell weiß man nie, was gerade im physikalischen RAM und was in der Auslagerungsdatei steht. Das ist Sache der Speicherverwaltung und aus Sicht des Programms völlig transparent. Das führt buchstäblich zu fast "zufälligen" RAM-Inhalten, die nahezu beliebig verwürfelt sein können. Das könnte deren "Konfusität" und Nutzlosigkeit erklären. Wenn das stimmt, war bereits die Ausgangs-Idee, so genial einfach sie auch schien, leider schon im Ansatz ungeeignet... ;-(

Schönen Gruß,

Manfred

P.S.: Eigentlich hatte ich ja auch schon im Eingangsposting erwähnt, dass es wegen des virtuellen Speichermodells wohl nicht ganz trivial sei, aber dann habe ich den Gedanken doch wieder aus den Augen verloren und mich auf die falsche Fährte locken lassen...

bei Antwort benachrichtigen
Borlander dl7awl „Hi Borlander! Wieso nicht? Wer sagt denn, daß der Text in einem Stück im...“
Optionen

Nabend Manfred...

Bei so einem Speichermodell weiß man nie, was gerade im physikalischen RAM und was in der Auslagerungsdatei steht.
Also nimmt man einfach hiberfil.sys und pagefile.sys ;-)

die nahezu beliebig verwürfelt sein können.
Also ganz beliebig nun nicht, es wird schon drauf geachtet daß zuerst das RAM und erst am Ende (oder im Idealfall gar nicht) die Swap-Datei verwendet wird...

Gruß
Borlander

bei Antwort benachrichtigen
dl7awl Borlander „Nabend Manfred... Also nimmt man einfach hiberfil.sys und pagefile.sys - Also...“
Optionen

"Also ganz beliebig nun nicht, es wird schon drauf geachtet daß zuerst das RAM und erst am Ende (oder im Idealfall gar nicht) die Swap-Datei verwendet wird..."

Sorry, ich hätte vielleicht noch erwähnen sollen, dass mein Suspend-Modus hervorragend funktioniert und mein Notebook normalerweise monatelang nicht rebootet wird. Da dürfte jede einfach zu durchschauende Systematik längst dahin sein - wie man ja auch gesehen hat.

Und ja, es ist übrigens wirklich so, dass ich nach einem Suspend to Disk von einem anderen Laufwerk nur dann booten kann, wenn ich zuvor abnicke, dass die Suspend-Daten gelöscht werden. Und genau das wäre ja kontraproduktiv gewesen...

bei Antwort benachrichtigen
Borlander dl7awl „ Also ganz beliebig nun nicht, es wird schon drauf geachtet daß zuerst das RAM...“
Optionen
dass ich nach einem Suspend to Disk von einem anderen Laufwerk nur dann bootenbild kann, wenn ich zuvor abnicke, dass die Suspend-Daten gelöscht werden.
Ungewöhnlich, hab ich bislang noch bei keinem System erlebt (zumindest wenn eine andere Bootreihenfolge gewählt wird als zuerst Festplatte)...
bei Antwort benachrichtigen
mike_2006 dl7awl „ Naja, der Ruhezustand würde eigentlich schon das machen was Du möchtetest:...“
Optionen

CTRL+C
... wär auch net schlecht ;-)
Das mach ich auch immer.
Und ich hab immer den editor nebenbei :-)

bei Antwort benachrichtigen
haegar the horrible dl7awl „Datenrettung aus RAM?“
Optionen

Nuja, fieserhaftigerweise dürfte es auch in genau dem Sinne abllaufen.

Nuuuur.... steckt der teufel mal wieder im Detail. Im Prinzip ist das Problem sehr ähnlich dem einer aus Versehen gelöschten Datei: der Speicherplatz, den der Text bzw. die Datei eben noch belegt hat, ist nun vogelfrei, d.h. jedes Programm, das den Bereich haben will. kann ihn bekommen. Führt der Absturz aber hingegen bis zum BSOD, ist da auch nichts mehr zu retten. Man kann also - wie beim Schnupfen - nur vorbeugen. Isses passiert, dann muß man durch, vorher schon wettergerecht anziehen, ist das Gebot der Stunde.

Es müßte also das Rettungstool schon im Speicher sein, bevor überhaupt irgendetwas abstürzen kann.Also so ein Rettungsproggi schon beim Booten als Dienst starten. Aber da ja nun mal nicht bekannt ist, welches Programm wann, wie und wo abkackt, müßte schon in jurzen Zeitabständen das GESAMTE RAM selbsttätig gesichert werden. Nächstes Problem: auch, wer "nur" 512MB drin hat, müßte da schon ein paar Minuten warten müswomöglich auch die vorige RAM-Datei weg - was ja nicht passieren soll.

Ich sehr nur 2 Möglichlkeiten (außer, sich endlich mal zusammenzureißen und verdammt nochmal besser aufzupassen...):
1. im Auslagerungsspeicher nachsehen,
2. einen Editor bzw. Programm benutzen, der in ganz kurzen Abständen die gerade bearbeiteten Dateien selber sichert.

OpenOffice z.B. kann das ja, wenn es mal wieder abgestürzt ist und wieder aufgerufen wird, fragt es ja häufig, ob die gesicherte(n) Arbeitsdatei(en) wieder rekonstruiert werden sollen. Diese Funktion arbeitet seht gur, nach meiner unmaßgeblichen Beobachtung sind dann erfreulich häufig nur die allerallerallerletzten 10, 20 oder so Buchstaben wirklich verloren gegangen.

bei Antwort benachrichtigen
ganzlieber73 haegar the horrible „Nuja, fieserhaftigerweise dürfte es auch in genau dem Sinne abllaufen....“
Optionen

Also ich bin sicherlich kein solcher Experte.
Beim lesen dieses Threads ist mir aber eines in den Sinn gekommen... Keylogger!

Gibt es doch als Software und als Hardware.

Wäre das vielleicht für die zukünftige Abstürze eine Lösung?

bei Antwort benachrichtigen