長い間、私は
echo disk > /sys/power/state
休止状態にするために/dev/sda10
、Debian ディストリビューションの initrd を使用して再開していました。
しかし最近、RAIDアレイに切り替えました完全にカスタムのinitramfsを使用する必要がある (既存の initrd を変更しようとしたがうまくいかなかったため、最初から構築する必要がありました)ルート パーティションをマウントする前に RAID アレイをセットアップします。
再開するには2つの方法があります。カーネルが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ユーティリティ- プロセスを構成するための高レベルスクリプト
- systemd サスペンド- systemd システムでは、カーネル インターフェイスを介してサスペンド操作を開始するサスペンド ターゲットが利用可能です。
再開設定
initramfs イメージを使用した Linux のブート シーケンスの簡略化された概要は次のとおりです。
[BIOS] ==> [ブートローダー] ==>[一時 rootfs 上のカーネル - initramfs] ==> [rootfs 上のカーネル - ドライブ]
initramfs ステージの最後に、再開が発生する小さなウィンドウがあります。カーネルが PID 1 (systemd または init) を開始し、RAID のドライバーをロードした後、実際のドライブをマウントする前です。
一般的な再開構成の例を示しました。これは、指定した再開パスがスワップ パーティションであり、スワップ ファイルを含む「通常の」パーティションではないことを前提としています。スワップ ファイルには追加の構成が必要です。systemd の方法は異なります。再開プロセスをトリガーする resume.target に基づく udev ルールを使用します。より従来のブートローダー / initramfs イメージ アプローチが機能しない場合は、調べる価値があります。これは、init ベースのシステムで実行される方法と直接関係しますが、独自のスクリプトを手動で挿入して相互依存関係 / 相対的なタイミングを正しく取得するのは少し複雑です。
肝心なのは、再開がトリガーされる時点は、カーネルが「実際の」ハード ドライブをマウントする直前であるということです。したがって、カーネルがファイルシステム全体をマウントできる場合、スワップ パーティションのみをマウントするために必要な機能と情報もすべてカーネルに備わっています。
スワップ パーティションが fstab 経由でマウントされていることを確認してください。dracut initramfs ツールは特にそれを検索し、スワップ パーティションが存在しない場合は再開モジュールを含めません。
ブートローダーを設定する
grub2 を使用している場合は、 通常は次のコマンドを使用して、grub イメージの更新のフィールドresume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9
に追加する必要があります。GRUB_CMDLINE_LINUX_DEFAULT
/etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
initramfsを再構築する
initramfs イメージを、再開機能 (および既に行った RAID の変更) 付きで再構築する必要があります。Debian は、initramfs を生成するために dracut と initramfs-tools の両方を提供しています。再開モジュールを使用して再生成する必要があります。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