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

参考資料