Estou usando o Ubuntu Linux mais recente com um kernel customizado (4.2.0-36-genérico), no qual desabilitei o CONFIG_STRICT_DEVNEM
, porque preciso despejar e pesquisar alguns termos na memória durante um projeto.
No entanto, ao usar:
dd if=/dev/mem
para imprimi-lo na tela,dd if=/dev/mem of=/home/user/Documents/file.dump
para salvá-lo como um arquivo oudd if=/dev/mem | hexdump -C | grep 'term'
para encontrar diretamente o que procuro,
o sistema congela e reinicia durante o processo.
Verifiquei df -h
e meu disco tem bastante espaço livre. Além disso, o processo sempre para após gravar 2,1 Gb em 2,5 Gb, de 8 Gb de RAM e antes de atingir endereços que começam com 4 (se isso fizer alguma diferença). Além disso, a verificação /var/log/syslog
não /var/log/kern.log
mostra nada de relevante antes do congelamento.
Além disso, o uso de parâmetros bs=1G count=2
copia com êxito os primeiros 2 GB de memória, mas a tentativa bs=1G count=2 skip=2
de obter os próximos 2 GB novamente congela o sistema.
Você sugeriria alguma solução para que seja possível despejar toda a memória ou alguma outra forma de pesquisar termos diretamente na memória?
Responder1
Eu acho que você pode encontrar alguma área de memória usada por PCI/ACPI ou algum hardware desse tipo. Pode haver um dispositivo mapeado na memória que não gosta de ser acessado. Não sei dizer exatamente qual endereço causa o problema, mas é comum que algumas áreas especiais estejam localizadas logo abaixo do limite de 4 GB.
Em uma máquina com 4 GB de memória, o kernel imprime o seguinte na inicialização:
BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
Parte da memória utilizável está acima do limite de 4 GB 0x100000000
e parece haver lacunas entre 0xcf700000
e 0xfec00000
.
As áreas correspondentes à memória “utilizável” também são mostradas em /proc/iomem
, marcadas como “RAM do Sistema”. (o arquivo também contém informações sobre outras áreas da memória.) Você pode estar mais seguro apenas lendo nessas áreas.
$ grep "System RAM" /proc/iomem
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM