04.GPDPocketで、ハイバネーションを使えるようにする

設定手順

  1. スワップファイル関連
  2. 「電源管理」アプリ関連
  3. GRUB関連

 

スワップファイル関連

 今回小生は、サスペンドやハイバネートのこと等あまり考えもなくLinuxをインストールしたので、すべてデフォルト状態の、インストーラーに言われるがままのパーティション構成である(そもそもサスペンドはデフォルトで機能するため、本稿ではハイバネートのみ扱っている)。そのため、特にスワップファイルが容量不足であるので、スワップファイルの再設定からはじめた。作業手順は下記の通りである。

  1. スワップファイルの容量と場所の確認
  2. スワップファイルの無効化と新スワップファイル作成
  3. スワップファイルの有効化と登録

スワップファイルの容量と場所の確認

 
 まずは、現状のスワップファイル容量の確認である。

 

$>free -h メモリとスワップファイルの容量等の情報が出力される。
$>swapon  スワップファイルの場所と容量が出力される。
 
 スワップファイルはディスクルートに置きたいので、上記操作のうちルートデバイス名と容量はメモしておく。その際、ルートデバイスのUUIDを全部でなくて良いので、区別できるりくらい書き留めておく。 
 次に、小生のGPDPocketではスワップファイルは2GB確保されているのみであったため、容量を変更する。簡単に言えば作り直しである。

スワップファイルの無効化と新スワップファイル作成


 現状、あなたのディスクにスワップファイルが正しく適正量設定されている場合、この作業は不要である、飛ばして<「電源管理」アプリ関連>に進んでいただければと思う。

(1)現スワップファイルの解除と解除した不要ファイルの削除

$> sudo swapoff -a  スワップファイルの解除
$> sudo rm -i /swapfile(場所とファイル名) 不要ファイルの削除

(2)新たなスワップ用ファイル新規作成(容量設定含む)

$> sudo dd if=/dev/zero of=/swapfile bs=1M count=12288 
 
 上記の内、"bs=1M"は、1回に転送するブロックの容量単位で、書き方として、"1M"と書くと、"1メガバイト=1048576バイト"のことを表す(これを"bs=1MB"と書いてはならない。それだと"百万バイト=1000000バイト"と解釈されてしまう)。その次の"count"は、ブロックの転送回数指定である。"bs"オプション×"count"オプションでファイル容量が決まる。小生の場合は12GBをファイル容量としたので、12×1024=12288回を指定した。ここは、各自の環境等により値を増減するところである。
 ちなみにスワップファイル容量に関しては、ハイバネート関連動作中、「ハイバネートしない」「短時間で勝手に回復する」「ハイバネートするが回復しない」等々、回復動作も含めてうまく動作しない場合の原因の多くを、このスワップファイルの容量不足が占めている。かと言って多過ぎてもシステムリソースを浪費するだけなので、適切な容量配分がとても大事である。ここら辺のことについては「Onkyo BX407A4にLinuxを入れて復活させる」においてすでにRAM容量との兼ね合いでスワップファイルの容量が決まること、RAM2GB以下の場合は、RAM容量×3が必須である等について解説した。これでいくと、GPDPocketのRAMは8GBのため、8GB×1.5=12GBを確保すれば良いのであるが、今回当初はハイバネート動作をまず確認したかったため、実績のあるRAM量の3倍である24GBを設定した。この設定量でハイバネート動作が問題なく動作することを確認できたので、現在はRAM量×1.5=12GBの設定に変更し、運用している。動作的には問題ない。むしろ復帰動作は、12GBの方が24GBより3秒程度(実測)早いようだ。
 "dd"コマンドは、作成するファイル容量にもよるが、少し待たされる。ファイルが出来たら、あとは登録設定である。

 

スワップファイルの有効化と登録

(3)作成したファイルの、スワップファイル登録

