来自GNOME Evolution的撰写电子邮件窗口,其中电子邮件正文已损坏。

如何从我的电子邮件客户的内存中恢复丢失的电子邮件

我以前写过在上恢复了未保存的文档数据库单元服务在桌面shell会话崩溃后从GNOME文本编辑器(GEdit)获取。这里有一个类似的令人兴奋的故事从令人兴奋的世界桌面电子邮件应用程序!

GNOME桌面项目的电子邮件和个人信息管理客户端Evolution有一个糟糕的数据丢失错误。它有时会在使用中的“签名预设”菜单更改签名后删除“撰写”窗口中的电子邮件正文文本。我不知道复制它的确切步骤,但在过去的两年里它每月咬我两次。电子邮件的内容只会被删除,除了新签名之外,您将留下一条空消息。

更糟的是,撤消历史记录被清除,所以我无法按Ctrl+Z键恢复原稿。我学会了在开始写回信之前更改签名来避免这种情况。有时我忘记了,然后它的数据丢失宾果时间!要么我会丢失电子邮件,要么它会正常工作。我从来没有输过一两段。

几天前,我丢失了一封长邮件,这封邮件花了我半个小时来撰写。我保持了完全的冷静,没有沮丧地离开我的电脑。(不是。)如果我保持冷静并立即采取行动,我可能可以从草稿文件夹中部分恢复邮件。它被一条空消息覆盖了。我必须在以后查看我的电子邮件草稿文件夹的版本。

然而,所有的希望都没有失去。引用一部深受喜爱的古生物学幻想电影:“这是一个Unix系统!我知道!它有整个公园的所有文件。它告诉你一切!我必须找到正确的文件。”

这一次,在虫子露出丑陋的脸之后,我没有关闭进化或者构图窗口。我的电子邮件的完整副本可以保留在内存中。我的电脑有32GB的内存,盲目地处理所有内存既有技术上的挑战,又很耗时。

Linux在/过程/$pid码/地图,其中$pid码是正在运行的进程的进程标识符/编号。有多种工具可用于检索与这些地址对应的内存块并将它们保存到常规文件中。

我决定皮多夫(作为的一部分安装加工不良)用于识别工艺编号,以及gcore公司(作为的一部分安装gdb公司,GNU调试工具套件),用于将进程的内存读取到文件。下面是我使用的最后一个命令:

gcore$(皮多夫运行进程名称)

这产生了一个巨大的4gb二进制内存转储文件。关于现代桌面应用程序对内存的渴求的评论放在一边;这仍然需要处理大量数据。有专门的工具可用于分析此数据blob。但是,我决定使用纳米技术文本编辑器。它“舒适”地处理大量文件,并且在使用它读取二进制数据时不会阻塞。我知道我感兴趣的数据将存储在UTF-8中,因此文本编辑器应该能够识别它。

搜索这个大文件花了很长时间。只是有很多数据要处理。我最初认为寻找独特的单词是最好的方法。我发现的前十几个匹配项是与拼写检查器相关的数据。然而,我改变了主意,转而寻找我能记住的部分句子片段。这种新方法将错过任何引用的可打印(RFC 2045)消息表示,但将提供更少的碎片匹配。

使用这种方法,我能够识别和检索完整电子邮件的纯文本副本。我从RAM中检索到的副本明显有一个新的签名,当电子邮件内容从编辑窗口中消失时,我选择了这个签名。

我很高兴这次能找回邮件。不过,我可能应该留出一些时间迁移到另一个电子邮件客户端。进化是伟大的!我遇到了多个问题与电子邮件作曲家窗口特别。当我不能可靠地使用电子邮件客户端来编写电子邮件时,它并不是很有用。

文章顶部的特征图像是一封被破坏的电子邮件的艺术渗透。当本文中提到的bug(错误905)发生时,编辑器窗口的内容将被简单删除。然而,一个空白的窗口并不代表一个有趣的图像。