Після запуску 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?)