访问 /dev/mem 冻结 Ubuntu
Accessing /dev/mem freezes Ubuntu
我正在使用带有自定义内核 (4.2.0-36-generic) 的最新 Ubuntu Linux,其中我禁用了 CONFIG_STRICT_DEVNEM,因为我需要在项目期间转储和搜索内存中的一些术语。
但是,当使用dd if=/dev/mem
在屏幕上打印,dd if=/dev/mem of=/home/user/Documents/file.dump
将其保存为文件或dd if=/dev/mem | hexdump -C | grep 'term'
直接查找我要查找的内容时,系统会死机并在此过程中重新启动。
我已经与 df -h
核对过,我的光盘有足够的免费空间 space。此外,该过程总是在从 8Gb RAM 写入 2.1Gb 到 2.5Gb 之后以及到达以 4 开头的地址之前停止(如果这些有任何区别)。此外,检查 /var/log/syslog
和 /var/log/kern.log
在冻结之前没有显示任何相关内容。
此外,使用参数 bs=1G count=2
成功复制了内存的前 2GB,但随后尝试 bs=1G count=2 skip=2
获取下一个 2GB 再次冻结系统。
您是否建议任何解决方案,以便可以转储全部内存或以其他方式直接在内存中搜索术语?
正如 ilkkachu 在 unix.stackexchange.com 上的回答,我试图访问 PCI/ACPI 或某些此类硬件使用的内存区域。因此我只需要访问 "safe" 个内存区域。
到目前为止,我可以安全地访问 (usable)
区域,如 /var/log/kern.log
所示:
[ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000c97e8fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000c97e9000-0x00000000c9e81fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000c9e82000-0x00000000ca101fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca102000-0x00000000ca106fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000ca107000-0x00000000ca149fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca14a000-0x00000000cabb4fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000cabb5000-0x00000000caff1fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000caff2000-0x00000000caffffff] usable
这些区域也可以在 /proc/iomem
上找到 "System RAM":
$ grep "System RAM" /proc/iomem
00001000-0009d7ff : System RAM
00100000-1fffffff : System RAM
20200000-3fffffff : System RAM
40200000-c97e8fff : System RAM
因此,我能够使用多个命令 dd
这些安全内存区域,例如(对于 20200000-3fffffff
):
dd if=/dev/mem of=Filename bs=230467520 count=1 skip=1 ibs=1075838980
(注意 ibs
比内存区的开头高几位, bs
比它的大小小一点,因为得到了所有 "safe"区,导致系统再次崩溃。)
更新:
更新:我可以安全地 dd
内存区域设置为 "System RAM"、"RAM buffer" 和 "reserved"。
我正在使用带有自定义内核 (4.2.0-36-generic) 的最新 Ubuntu Linux,其中我禁用了 CONFIG_STRICT_DEVNEM,因为我需要在项目期间转储和搜索内存中的一些术语。
但是,当使用dd if=/dev/mem
在屏幕上打印,dd if=/dev/mem of=/home/user/Documents/file.dump
将其保存为文件或dd if=/dev/mem | hexdump -C | grep 'term'
直接查找我要查找的内容时,系统会死机并在此过程中重新启动。
我已经与 df -h
核对过,我的光盘有足够的免费空间 space。此外,该过程总是在从 8Gb RAM 写入 2.1Gb 到 2.5Gb 之后以及到达以 4 开头的地址之前停止(如果这些有任何区别)。此外,检查 /var/log/syslog
和 /var/log/kern.log
在冻结之前没有显示任何相关内容。
此外,使用参数 bs=1G count=2
成功复制了内存的前 2GB,但随后尝试 bs=1G count=2 skip=2
获取下一个 2GB 再次冻结系统。
您是否建议任何解决方案,以便可以转储全部内存或以其他方式直接在内存中搜索术语?
正如 ilkkachu 在 unix.stackexchange.com 上的回答,我试图访问 PCI/ACPI 或某些此类硬件使用的内存区域。因此我只需要访问 "safe" 个内存区域。
到目前为止,我可以安全地访问 (usable)
区域,如 /var/log/kern.log
所示:
[ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000c97e8fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000c97e9000-0x00000000c9e81fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000c9e82000-0x00000000ca101fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca102000-0x00000000ca106fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000ca107000-0x00000000ca149fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000ca14a000-0x00000000cabb4fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000cabb5000-0x00000000caff1fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000caff2000-0x00000000caffffff] usable
这些区域也可以在 /proc/iomem
上找到 "System RAM":
$ grep "System RAM" /proc/iomem
00001000-0009d7ff : System RAM
00100000-1fffffff : System RAM
20200000-3fffffff : System RAM
40200000-c97e8fff : System RAM
因此,我能够使用多个命令 dd
这些安全内存区域,例如(对于 20200000-3fffffff
):
dd if=/dev/mem of=Filename bs=230467520 count=1 skip=1 ibs=1075838980
(注意 ibs
比内存区的开头高几位, bs
比它的大小小一点,因为得到了所有 "safe"区,导致系统再次崩溃。)
更新:
更新:我可以安全地 dd
内存区域设置为 "System RAM"、"RAM buffer" 和 "reserved"。