启动VirtualBox后,计算机变得缓慢,然后由于OOM而完全挂起。通常,OOM应该开始杀死进程以释放一些空间,但这没有发生(这是我第二次遇到这种情况)。
我在文本编辑器中进行了一些未保存的重要工作,因此我希望在使用SysRq+ 杀死当前控制台中的所有进程后,将其找到系统RAM中K。有问题的机器是一台笔记本电脑,带有8 GiB RAM,运行Linux x86_64 3.7.5,并以SSD作为目标磁盘。
我的第一次尝试是dd if=/dev/mem of=memory
,但是在读取1MiB数据后失败了。接下来,我尝试了dd if=/dev/fmem of=memory bs=1M
,但是在读取3010461696字节(恰好是2871 MiB)之后,此操作停止了。看完/proc/mtrr
(如下所示)后,我决定尝试添加skip=4096
。这最终放慢了速度,读取速度仅为3 MiB / sec,所以我中断了它(产生了5.8 GiB的文件)。(至少文件的最后100个MiB包含FF
)
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访问?)