重新启动会清除 RAM 吗?
在POST期间,BIOS 传统上会执行“内存测试”,这需要写入和重新读取整个物理 RAM。但是,此过程可能会花费不可忽略的时间,并且在检测坏内存方面相当糟糕(它只可靠地检测到非常坏的内存),因此在许多情况下(由计算机供应商或用户)禁用它。因此,必须假设上次启动之前的 RAM 内容碎片可能仍然存在;保留多少数据取决于 RAM 技术、新启动前的断电时间和温度。
Linux 内核与大多数其他现代操作系统(包括 Windows,不包括“95”行中的 Windows)一样,在将 RAM 页面交给应用程序之前将其清零。因此,虽然物理 RAM 内容可能包含有趣的过去数据残余,但这只能由内核代码访问;用户空间只看到零。
在尾巴上可以!
除此之外,我不知道有任何其他流行的操作系统默认执行此操作,因此,如果有人将您的 RAM 棒插入到某种为窥探您的数据而编写的操作系统中(它可能必须是一个本质上定制的内核以避免任何 RAM 写入操作)他们将能够获得所有甜美多汁的内存。
感谢 Thomas Pornin 提示用户模式应用程序无法访问原始 RAM。
在虚拟机上似乎没有清除内存。在 IncludeOS (includeos.org) 中,我们使用它来将崩溃数据存储在内存中(因为 IP 堆栈和 IO 系统可能无法正常工作)并在重新启动系统后获取崩溃报告。
我们已经在 qemu/kvm 和 Vmware ESXi 上对此进行了测试。我们尚未在裸机上进行测试。
重启不,不再。
今天的系统被设计成能够很好地维持 RAM 内容以用于待机/睡眠/休眠或任何类型的挂起状态以及其他用途,例如持久性 RAM 磁盘。除非软件做了特殊的事情来清除 RAM 内容(就像 TrueCrypt 在你运行 truecrypt /wipecache 时所做的那样),否则数据将仍然存在,直到被覆盖。
至于断开电源的过程,那么是的,RAM 内容确实会清除,对于 DDR3 及更高版本来说非常快,因此它实际上会变成空白,除非系统设计有某种集成备用电池(例如某些存储系统或服务器)。
现在,如果您有意擦除 RAM 而不会导致拔出电源等野蛮手段,您可以启动一个 memtest,它会为您清理得非常好。
我还在早期操作系统上使用了一种不同的测试方式:我有一个测试文件(包含随机数据或只有一个字符重复),与系统的 RAM 一样大。我使用将整个文件加载到 RAM 中的编辑器打开它进行编辑。有时,会出现内存不足错误。我关闭编辑器并继续我的工作。