$>sudo chmod 0600 /swapfile  作成したファイルのパーミッションを、所有者のみ読み書きできるようにする
$>sudo mkswap /swapfile   "swapfile"ファイルを「swap領域」にする
$>sudo swapon /swapfile   "swapfile"をスワップファイルとして起動する。
 
 ここまでで、スワップファイルは完成起動した。だが、ここでシステムを再起動すると、すべて元の木阿弥になってしまう。作ったスワップファイルはあくまでも一時設定であるので、ここまでの設定を恒久化するため、次の二つの設定を施す(ちなみに、以下はコマンドを介して操作しているが、コマンドを使わず、手入力で直接設定ファイルを書き直しても構わない)。

$>sudo sed -i '/swap/{s/^/#/}' /etc/fstab  既存スワップファイル設定の無効化("fstab"ファイル内の"/swap"で始まる文をすべてコメントアウトする)。
$>sudo tee -a /etc/fstab <<< "/swapfile none swap sw 0 0" 作成した"/swapfile"の恒久化("fstab"ファイル内に、左記赤文字部分を追加で書き込む)。

 以上で、スワップファイルの準備が完了した。これによってハイバネートの受け皿ができたことになる。いよいよハイバネートコントローラーたる「電源管理」アプリの設定である。

「電源管理」アプリ関連

 と、言ってもこれは特に問題ないだろう。なぜなら、「『Onkyo BX407A4に〜』時の設定がそのまま使えるのではないだろうか」と思って、まったく同じに設定してみたら、案の定そのまま使えたからである(この部分の解説は「Onkyo BX407A4に〜」をご覧頂きたい)。「"ハイバネート"表示とか正しく出るのかな?」とも思ったが、これが「あたりまえでしょ」と言わんばかりに表示されるので、むしろ小生の方が恐縮してしまうのである(ただし、この設定及び解説時点で、システム再起同等かけてはいけない。GRUBの設定が未完了なので、ハイバネートが機能しないばかりか、場合によっては「OSの再インストール」等面倒な事になる可能性がある)。

 今回行った設定内容は下記の通りである。

設定場所とファイル

/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

(ファイルは新規に作成する)

設定内容

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

 

GRUB関連

設定場所とファイル

/etc/default/grub ファイル内の次の項目


GRUB_CMDLINE_LINUX_DEFAULT=""」の「""」(引用符)内

apm=off acpi=force resume=<#ルートデバイスのUUID> resume_offset=<#スワップファイルの物理オフセット値>

の4項目を追加記述する(項目間はスペースで文字分けする)。ファイル保存後、「sudo update-grub」で更新する。

【記述例】

GRUB_CMDLINE_LINUX_DEFAULT="apm=off acpi=force resume=<#UUID> resume_offset=<#オフセット値>"」

 

 GRUBファイル中二ヶ所ラベルになっているところについて。

resume=<#ルートデバイスのUUID#>
resume_offset=<#スワップファイルの物理オフセット値#>

 これはカーネルパラメータで、適切な値をカーネルに伝える必要がある。設定場所は別にここでなくても良いようだが、具体的場所及びファイル名が分からず、小生が今回調べた中では、もっとも確からしい場所及びファイルということで設定した。もっと良い(スマートな)場所をご存知の方がおられたら、ご教示いただきたい。
 さて、ここで設定する値はそれぞれ厳密に正しい値でなければならない。「たぶん」とか「このくらいで」とかは当然ダメである。そこで次のコマンドを使う。

ルートデバイスのUUID


$> sudo findmnt / -o UUID

スワップファイルの物理オフセット値


$> sudo filefrag -v /swapfile

 

 上記の内、UUIDは長いので、コピペして使用するのがお奨めである。ちなみに、カーネルパラメータでは、「UUID」以外の「ラベル」等も使える。でも、重複の可能性の無いUUIDを使うのが良いと思う。
 "filefrag"コマンドを実行するとずら〜っと数値が表形式で出力されるので、出力表文字列中"physial_offset"カラムの1番上の段の左側の値を使用する。(下図丸囲み部分)

スワップファイル物理オフセット値

両方ともコピペし、GRUBファイルがようやく完成し、保存したら、"$> sudo update-grub"でも良いしシステム再起動でも良いので、設定を反映させる。正しく作業が完了しているなら、ハイバネート機能が装備されていることと思う。