[unix] 전체 시스템 메모리를 덤프하는 방법

VirtualBox를 시작한 후 컴퓨터가 느려지고 OOM으로 인해 완전히 중단되었습니다. 일반적으로 OOM은 공간을 확보하기 위해 강제 종료 프로세스를 시작해야하지만 이것은 발생하지 않았습니다 (이것이 두 번째로 발생했습니다).

텍스트 편집기에서 저장하지 않은 중요한 작업이 있었으므로 SysRq+를 사용하여 현재 콘솔의 모든 프로세스를 종료 한 후 시스템 RAM에서 다시 찾으려고했습니다 K. 해당 머신은 대상 디스크로 SSD를 사용하여 Linux x86_64 3.7.5를 실행하는 8GiB RAM이 장착 된 랩톱입니다.

첫 번째 시도는 dd if=/dev/mem of=memory이지만 1MiB의 데이터를 읽은 후 실패했습니다. 다음으로 시도 dd if=/dev/fmem of=memory bs=1M했지만 3010461696 바이트 (정확하게 2871 MiB)를 읽은 후에 중지되었습니다. 보고 후 /proc/mtrr(아래 그림 참조), 나는 추가하기로 결정했습니다 skip=4096. 결국 3MiB / 초의 속도로 읽기가 느려지므로 중단했습니다 (파일 5.8GiB). (적어도 파일의 마지막 100MiB에 FFs 가 포함되어 있음 )

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

텍스트 편집기에서 몇 시간 동안 열어 놓은 데이터를 찾을 수 없으므로 덤프를 수행하는 동안 일부 메모리를 건너 뛰었다 고 생각합니다. 내 목표 (사용자 공간 프로그램에서 데이터 복구)를 감안할 때 시스템 메모리를 파일로 덤프하는 가장 효율적인 방법은 무엇입니까? 그러한 덤프를 수행하는 동안 고려해야 할 몇 가지 사항은 무엇입니까?



답변

이 프로젝트를 확인하십시오 : foriana

Foriana는 (FOrensic Ram Image ANAlyzer)

입력 : (물리적) RAM 출력 덤프 : 다양한 정보

버전 1.0은 i386 / x86_64 / arm linux / bsd 커널의 메모리 덤프에서 프로세스 및 모듈을 나열 할 수 있으며 덤프에서 선형 메모리를 읽는 옵션을 제공합니다.

커널 모듈 fmem이 있습니다 :

Fmem은 커널 드라이버이며 / dev / fmem 장치를 만듭니다. / dev / fmem은 / dev / mem (물리적 메모리에 대한 직접 액세스)과 같은 방식으로 동작하지만 / dev / mem에 제한이 없습니다. / dev / fmem을 통해 전체 물리적 메모리를 덤프 할 수 있습니다.

나는 그것을 사용했고, 꽤 쉽게 컴파일했다.


답변

ddrescue액세스 할 수없는 데이터를 건너 뛸 수있는 유사한 프로그램 을 사용하고 싶을 수도 있습니다 . dd conv=noerror도움이 될 수도 있습니다. 수퍼 유저에서도이 질문을 확인하십시오 .

더 중요한 것은 OOM 상황에 처한 경우 커널이 요청하는 응용 프로그램 이외의 페이지에서 커널을 스왑 아웃하여 느려졌을 가능성이 큽니다. 따라서 데이터를 원한다면 대신 스왑을 확인하십시오 /dev/mem-기회가있을 것입니다. 마찬가지로 OOM 킬러가 시작되지 않고 수동으로 프로세스를 종료하는 경우 일단 편집자가 먼저 종료되면 메모리 배고픈 프로세스가 여전히 해당 페이지를 가져 오기 위해 약간의 시간이 걸릴 수 있습니다.

주석의 질에 의해 언급 한 바와 같이 당신이 쉽게 당신이 살해 프로세스의 주소 공간 매핑을 재구성하기 위해 관리하는 경우에도 찾을 수 없습니다 있도록 데이터를 쉽게, 일부 특수 구조에있을 수 필요한 모든을 찾을 정도로 운이 페이지는 그대로 유지됩니다.


답변