こんにちは。chihiroです。
Linuxとアニメ、マンガネタが多いかも?
イワタバコ科の植物も大好き。写真も撮るかなぁ〜。
そんな日常。
| 9月 2010 | ||||||
|---|---|---|---|---|---|---|
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | ||
IKAKICK - ラッキィ池田事務所
踊り放題! - ラッキィ池田BLOG
TOGETHER - ルー大柴BLOG
浅井企画
日本のLinux情報
Linux Software Search(J)
もじら組
mozilla.org
Mozilla 日本語ローカライズ版リンク集
Mozilla 日本語インストーラ
Japanized Apache Server Project
The Apache Software Foundation
日本PHPユーザー会
PHPマニュアル
CPAN - Comprehensive Perl Archive Network
Qmail
Qmail(Jp1)
Qmail(Jp2)
Binc IMAP
Fedora Project(E)
Fedra JP Project(J)
Vine Linux(J)
Debian(J)
Debian JP Project(J)
ジャンクで購入したThinkPad X21にUbuntu(現在hardy8.04)をインストールして使用している。
無線LANにてウェブ&メール端末として非常に便利に使っていたが、最近HDDがおかしい。
内蔵HDDへのアクセスランプが点灯したまま、OSが固まってしまうことがある。
キー応答も、マウスポインタの反応も完全になくなっている。
発生するタイミングも、起動時から使用中、放置中まで特定していない。
この手の症状の場合、HDDのハード故障の前兆と私のゴーストが囁く(w)ので、
手持ちで安定しているHITACHIの80GB2.5"IDEに載せ替えるとする。
今回のネタは、以下の通り。
慣れてらっしゃる方は「Ubuntu8.04の、HDD交換を伴うデータ移行後の注意点」
の部分だけ注意すれば、同じハマりは無いかと。
最終的に、起動も、ハイバネーションの動作も全て解決することができた。
UUIDや、各種設定との関連も知ることができ、良いトラシュー(?)経験になりました。
ちょっと長くなっています。ご容赦を。
Ubuntu 8.04がインストールされているHDDを、別のHDDに交換する。
データ移行を行う際に必要になる、OS側の注意点。
/etc/fstabと/boot/grub/menu.lstには、HDDのUUIDが直接記述されている。
HDDを交換前、データ移行時などに、新しいHDDのUUIDに書き換えること。
これを行わないと、起動やマウント動作などに色々と面倒が起きる。
デバイス固有のUUIDの確認方法は、以下のような方法がある。
/etc/initramfs-tools/conf.d/resumeにも、HDDのUUIDが直接記述されている。
変更した上で、ramdiskの再構成を行う。($ sudo update-initramfs -u)
変更を忘れると、正常に起動しない、ハイバネーションから復帰しない等の現象が発生する。
参考リンク:
/etc/initramfs-tools/conf.d/resumeは、
ハイバネーションのデータ保存デバイスを指定している。
update-initramfsコマンドでramdiskファイルを再作成する際には、
/etc/initramfs-tools/conf.d/配下のファイルを全て
読み込んでいる。
もし"resume"ファイルを、"resume.bak"などと同一ディレクトリに保存すると、
両方のファイルが読み込まれてしまい、
正常に起動しなくなる、ハイバネーションから復帰しないなどの現象に至る。
.../conf.d/resumeのバックアップファイルは、.../conf.d/bak/resume.bak等と、
サブディレクトリを掘って格納しておくのが吉。
(/usr/share/initramfs-tools/initスクリプト内での設定ファイルの読み込み動作に由来している)
自分も事前にこれさえわかっていれば、試行錯誤する事はなかったんすけれどね。
以下は、上記の教訓を得た過程です。
単なるデータ移行のみならddでもよいが、新HDDの容量も大きく、今回はパーティションのリサイズを伴う方法で行った。
dump、restoreを使って、ファイルをコピー(?)した。
cpやtar等でも良いのかもしれないが、安心の為により低レベルのファイル移行を行いたかったので。
以下、/mnt/workに新HDDの領域をマウント、/dev/sda1の内容を、
/mnt/work配下にコピーする、という流れのコマンド抜粋。
HDDの初期化やらは、定石どおりに。面倒なので、ここでは省略します。
dump,restoreをパイプしています。同一ホスト上で何だこりゃな感じですが、上手くできます。
[実施例] $ sudo init 1 # mount /dev/sdb1 /mnt/work # cd /mnt/work # dump -0uf - /dev/sda1 | restore -rvf -
新HDD上に、データが複製できたら、その中の/etc/fstabと/boot/grub/menu.lst、
/etc/initramfs-tools/conf.d/resumeに記述されているUUIDを、
新しいHDDのUUIDに変更しておきます。
まず、新しいHDDのUUIDを調べます。
[vol_idコマンドでの出力例] # vol_id -u /dev/sdb1 62b58812-281a-45dc-8a69-78ed9cb57d4e # vol_id -u /dev/sdb3 64769c58-f53a-4a49-92e8-ea823f1f89fc
デバイス名とUUIDの紐づけが確認できましたので、これを元に設定変更です。
fstabは、ご自身のファイルを見ていただくと一目瞭然ですが、
UUID=..で始まるのが、デバイスのUUIDが指定されている箇所です。
LABEL=..とか、/dev/sdX1とかの指定方法もありますが、今回はUUIDの場合の指定方法ということで、UUIDにのみ着目します。
[fstabの例] # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # /dev/sda1 (/) UUID=62b58812-281a-45dc-8a69-78ed9cb57d4e / ext3 defaults,errors=remount-ro 0 1 # /dev/sda3 (swap) UUID=64769c58-f53a-4a49-92e8-ea823f1f89fc none swap sw 0 0
/boot/grub/menu.lstのkernel行に、UUIDにてrootカーネルオプションが指定されている場合がある。
これを、新HDDでルートになるデバイスのUUIDに修正する。
以下では、root=UUID=...の部分に、新HDDでルートになるデバイスのUUIDを記載している。
[/boot/grub/menu.lstの例] title Ubuntu 8.04.1, kernel 2.6.24-22-generic root (hd0,0) kernel /boot/vmlinuz-2.6.24-22-generic root=UUID=62b58812-281a-45dc-8a69-78ed9cb57d4e ro quiet splash initrd /boot/initrd.img-2.6.24-22-generic quiet
/etc/initramfs-tools/conf.d/resumeには、
ハイバネーション時にデータを退避しておく領域のデバイスのUUIDを記述します。
一般的にswapパーティションらしいです。
以下でも新HDDのスワップパーティションのUUIDを記述しています。
[/etc/initramfs-tools/conf.d/resumeの例] RESUME=UUID=64769c58-f53a-4a49-92e8-ea823f1f89fc
前項までで、新HDDにはブートローダー以外の設定は終了しました。
ここで
$ sudo mount /dev/sdb1 /mnt/work $ sudo grub-install --root-directory=/mnt/work /dev/sdb
と実行して一発成功すれば、幸せです。後はHDDを交換して起動を確認するのみです。
自分の環境では何やら"BIOSがうんちゃらかんちゃら"とエラーが出て失敗。
そのため現状でのgrub-installは諦めて、以下の流れで処置。
grubのstage1,stage2のみを組み込んだ起動ディスクを作成します。
このディスクで起動することで、grubのコマンドラインが使用でき、
起動エントリーを手入力することで、HDD内のシステムから起動できます。
$ sudo dd if=/boot/grub/stage1 of=/dev/fd0 count=1 $ sudo dd if=/boot/grub/stage2 of=/dev/fd0 seek=1
参考リンク:
作成したgrub起動FDDを挿入して起動します。
grub>
というコンソールが出てきますので、
/boot/grub/menu.lst内に記述されている起動エントリーを記述して起動します。
この際には、UUID等ではなく/dev/sda1とかのデバイス名を利用すると楽で確実。
問題なければ、以前のシステムと同じように起動しているはずです。
ログインしてgrub-installしてしまいます。
[実行例] $ sudo grub-install /dev/sda
実行した時に、以下のように出てくる。
"Installation finished. No error reported."とあるのに、
何やらチェックしてみては?と言うような文言も追記してあって、
最初失敗したんかな?と誤解した。
上記のように"Installation finished"とあれば大丈夫みたい。
[grub-install実行例] $ sudo grub-install /dev/sda Searching for GRUB installation directory ... found: /boot/grub Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (hd0) /dev/sda
上記の問題は、同じ原因。解決済み。
/etc/initramfs-tools/conf.d/resumeの設定ファイルに絡んでの作業考慮不足でした。
Begin: Waiting for resume device ...
結果、RAMディスクファイルに、適切なハイバネーションデバイスのUUIDが反映されず、
起動時に存在しないUUIDの認識の待ちに入ってしまっている。
/etc/initramfs-tools/conf.d/直下のファイルは、
RAMディスクファイル再作成時に実行される/usr/share/initramfs-tools/initスクリプトにより全て読み込まれている為に、今回の現象に繋がった。
その3の動作は、/usr/share/initramfs-tools/initスクリプト内での設定ファイルの読み込み動作に由来している。
/etc/initramfs-tools/conf.d/resumeは、ハイバネーションのデータ保存デバイスを指定している。
update-initramfsコマンドでramdiskファイルを再作成する際には、
/etc/initramfs-tools/conf.d/配下のファイルを全て読み込んでいる。
もし"resume"ファイルを、"resume.bak"などと同一ディレクトリに保存すると、
両方のファイルが読み込まれてしまい、正常に起動しなくなる、
ハイバネーションから復帰しないなどの現象に至る。
.../conf.d/resumeのバックアップファイルは、.../conf.d/bak/resume.bak等と、
サブディレクトリを掘って格納しておくのが吉。
以上の方法でひとまず起動させることで、処置を行うことが可能。
Posted at 2008/12/02 18:03 in /linux/ubuntu
ソーシャルブックマークへ登録