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

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

uswsusp(ユーザ空間で動作する休止状態支援ツール)を使用してスワップパーティションの指定にUUIDを使用する

uswsuspによる休止において、スワップパーティションのUUID指定をすることはできるということが分かった。
参考URL:

UUIDについて

UUIDはデバイスを一意に識別するための文字列で、デバイス名が動的に付けられる/dev/sd*のデバイス(シリアルATAのハードディスク、USB接続の外部記憶など)を使用しているときなどに役に立つ。
参考URL:

UUIDの取得

UUIDはblkidvol_idの2つのコマンドにより取得できる。どちらも管理者権限で実行する。
blkidでは一覧が出るので、該当パーティションを探してUUIDを控える。

$ sudo /sbin/blkid
(中略)
/dev/hda7: TYPE="swap" LABEL="swap" UUID="d38f447b-7a4f-4944-a95b-68cfe6b53ed8"
(以下略)

vol_idではデバイス名を指定してUUIDを取り出す。

$ sudo /lib/udev/vol_id /dev/hda7
(中略)
ID_FS_UUID=d38f447b-7a4f-4944-a95b-68cfe6b53ed8
ID_FS_UUID_ENC=d38f447b-7a4f-4944-a95b-68cfe6b53ed8
(以下略)

端末を使うのに抵抗がある、もしくは面倒というのであれば、ダイアログからコピペできるようにするためのスクリプトを作成したので
[任意]ファイル名: blkid-uuid.sh

#! /bin/bash

CMDLINE='zenity --list --text デバイス名とUUID一覧 --title UUIDの表示 --editable --hide-column 1 --column dummy --column デバイス名 --column UUID'
CMDLINE="${CMDLINE} $(gksudo /sbin/blkid | grep UUID | sed -e 's@^\(.*\): .*UUID="\([0-9a-fA-F\-]*\)".*@\2 \1 \2@' | while read X; do echo ${X}; done)"
RET=$(${CMDLINE})
[[ $? -eq 0 ]] && zenity --info --title 選択されたUUID --text ${RET}

これを保存して実行属性を付け、実行する。gksudo(パッケージ名は「gksu」)とzenityが必要。

「resume device」の指定

UUIDが「d38f447b-7a4f-4944-a95b-68cfe6b53ed8」だった場合、
ファイル名: /etc/suspend.conf(標準) もしくは /etc/uswsusp.conf(Debian/Ubuntu)

resume device = /dev/disk/by-uuid/d38f447b-7a4f-4944-a95b-68cfe6b53ed8

と設定ファイル側で指定することになる。この場所にあるのは実際のパーティションへのシンボリックリンクになっている。
「resume device」の値に「UUID=[UUID文字列]」の形式の文字列を書いても休止できず、s2diskが下のようなメッセージを出力する。

s2disk: Could not stat the resume device file. Reason: No such file or directory

初期RAMディスク・initrd/initramfs

(2008/4/26)initrdの内容によって、UUID指定がうまく動作するかどうかが決まる。そのinitrdが行う処理はディストリによって異なる。

Debian/Ubuntuの場合

/etc/initramfs-tools/conf.d/resumeのUUID記述を確認し、デバイス名になっていたら修正する。
設定(/etc/uswsusp.conf/etc/initramfs-tools/conf.d/resume)を変更した場合、それを反映するには「gksudo dpkg-reconfigure uswsusp」を実行して設定ツール経由(そのまま進んでいくだけ)でinitrdの再作成をするか、「gksudo -- update-initramfs -u -t -k $(uname -r)」のように直接更新する。initrdを更新しないと復帰時の設定に反映されないので注意。

動作確認

(2008/4/23)Ubuntu Gutsy(日本語ローカライズ版)のVMware仮想マシンVMware Playerで起動して実験した。

  1. VMware Toolsを削除して再起動
  2. 端末もしくはアプリ実行アプレットから「gksudo -- gnome-terminal -x dpkg-reconfigure debconf」を実行し、インターフェースに「Gnome」を選択後Enter連打
  3. Synapticapt-getで「uswsusp」をインストール
  4. blkidもしくは上のスクリプトスワップのUUIDを控える
  5. /etc/uswsusp.confの「resume device」を「/dev/disk/by-uuid/[控えたUUID文字列]」に変更
  6. 端末もしくはアプリ実行アプレットから「gksudo dpkg-reconfigure uswsusp」を実行して、そのまま「進む」
  7. hibernate-scriptもしくは直接s2diskで休止
  8. 次回は普通に起動

で復帰することを確認した。

  • カーネル引数はそのままでよく、GRUBの設定ファイル(/boot/grub/menu.lst)は編集しなくてOK?
  • /etc/initramfs-tools/conf.d/resumeの内容は関係ない?

(2008/4/24)このあたりが必要か不要かについてはよく分からない。パーティション構成の既定値を使用したかどうかも関係しているかもしれない。

使用したバージョン:

  • uswsusp 0.6~cvs20070618-1ubuntu2

関連記事: