🐕

Arch Linux でハイバネートからの復帰が失敗していたので調査・修正した

2025/03/02に公開
2

概要

Arch Linux で休止状態(ハイバネーション)からの復帰が失敗し、通常の起動が行われる問題が発生しました。ブートログに以下のようなエラーメッセージが表示されていました。

Mar 02 16:25:09 archlinux kernel: Hibernate inconsistent memory map detected!
Mar 02 16:25:09 archlinux kernel: PM: hibernation: Image mismatch: architecture specific data
Mar 02 16:25:09 archlinux kernel: PM: hibernation: Failed to load image, recovering.
Mar 02 16:25:09 archlinux kernel: PM: hibernation: Read 5764372 kbytes in 0.01 seconds (576437.20 MB/s)
PM: Error -1 resuming

swapon --summary を確認すると、スワップが有効になっていないことが判明しました。

Swap:             0B          0B          0B

blkid コマンドでスワップパーティションの UUID を確認したところ、/boot/loader/entries/arch.conf で設定されていた resume=UUID=... の UUID と一致していませんでした。

解決方法

1. Swap Partition を設定し直す

そもそも Swap Partition の設定がなんか変だった。

変更前:

sudo cfdisk /dev/nvme0n1

該当パーティションに swap タイプを設定し直して書き込み。

変更後:

2. スワップの有効化

sudo mkswap /dev/nvme0n1p2
sudo swapon /dev/nvme0n1p2

# 確認
swapon --summary

これでスワップが認識されれば OK。

3. /etc/fstab の修正

再起動後もスワップを維持するために次の手順を実行する必要がある。

sudo vim /etc/fstab

# 以下のようにスワップの UUID を更新
UUID=新しいUUID none swap defaults 0 0

なお上記手順は genfstab -U / > /etc/fstab で一発で修正できる。

変更後、スワップを再有効化。

sudo swapon -a

4. カーネルパラメーターとブートローダーの設定

sudo vim /boot/loader/entries/arch.conf

resume=UUID=古いUUIDresume=UUID=新しいUUID に変更して、以下を実行する。

# ブートローダーを更新
sudo bootctl update

# 念の為、実行する(しなくても良いかも)
sudo mkinitcpio -P

5. 再起動して確認

sudo reboot

# 再起動、スワップとハイバネーションの動作を確認
swapon --summary
free -h
sudo systemctl hibernate

なぜ Swap されなくなったのか

理由は不明ですが、直近のシステムアップデート (pacman -Syyu) によりスワップもしくはパーティション設定がリセットされた可能性くらいしか考えられません。パーティション周りは何もいじっていないので不明です。

まとめ

問題

  • swap パーティションが破損?していた。かつresume= の設定とズレていた
  • /etc/fstabsystemd-boot の設定がスワップの UUID に対応していなかった
  • スワップが正常にマウントされていなかった

解決策

  • swap パーティションを再作成
  • /etc/fstab の UUID を正しく設定
  • resume= の UUID を boot/loader/entries/arch.conf で更新
  • mkinitcpio -P で initramfs を再生成
  • swapon --summary でスワップを確認し、systemctl hibernate で動作チェック

これで Arch Linux のハイバネーションが正しく機能するようになりました。

Discussion

meet4580meet4580

こんにちは、貴重な記事ありがとうございます。

fstabの編集についてですが、arch-install-scriptsをインストールして、

# genfstab -U / > /etc/fstab

とすれば、転記の手間が省けると思います。

五所 和哉 (MonCargo CTO)五所 和哉 (MonCargo CTO)

コメントありがとうございます!私もクリーンインストール時は genfstab を使うのですが、今回は修正だけだったので 直接編集していました。追記しておきます!