試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Mandriva Linux 2009.0上のuswsuspについての覚え書き(後半)

Mandriva Linux 2009.0上のuswsuspについての覚え書き(前半)」の続き。

  1. スワップファイルを使用する場合について補足
    1. ファイルの作成
    2. スワップファイルの自動有効化
    3. 休止時におけるパーティションのデバイス名の指定
  2. 進行状況表示について
  3. 復帰の問題点
  4. 参考:Mandriva上の休止からの復帰の処理のありか

スワップファイルを使用する場合について補足

スワップファイルを使用した場合も動作を確認した。

ファイルの作成
ファイル容量の確保には「ddコマンドで/dev/zeroからファイルを作成する作業をGUIで実行」のzerofille.shを使用。今回、ついでにスワップファイルとしての初期化もできるようにした。コマンドのほうがはやいという場合、ddmkswapを直接使用してもOK。

スワップファイルの自動有効化
以前Gentoo上で試したときと同じ。
ファイル名: /etc/fstab

[スワップファイルの場所] none swap sw 0 0

を追加して再起動*1後、

gksudo "sh -c 'swap-offset [スワップファイルの場所] >> /etc/suspend.conf'"

をコピペ後実行して「resume offset」の行が最後に書き込まれていることを確認後、mkinitrdを実行(「Mandriva Linux 2009.0上のuswsuspについての覚え書き(前半)」の「initrdの更新」の一番上のコマンドをコピペして実行)する。

休止時におけるパーティションのデバイス名の指定
以前と同様、/etc/suspend.conf内、「resume device」の「/dev/disk/by-uuid/」の後ろには、スワップファイルを含んだパーティションのUUIDを使用して記述することになる。

進行状況表示について

Mandriva Linuxは、2009.0から起動時のグラフィカルな進行状況表示にDebianと同じSplashyを使用しているため、カーネルフレームバッファを有効にして起動*2していれば、uswsuspのSplashyサポートにより、休止時にグラフィカルな進行状況表示を見ることができる。

(2009/5/1)2009.1では残念ながらSplashyを使用すると確実に固まってしまったため、テキスト表示にすることになった。
ファイル名: /etc/suspend.conf

splash = n

設定項目「splash」は既定値が「y」なので、これを記述しなくてはならなかった。

復帰の問題点

カーネルフレームバッファを有効にして起動すると、復帰時に何故か固まってしまい復帰できず、メッセージから手がかりを得ることもできない。
しかし、復帰のための起動時にブートローダカーネルコマンド行編集でvga=以下を外すと、正常に復帰ができることが分かった。

このオプションのみを外した復帰時用ブートローダ設定ファイルを下のように用意(端末や「アプリケーションの実行」ダイアログなどにコピペして実行)して

gksudo -- sh -c 'sed -e "s: vga=[0-9x]*::" /boot/grub/menu.lst >| /boot/grub/menu-suspended.lst'

その後、hibernate-script(パッケージ名「hibernate」)のブートローダ設定ファイル切り替え機能を使用することで、面倒な操作をすることなく復帰ができるようになる。
ファイル名: /etc/hibernate/common.conf

### grub
ChangeGrubMenu yes
GrubMenuFile /boot/grub/menu.lst
AlternateGrubMenuFile /boot/grub/menu-suspended.lst
BackupGrubMenuFile /boot/grub/menu.lst.hibernate.bak

上記4行にかかっている#(コメント記号)を外せばOK(管理者権限で編集する)。
注意点として、Mandriva Linux コントロールセンターの「起動 - 起動方法の設定 - 起動システムを設定」で設定を変更するか、直接/boot/grub/menu.lstを編集した場合に復帰用設定ファイルの作成作業も再び行う必要がある。
これで復帰の起動時にずらずらと文字が出た後少し止まって(メモリイメージの読み込み中)、その後復帰が完了(X Window System上の元の状態に戻る)すれば成功。
復帰時にグラフィカルな進行状況表示を行うことは、現状ではできない?

参考:Mandriva上の休止からの復帰の処理のありか

initrd内の休止からの復帰処理*3は、その中の初期化スクリプトには直接書かれておらず、かといって外部のシェルスクリプトなどを参照している様子もない。
色々調べたところ、nash*4というスクリプトインタプリタ*5によって該当処理が行われていることが分かった。これはC言語で書かれており、中の処理を修正したいとしても、初期RAMディスクイメージ(initrd/initramfs)の編集だけではダメで、nashのCソースを編集後再ビルドし、それをinitrdに入れる必要がある。
なお、nashはTuxOnIce向けの復帰操作も搭載しているようだが、Mandriva Linux 2009.0の時点では標準のカーネルでは使えず、実験的な別のカーネルのパッケージ「kernel-tmb」を使用しないと使えないようだ。

関連URL:

使用したバージョン:

  • suspend(uswsusp) 0.8-1.20080612mdv2009.0

*1:あるいは手動で「gksudo "swapon -a"」などにより有効化

*2:起動時のオプションに「vga=[数字]」が付いてvesafbが使用されていればOK

*3:カーネル引数の「resume=」オプションを解釈し、UUIDやラベルのデバイス名への解決も行った上で、そのデバイス名を指定してinitrd内のresumeコマンドを実行している

*4:Red Hatが開発しているため、Red Hat絡みのディストリにも使用されている

*5:スクリプトの実行のみをサポートし、対話シェルの機能はない