我已成功在 Linux 中休眠并从交换分区恢复。据我所知,此后没有进行任何交换,交换分区也没有进行其他修改。这让我想到,之前状态的休眠映像仍然存在且可以运行,只是修改了标题或类似内容。
如果这是真的,我怎样才能从这样的图像中恢复?那么切线问题是,是否应该尝试这样的事情,以及它可能会破坏什么东西。
实现此目的的明显可能性是重新创建休眠过程,但实际上不保存图像。经过误导性的摆弄后,/sys/power/resume
我偶然发现了这段来自https://www.kernel.org/doc/Documentation/power/swsusp.txt:
The resume process checks for the presence of the resume device,
if found, it then checks the contents for the hibernation image signature.
If both are found, it resumes the hibernation image.
从中我感觉到,这个签名是在休眠时写入的,表示设备需要恢复,之后会被擦除以防止重复恢复。即使这是真的,我也没有足够的技能从内核代码中获取有关签名的信息,而且交换分区的十六进制转储出奇地稀疏,充满了我不理解的结构。
答案1
我曾经犯过类似的错误:
- 将 Windows 作为主机操作系统运行,并在 VirtualBox 中实际安装 Linux 作为客户操作系统(通过原始 VMDK 映射虚拟设备)。我每天都会这样做,没有出现任何问题,每隔几天就会在虚拟运行在 Windows 上的同一 Linux 安装和实际运行在裸机上的安装之间来回切换。
- 由于某种原因,Windows 在我不知情的情况下进入了休眠状态 - 我几乎从来没有手动这样做过,或者允许这样做(以避免以下潜在问题)。
- 我有一段时间没使用机器了,忘记了它之前的状态。重新启动时,我只是假设它已经完全关闭(虚拟机完全关闭,然后主机操作系统完全关闭)。
- 我直接启动了 Linux。由于这实际上是在一次严重崩溃后重新启动 Linux,所以一切基本正常。由于我当时甚至不记得之前发生过任何事情,所以我根本没有注意到任何异常。
- 我重新启动 Windows,重新思考了一下,没有注意到它正在从休眠状态恢复。
- 这包括将运行在真实 Linux SSD 上的 VM 加载回内存。
结果呢?Linux VM 立即崩溃了,并且Linux 的一切都被彻底搞垮了,无法修复或恢复。
即使先通过启动恢复 CD 来修复并访问 ext4 文件系统,也会导致系统无法启动,并且会出现大量随机损坏的系统和用户数据文件,让我对任何东西的完整性都没有信心。
唯一明智的做法是从头重新安装 Linux 并从备份中恢复数据。
出于类似的原因,如果您启动到先前存储的休眠文件,几乎肯定会发生这种情况。(尽管我甚至不确定正常运行的系统如何“允许”您这样做?)