Depois de iniciar o VirtualBox, o computador ficou lento e ficou completamente suspenso devido à OOM. Normalmente, a OOM deve começar a matar processos para liberar algum espaço, mas isso não aconteceu (essa foi a segunda vez que experimentei isso).
Eu tive alguns trabalhos importantes não salvos em um editor de texto, então eu esperava encontrá-lo de volta na RAM do sistema depois de matar todos os processos no console atual usando SysRq + K . A máquina em questão é um laptop com 8 GiB de RAM rodando o Linux x86_64 3.7.5 com um SSD como disco de destino.
Minha primeira tentativa foi dd if=/dev/mem of=memory
, mas isso falhou depois de ler 1 MiB de dados. Em seguida, tentei dd if=/dev/fmem of=memory bs=1M
, mas isso parou depois de ler 3010461696 bytes (exatamente 2871 MiB). Depois de olhar para /proc/mtrr
(mostrado abaixo), decidi adicionar skip=4096
. Isso acabou diminuindo, lendo a uma velocidade de apenas 3 MiB / s, então eu o interrompi (produzindo um arquivo de 5.8 GiB). (pelo menos os últimos 100 MiB do arquivo contém 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
Eu não consegui encontrar os dados que eu tinha aberto por algumas horas no editor de texto, então acredito ter pulado um pouco de memória enquanto fazia um dump. Então, dado o meu objetivo (recuperação de dados de programas userspace), qual é o método mais eficiente para despejar a memória do sistema em um arquivo? Quais são alguns pontos que devem ser considerados ao fazer esse despejo?