將 Linux 從舊的(已恢復的)休眠狀態恢復

將 Linux 從舊的(已恢復的)休眠狀態恢復

我已成功休眠並從 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

我曾經犯過類似的錯誤:

  1. 將 Windows 作為主機作業系統,並在 VirtualBox 中實際安裝 Linux 作為來賓作業系統(透過原始 VMDK 對應的虛擬裝置)。我每天都會這樣做,沒有出現任何問題,每隔幾天就在虛擬運行在 Windows 上的相同 Linux 安裝和實際運行在裸機上的 Linux 安裝之間來回切換。
  2. 由於某種原因,Windows 在我不知情的情況下休眠了 - 我幾乎從不手動執行此操作,或允許執行此操作(以避免以下潛在問題)。
  3. 我有一段時間沒有使用這台機器,忘記了它之前是什麼狀態。當重新啟動時,我只是假設它已經全部正確關閉(虛擬機器乾淨地關閉,然後主機作業系統乾淨地關閉)。
  4. 我本機直接啟動進入 Linux。由於這本質上是在嚴重崩潰後重新啟動 Linux,所以一切或多或少都很好。由於我當時根本不記得之前發生過任何事情,所以我根本沒有註意到任何異常。
  5. 我重新啟動進入 Windows,重新思考,沒有註意到它正在從休眠狀態恢復。
    • 這包括加載回內存,虛擬機在真正的 Linux SSD 上運行。

結果? Linux VM 立即崩潰,並且Linux 上的一切都徹底破壞了,無法修復或恢復

即使首先透過啟動復原 CD 來修復並存取 ext4 文件系統,也會導致系統無法啟動,其中有大量隨機損壞的系統和使用者資料文件,這讓我對任何內容的完整性都沒有信心。

唯一明智的做法就是從頭開始重新安裝 Linux 並從備份中還原資料。

出於類似的原因,如果您啟動到先前儲存的休眠文件,幾乎肯定會發生這種情況。 (儘管我什至不確定一個正常運行的系統如何“讓”你這樣做?)

相關內容