После запуска VirtualBox компьютер стал вялым, а затем полностью завис из-за OOM. Обычно OOM должен запускать процессы уничтожения, чтобы освободить место, но этого не произошло (это был второй раз, когда я испытывал это).
У меня была некоторая несохраненная важная работа в текстовом редакторе, поэтому я надеялся найти ее обратно в системной памяти после завершения всех процессов в текущей консоли с помощью SysRq+ K. Речь идет о ноутбуке с 8 ГБ ОЗУ под управлением Linux x86_64 3.7.5 с SSD в качестве целевого диска.
Моя первая попытка была dd if=/dev/mem of=memory
, но это не удалось после чтения 1MiB данных. Затем я попытался dd if=/dev/fmem of=memory bs=1M
, но это прекратилось после чтения 3010461696 байт (ровно 2871 МБ). Посмотрев /proc/mtrr
(показано ниже), я решил попробовать добавить skip=4096
. Это в конечном итоге замедлилось, чтение со скоростью всего 3 МБ / с, поэтому я прервал его (получив файл 5,8 ГБ). (по крайней мере последние 100 МБ файла содержат 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
Я не мог найти данные, которые у меня были открыты в течение нескольких часов, в текстовом редакторе, поэтому я считаю, что пропустил часть памяти при выполнении дампа. Итак, учитывая мою цель (восстановление данных из программ пользовательского пространства), какой самый эффективный способ вывести системную память в файл? Какие моменты нужно учитывать при выполнении такого дампа?
CONFIG_DEVKMEM
отключен, просматривая исходный код, он, кажется, разрешает неограниченный доступ, но я все еще не уверен, что это лучший способ сделать это (доступ к IO mem?)