![用於從休眠狀態復原的使用者空間命令是什麼?](https://rvso.com/image/1493924/%E7%94%A8%E6%96%BC%E5%BE%9E%E4%BC%91%E7%9C%A0%E7%8B%80%E6%85%8B%E5%BE%A9%E5%8E%9F%E7%9A%84%E4%BD%BF%E7%94%A8%E8%80%85%E7%A9%BA%E9%96%93%E5%91%BD%E4%BB%A4%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
在很長一段時間裡,我用過
echo disk > /sys/power/state
為了休眠/dev/sda10
,我使用 Debian 發行版的 initrd 來恢復。
但最近我換了raid陣列這需要我使用完全自訂的 initramfs (我必須從頭開始建立它,因為嘗試修改現有的 initrd 不起作用)為了在掛載根分割區之前設定 raid 陣列。
有兩種方法可以恢復:核心可以使用resume=
核心參數直接讀取交換檔案系統(並且它將在啟動 init 之前恢復) ;或者它需要一些用戶空間(例如加載模組)為了能夠存取交換分區。
那麼用戶空間指令是什麼才能從 /dev/mapper/isw_qfyzrvbsusf_Volume0p9
?
答案1
簡短的答案是 /sys/power/resume
答案要長得多,因為這本身並沒有多大作用,即使有什麼好處。大多數發行版建議從 init / PID 1 進程(早期用戶空間)啟動復原。但是,這些說明幾乎總是會通知您使用恢復目標將核心命令列參數新增至引導程式。原因是在幾乎所有情況下,initramfs 建置工具(dracut / mkinitcpio / initramfs-tools)本身都是由配置中的該參數觸發的。
根據您的範例和發行版,我假設您正在使用低階核心介面進行掛起(swsusp)。還有許多其他實用程式可用於啟動掛起進程;所有這些從根本上來說都是第一個項目 swusp 的包裝。
- 斯伍斯普- 低階核心介面;使用者空間介面是透過sysfs
- 美國世界水利協會- 低階用戶空間軟體掛起包裝器 - 提供 s2disk、s2ram 實用程式(未主動維護)
- pm-utils- 用於配置流程的進階腳本
- systemd 掛起- 在 systemd 系統上,可以使用掛起目標,該目標將透過核心介面啟動掛起操作。
恢復配置
使用 initramfs 映像的 Linux 中的引導順序的過於簡化的輪廓是:
[BIOS] ==> [引導程式] ==>[臨時 rootfs 上的核心 - initramfs] ==> [rootfs 上的核心 - 磁碟機]
在 initramfs 階段的末端有一個小窗口,可以在其中進行恢復;在核心啟動 PID 1(systemd 或 init)之後,載入用於 raid 的驅動程序,但在安裝實際驅動器之前。
我提供了一個典型的簡歷配置範例。這假設您提供的復原路徑是交換分割區;而不是包含交換文件的“正常”分區。交換文件需要額外的配置。 systemd 方法有所不同 - 它使用基於resume.target 的udev 規則來觸發恢復過程。如果更傳統的 bootloader / initramfs 映像方法不起作用,則值得研究。這是基於 init 的系統執行此操作的方式的直接核心;但手動插入自己的腳本並獲得正確的相互依賴性/相對時間有點棘手。
最重要的是,觸發恢復的時間點恰好在核心安裝「真實」硬碟之前。因此,如果核心可以掛載整個檔案系統,那麼它也具有掛載交換分割所需的所有功能和資訊。
確保您的交換分割區已透過 fstab 掛載; dracut initramfs 工具專門尋找它,如果交換分割區不存在,則不包含復原模組。
配置引導程式
假設您使用的是 grub2,您需要附加resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9
到 更新 grub 映像GRUB_CMDLINE_LINUX_DEFAULT
中的字段,通常使用命令:/etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重建initramfs
您需要使用復原功能重建 initramfs 映像(以及您已經進行的 raid 修改)。 Debian 提供了 dracut 和 initramfs-tools 來產生 initramfs。必須使用恢復模組重新產生它。使用 dracut,新增命令列參數--add resume
。使用update-initramfs
,將條目新增resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9
至設定檔中/etc/initramfs-tools/conf.d/resume
應該是這樣;假設我對您的配置做了一些正確的假設。
編輯;假設您可以正確計時,您可以將交換分割區的主/次裝置號碼從 init 腳本回顯到 /sys/power/resume 以觸發復原。您的 initramfs(或 initd)映像需要有恢復支持,否則 sysfs 項及其代表的功能將不存在。看https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/983805
答案2
該文件是/sys/power/resume
.
為了觸發恢復,必須將設備的主要設備和次要設備寫入該檔案。所以下面的命令可以實現它:
echo `stat -c %t /dev/mapper/isw_*_Volume0p9`\:`stat -c %T /dev/mapper/isw_*_Volume0p9` > /sys/power/resume