Installing SuSE on External USB Drive
目次
イントロダクション
この記事では、Windowsと共存しつつ外部のUSBドライブにSuSEをインストールして、そこからSuSEを起動する方法を紹介します。
準備
必要なもの:
- SuSE Linux インストレーションDVDもしくはCD
これだけです!
起動
インストレーション・ディスクからPCを起動します。
インストール
セットアップ・ウィザードに従ってInstallation Summaryの画面まで進み、Expert modeを選びます。Boot Loader Settingsの中のBoot Loader Installationにおいて、Boot Loader LocationのオプションとしてBoot from Root Partitionを選びます。あとは通常通りインストールを進めます。インストールが進むと自動的に再起動します。以上の作業ではMBRにGRUBがインストールされていないので、HDDから直に起動しようとすると失敗します。そこで再びインストレーション・ディスクから起動し、インストールモードの画面まで進んで「その他のオプション」からBoot Installed Systemを選び、インストールを続けて下さい。
- 注意:「その他のオプション」が選択できない場合、中止ボタン押して下さい。するとテキストベースのメニューが現れますので、Start Installation or Systemを選び、Boot Installed Systemを選んで先ほどシステムをインストールしたパーティションを選んで下さい。USBドライブが選べない場合は、ドライブをつなげ直してみて下さい。
インストールしたシステムにrootでログインし、USBドライブのMBRにGRUBをインストールするために、ターミナルでgrub-installを以下のように実行して下さい:
grub-install /dev/sdb
- 注意:セットアップ・ウィザードにおいて、GRUBを内蔵ハードディスクのMBRにはインストールしないで下さい。さもないと、USBドライブが外してある場合、GRUBはUSBドライブの /boot/grub が読込めず、起動できなくなってしまいます。
GRUBの設定
SATAの内蔵HDDと外部のUSBドライブとが一台ずつある場合、/boot/grub/device.mapは以下のように設定します:
(hd0) /dev/sda (hd1) /dev/sdb
- 注意:USBドライブから起動する場合、GRUBはUSBドライブを /dev/sda (hd0) として、内蔵ドライブを /dev/sdb (hd1) として扱います。これは内蔵ドライブから起動した場合の正反対になります。
そして /boot/grub/menu.lst の中の hd0 を hd1 に、hd1 を hd0 に置き換えるよう編集します。
カーネルのアップデートをした場合、恐らくYastが /boot/grub/menu.lst を更新するでしょう。その際は再び同じ編集作業(hd0 <-> hd1)が必要になります。
GRUBから既存のWindowsを起動するための追加作業
先に述べた通り、GRUBは内蔵ドライブを (hd1) として扱うため、GRUBからWindowsを直接起動した場合、chainloader (hd1,0)+1 のコマンドの後に停止してしまいます。これはWindowsのブートローダー(NTLDR)がスレーブのハードディスクからの起動を受け付けないためです。この問題に対処するために、/boot/grub/menu.lst の中のWindowsエントリに以下の二行を書き加えて下さい:
map (hd0) (hd1) map (hd1) (hd0)
エントリ全体は以下のようになります:
###Don't change this comment - YaST2 identifier: Original name: windows### title Microsoft Windows XP Professional map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd1,0) chainloader +1
menu.lst を上書き保存して再起動してみて下さい。今度はNTLDRが動くはずです。
まとめ
以上の作業により、USBドライブが接続してあり、かつBIOSがUSBドライブから起動するよう設定してある場合に、SuSEのGRUBからシステムを起動できるようになりました。USBドライブが引き抜かれた場合、システムは元のように内蔵ドライブから起動します。
USBからの起動が失敗する場合
PCの中には、BIOSの設定を変えても、GRUBの menu.lst に何を書こうとも、USBドライブからの起動ができないものもあります。この問題に対処した代替策があります。
内蔵ドライブの利用
その代替策とは、内蔵ドライブに小さなext3形式のパーティションを用意して /boot としてマウントし、GRUBをMBRに直にインストールし、BIOSを内蔵ドライブから起動するように設定するというものです。SuSEを起動する際、USBドライブを接続しておくことをお忘れなく。(この方法ですと、USBドライブを抜いておいてもGRUBはきちんと動きます)
カーネルのCDイメージの利用
インストール済みのシステムからブート用のCDを作ることもできます。このブートCDは、カーネルをロードしてUSBドライブのルートパーティションに移動します。ですが、ここには落とし穴があります。デフォルトのSuSEカーネルはUSBドライバがモジュール形式になっていますが、これではルートパーティションにアクセスできないのです。なので、自分でカーネルをコンパイルし、USBドライバをカーネルに含める必要があります。
RedHat Linuxにはブートイメージを作るスクリプトがあります。mkisofsとsyslinuxがインストールしてあるか確認して下さい。SuSE向けに修正したバージョンのbash-scriptをダウンロードして下さい。現在動作中のカーネルのバージョンを確かめて(cat /proc/version もしくは ls -l /boot/vmlinuz*)先のスクリプトを実行します:
./mkbootdisk.from.rh4-modified --device boot.iso -v --iso 2.6.18.2-34-default
boot.isoはここで作成するISOイメージの名前です。
2.6.18.2-34-defaultは先ほど確認したカーネルのバージョンです。
でき上がったISOファイルでCDを作成し、それで起動して下さい。
USBディスクのルートにLinux Volume Manager (LVM)を利用する
USBディスクのルートファイルシステムにLinux Volume Manager (LVM)を使う場合、標準の /init スクリプトでは上手く行かず、initrd環境下のシェルに落ちてしまいます。これに対処するには、下に示すパッチを /sbin/mkinitrd に当てて下さい。
--- /root/mkinitrd-orig 2007-03-24 20:54:03.000000000 -0700 +++ mkinitrd 2007-03-24 21:22:26.000000000 -0700 @@ -2445,6 +2445,16 @@ | break; | fi | sleep 1 + EOF + + if [ -n "$root_lvm2" ]; then + cat_linuxrc <<-'EOF' + | /sbin/lvm vgscan + | /sbin/lvm vgchange -ay + EOF + fi + + cat_linuxrc <<-'EOF' | echo -n "." | timeout=$(( $timeout - 1 )) | done