Nach dem Start von VirtualBox wurde der Computer träge und blieb aufgrund von OOM vollständig hängen. Normalerweise sollte OOM damit beginnen, Prozesse zu beenden, um Speicherplatz freizugeben, aber dies ist nicht geschehen (dies war das zweite Mal, dass ich dies erlebte).
Ich hatte einige nicht gespeicherte wichtige Arbeiten in einem Texteditor, also hoffte ich, sie wieder im System-RAM zu finden, nachdem ich alle Prozesse in der aktuellen Konsole mit SysRq+ beendet hatte K. Bei dem fraglichen Computer handelt es sich um einen Laptop mit 8 GB RAM unter Linux x86_64 3.7.5 mit einer SSD als Zielfestplatte.
Mein erster Versuch war dd if=/dev/mem of=memory
, aber dies schlug fehl, nachdem ich 1 MB Daten gelesen hatte. Als nächstes habe ich es versucht dd if=/dev/fmem of=memory bs=1M
, aber dies hörte auf, nachdem ich 3010461696 Bytes (genau 2871 MiB) gelesen hatte. Nachdem /proc/mtrr
ich mir (siehe unten) angesehen hatte, beschloss ich, es hinzuzufügen skip=4096
. Dies verlangsamte sich schließlich und las mit einer Geschwindigkeit von nur 3 MiB / s, so dass ich es unterbrach (was eine Datei von 5,8 GiB ergab). (mindestens die letzten 100 MiB der Datei enthalten FF
s)
reg01: base=0x000000000 ( 0MB), size= 2048MB, count=1: write-back
reg02: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg03: base=0x100000000 ( 4096MB), size= 4096MB, count=1: write-back
reg04: base=0x200000000 ( 8192MB), size= 1024MB, count=1: write-back
reg05: base=0x23c000000 ( 9152MB), size= 64MB, count=1: uncachable
reg06: base=0x0b4000000 ( 2880MB), size= 64MB, count=1: uncachable
reg07: base=0x0b8000000 ( 2944MB), size= 128MB, count=1: uncachable
Ich konnte die Daten, die ich einige Stunden lang geöffnet hatte, nicht im Texteditor finden, daher glaube ich, dass ich beim Ausführen eines Speicherauszugs etwas Speicher übersprungen habe. Was ist angesichts meines Ziels (Wiederherstellung von Daten aus Userspace-Programmen) die effizienteste Methode, um den Systemspeicher in eine Datei zu kopieren? Was sind einige Punkte, die bei einem solchen Dump berücksichtigt werden müssen?
CONFIG_DEVKMEM
ist deaktiviert, im Quellcode scheint es uneingeschränkten Zugriff zu erlauben, aber ich bin immer noch nicht davon überzeugt, dass dies der beste Weg ist (IO-Mem-Zugriff?)