Depois de iniciar o VirtualBox, o computador ficou lento e, em seguida, desligou completamente devido ao OOM. Normalmente, o OOM deveria iniciar processos de interrupção para liberar espaço, mas isso não aconteceu (foi a segunda vez que experimentei isso).
Eu tinha um trabalho importante não salvo em um editor de texto, então esperava encontrá-lo na RAM do sistema depois de matar todos os processos no console atual usando o SysRq+ K. A máquina em questão é um laptop com 8 GiB de RAM executando 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 após a leitura de 1MiB 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 /proc/mtrr
(mostrado abaixo), decidi tentar adicionar skip=4096
. No final das contas, ele ficou mais lento, 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
Como não consegui encontrar os dados que abri por algumas horas no editor de texto, acredito que pulei alguma memória ao fazer um despejo. Portanto, dado meu objetivo (recuperação de dados dos programas do espaço do usuário), 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?
CONFIG_DEVKMEM
está desativado, olhando no código fonte que parecem permitir acesso sem restrições, mas eu ainda não estou convencido de que esta é a melhor maneira de fazê-lo (acesso mem IO?)