orz記録

おうちとかいしゃのシステム技術のことを中心に書いていこうと思っています。

2013/02/16 19:34 CentOS6.3のUSBレスキューメディアを作成する

久しぶりに技術ネタです。

皆さんUSBメモリでレスキューメディア作りたいと思ったことありませんか?
ない?
じゃ、このページは見る価値無いです。さようなら(笑)。
DVDドライブとインストールDVDを用意しておけばいいのでしょうけど、かさばるし、面倒くさいじゃないですか。

あと、RedHatterの皆さん、USBレスキューメディアを作成しようとしてRedHatのインストールガイドの「2.2. 最小限のブートメディアの作成」を見て馬鹿正直にそのとおり作業をトレースして出来たって方います?私はできませんでしたよorz

というわけで、早速以下手順です。

準備物
イメージファイルとして以下のファイルをダウンロードしておきます。
CentOS-6.3-i386-minimal .iso

インストールパッケージとして、以下をインストールしておきます。
syslinux 4.05

あ、この作業の実施環境はlubuntu12.04です。Windowsマシンで作成したわけじゃないので、その環境の方にとってはあんまり役に立たないです。

備考
手順として最初にUSBメモリをまっさらにしていますが、そんな事しなくても良いと思います。

手順
おおまかな手順は以下のとおり。

手順概要
1.USBメモリのクリア
2.USBメモリにパーティション作成
3.syslinuxのインストール
4.ブートに必要なファイルのコピー
5.ブートに必要なファイルの編集
6.MBRにブートストラップローダの貼りつけ
7.レスキューモードで立ち上げるためのイメージファイルのコピー
8.レスキューモードで利用しやすくする工夫

1.USBメモリのクリア
USBメモリの先頭部分(MBRおよびPBRあたり)をまっさらにしておく。

# dd if=/dev/zero of=/dev/sd[X] bs=1m count=100

2.USBメモリにパーティション作成
fdiskコマンドを使用して、USBメモリにパーティションを作成します。

# fdisk /dev/sd[X]
このとき、以下のポイントがあります。

パーティション作成時のポイント
パーティションを作成しておくこと
パーティションタイプは0b(W95 FAT32)が無難
1番目のパーティションに起動フラグをつけておくこと(アクティブパーティションに)

3.syslinuxのインストール
最初のパーティションにsyslinuxをインストールします。

# syslinux --install /dev/sd[X]1
syslinuxのインストールはPBR(パーティションブートレコード)にIPLをインストールすることです。

この段階ではまだMBRをいじっていないことに注意!
パーティションにインストールすることに注意!
インストールが完了すると、PBRが弄られる他、パーティション内にldlinux.sysファイルが作成される。

4.ブートに必要なファイルのコピー
ダウンロードしておいたisoファイルから、ファイルをコピーします。

テンポラリのマウントポイントを作成してCDをマウント
# mkdir /mnt/CD-ROM
# mount -o loop,ro [Image-path].iso /mnt/CD-ROM
# cd /mnt/CD-ROM

USBメモリのマウント(マウントしてない場合)
# mkdir /mnt/USB
# mount /dev/sd[X]1 /mnt/USB

CDのisolinuxディレクトリ以下のファイルを丸コピー
# cp isolinux/* /mnt/USB/

5.ブートに必要なファイル名の編集
isolinux.cfgのファイル名をsyslinux.cfgに変更します。

# cd /mnt/USB/
# mv isolinux.cfg syslinux.cfg

6.MBRにブートストラップローダの貼りつけ
まっさらであるMBRにブートストラップローダを貼り付け
# dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdc bs=440 count=1

7.レスキューモードで立ち上げるためのイメージファイルのコピー
ここまでの作業でブートはできるようになりますが、いざレスキューモードで立ち上がるようになるには、起動イメージを用意しないといけません。
imagesディレクトリをまるごとコピーします。
# cp /mnt/CD-ROM/images /mnt/USB/


8.レスキューモードで利用しやすくする工夫(イメージの場所を毎回聞かれることが無いようにする)
前のこうまでの作業でレスキューモード用のUSBレスキュー用の作成は完了ですが、このまま使用すると言語、キーボードの設定に続いて、ブートイメージの選択を求められます。
その画面ではUSBメモリ内にある/images/install.imgを選択する必要があり、画面操作でhard-driveを選択して、/dev/sd[X]1を選択し、/imeges/install.imgを指定します。
上記のオペレーションに問題は無いのですが、/dev/sd[X]1の部分はハードウェアの認識順によって変わる可能性があるため、いちいちAlt+F4で検出されたデバイスがどこで認識されているのかを確認する必要があり、ちと面倒です。

ですので、syslinux.cfgを編集して、起動デバイスを聞かれないようにしましょう。 具体的にはsyslinux.cfgに記載されているanacondaの起動オプションに、USBメモリのパーティションのUUIDを指定するよう記述します。

UUIDの調査
事前にUUIDを調査します。

# blkid /dev/sd[X]1
以下のように出るので、UUID=””のダブルクォートの中の部分をメモっておく。

/dev/sdc1: UUID="318D-8FA5" TYPE="vfat"
syslinux.cfgを編集
# vi syslinux.cfg
label rescueの部分を探します。

label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue repo=hd:UUID=318D-8FA5:/
repo=hd:UUID=318D-8FA5:/が追記部分です。以下、追記時のポイントです。

スラッシュは必要なので注意。
逆に、/images/install.imgのパスまでは要らない。スラッシュまで。
スラッシュだけにすると、UUID=://images/install.img となって、ちょうどよくパスがマッチするみたいです。

ちなみに、上記設定だけだと起動デバイスは省略されて、language, keymap, network,mountの4項目を聞かれます。 ここの部分は状況に応じて変えたい部分なので、あえてそのままにしてあります。

また、レスキュー起動だけをしたいのであれば、labelをガンガン削ってもいいですね。

ちなみに、こうできるようになるまでに2日くらいかかってしまいました。修行がたりませんね。