Linux&FreeBSD ハードウェア設定 |
YAMAMORI Takenori ●yamamori |
ここでは,IDEのハードディスクにVine/FreeBSD/Window95が マルチブート状態でインストールされたものを, そのままSCSIハードディスクに内容を移して, SCSIからブートするようにする方法を例にとって紹介します. この方法を取り上げておくことにより,それに付随するいろいろな要素が ほぼカバーできるのではないかと思います.
なお,ハードディスクの交換では,一度テープ(DDS-3)などに バックアップをとってリストアするのが一般的だとは思いますが, ハードディスクの大容量化にともない, なかなか手頃なバックアップメディアが無く, また,個人でDDS-3ドライブなどを買うのも大げさな感じであるため, ここでは,IDEとSCSIの両ディスクを同時に接続した状態で, ディスクtoディスクで内容をコピーする方法をとります.
ここでは, 各OSが図(ディスクの説明)のようにインストールされているものとします.
+---------------------------+-------------------------------+----+ | Linux | FreeBSD |DOS | +-------------+-------------+---------------+---------------+----+ | IDE | SCSI | IDE | SCSI | | +------------+-------------+-------------+---------------+---------------+----+ |MBR | | | | | | | LILO or | /dev/hda | /dev/sda | /dev/wd0 | /dev/da0 | -- | | Booteasy | | | | | | +------------+ +-----------+ +-----------+ +-------------+ +-------------+----+ | DOS | | /dev/hda1 | | /dev/sda1 | | /dev/wd0s1 | | /dev/da0s1 | C: | +------------+ +-----------+ +-----------+ +-------------+ +-------------+----+ | Linux / | | /dev/hda2 | | /dev/sda2 | | /dev/wd0s2 | | /dev/da0s2 | -- | +------------+ +-----------+ +-----------+ +-------------+ +-------------+----+ | FreeBSD | |/dev/hda3 | |/dev/sda3 | |/dev/wd0s3 | |/dev/da0s3 | -- | | / | | |/dev/hda5| | |/dev/sda5| | |/dev/wd0s3a| | |/dev/da0s3a| -- | | swap| | |/dev/hda6| | |/dev/sda6| | |/dev/wd0s3b| | |/dev/da0s3b| -- | | /var| | |/dev/hda7| | |/dev/sda7| | |/dev/wd0s3e| | |/dev/da0s3e| -- | | /usr| | |/dev/hda8| | |/dev/sda8| | |/dev/wd0s3f| | |/dev/da0s3f| -- | +------------+ +-----------+ +-----------+ +-------------+ +-------------+----+ | Linux swap | | /dev/hda4 | | /dev/sda4 | | /dev/wd0s4 | | /dev/da0s4 | -- | +------------+-+-----------+-+-----------+-+-------------+-+-------------+----+ 図(マルチブートディスクの説明)
MBRには,LILOまたはBooteasyをインストールして,ブートするOSを切替えます. 各パーティションのブートセクタには,それぞれのOSのブートセクタを書き込みます. MBRと各パーティションのブートセクタのインストール方法を以下に まとめておきます.
さて,ここでLinuxのブートに関する注意が必要です. LILOをMBRにインストールし,これを使ってLinuxをブートする場合, MBR上のLILOは,次の段階として, Linuxがインストールされたパーティションのブートセクタは読まず, 直接/boot以下の必要ファイルを読みに行きます.
このため,Linuxのインストール時に, LILOのインストール先として通常通りMBRを選んでいた場合は, パーティションのブートセクタにはLILOはインストールされていません. したがって,この状態でMBRにBooteasyをインストールしてしまうと, BooteasyからはLinuxが起動できないという状態になります.
そこで,/etc/lilo.conf(MBR用)の他に, /etc/lilop.confというものをもうひとつ作り, これを使ってLILOをパーティションのブートセクタにもインストールして, BooteasyからもLinuxを起動できるようにします. なお,MBRのLILOからも,linuxpというラベルを使って, 両方のLILOを経由したブートもできるようにしました.
以下に,lilo.confとlilop.confを示します.
boot=/dev/hda ← MBRにインストール map=/boot/map install=/boot/boot.b prompt timeout=300 image=/boot/vmlinuz-2.0.36-3vl3 ← これは通常の直接ブート用 label=linux root=/dev/hda2 initrd=/boot/initrd-2.0.36-3vl3.img read-only other=/dev/hda2 ← Linuxであってもother扱いにする label=linuxp table=/dev/hda other=/dev/hda3 label=freebsd table=/dev/hda other=/dev/hda1 label=dos table=/dev/hda |
boot=/dev/hda2 ← パーティションのブートセクタ map=/boot/mapp ← lilo.confのmapとは必ず別にする install=/boot/boot.b prompt timeout=50 image=/boot/vmlinuz-2.0.36-3vl3 label=linux root=/dev/hda2 initrd=/boot/initrd-2.0.36-3vl3.img read-only |
そして,LILOのインストールは以下のようにします.
# /sbin/lilo -C /etc/lilop.conf ← こちらを先にすること # /sbin/lilo
これからやる作業は,新しいSCSIディスクにfdiskなどで パーティションを作成し,それぞれのパーティションごとに それぞれのOSで,いわゆる「dump | restore」で内容をコピーし, さらにMBRとパーティションブートセクタを書き込むことです.
新しいSCSIディスクの,fdiskによるパーティション分けは, 筆者はLinux上で行ないました. 現状のディスクの使用量と,増設の目的などから判断して, 適切なパーティションサイズになるようにします.
# /sbin/fdisk /dev/sda
各パーティションIDも,それぞれ適切に設定しておきます. なお,LinuxのfdiskはFreeBSDのパーティションIDをBSD/386と表示します.
また,筆者は試していませんが,Linuxのfdisk内の 'b'コマンドを使って, ここでFreeBSDのBSDパーティションを作ってしまう方法も考えられます.
fdiskパーティションが出来たら,以下のようにmkfsと mkswapを行ないます.
# mkfs /dev/sda2 ← / # mkswap /dev/sda4 ← swap
dump, restore を行なっている間はファイルシステムに変化があってはいけません. そのため,OSはシングルユーザモードで起動します.
(シングルユーザモードで起動) LILO boot: linux 1
そして以下のように,注意して内容のコピーを行ないます.
# mkdir /mnt/tmp # mount /dev/sda2 /mnt/tmp # cd /mnt/tmp # dump 0f - / | restore xf -
最後に set owner/mode for '.' ? [y/n] と聞かれます.カレントディレクトリの所有者やパーミッションも リストアするかどうかを聞いていますので,y と答えます.
コピーが終ったら,コピー先のfstabの修正も必要です.
# vi /mnt/tmp/etc/fstab (hdaをすべてsdaに修正する)
同様にlilo.confとlilop.confについても, hdaをすべてsdaに修正しますが, さらに以下の修正が必要です.
まず,lilo.confのother= の記述のうち,まだコピーされていないOSの分を この時点では'#'でコメントアウトします. そうしないとliloコマンド実行時にエラーが出て, LILOが正しくインストールされません. つぎに,lilo.confと lilop.confの先頭に,以下の2行を追加します.
disk=/dev/sda bios=0x80
これは,LILOのインストール時点においてSCSIディスクが起動ドライブ (1番目のドライブ)ではないのを,強制的に起動ドライブであるとみなして LILOをインストールするための措置です.
これを忘れると,SCSIからのブートの際に,LILOが"LI"までを表示して, 固まってしまったり,暴走してしまったりという症状が出ます.
LILOは,以下の順でインストールします.
# lilo -r /mnt/tmp -C /etc/lilop.conf # lilo -r /mnt/tmp
あとは,BIOSの設定でSCSIを起動ドライブに変更してブートすれば, 無事立ち上がります. これで,LinuxのSCSIディスクへの移動が完了しました.
※なお,SCSIドライバについては,SCSIカードのインストールの際に すでに initrd にモジュールを組み込む作業 を行なっており,それがそのまま新しいSCSIハードディスクにコピーされたため, ブート時の / のマウントが問題無くできるようになっているということに 注意して下さい.
次に,FreeBSDの移動作業を行ないますので,再度IDEディスク上の FreeBSDをブートします.
FreeBSD上からは,新しいSCSIディスクのデバイスファイル名は 図(マルチブートディスクの説明)に書かれているようになります.
BSDパーティションに対するデバイスファイルは, 以下に説明するsysinstallによって自動的に作られますが, もし,手動で作成する場合は,以下のようにMAKEDEVを実行します.
# cd /dev # ./MAKEDEV da0s3a (da0s3aからda0s3hまでと,rda0s3aからrda0s3hまでが作られる)
ここで,本来ならdisklabelを使ってBSDパーティションを作成する ところでしょうが,/etc/disktab のエントリを使わなければならなかったりとか, (その他ddやdisklabel コマンドを巧妙に使う方法もあるようですが…) とにかくやりにくかったため,/stand/sysinstallを起動して, インストール時と同じような感じで行なうことにしました.
(sysinstallによるBSDパーティションの作成) * /stand/sysinstallを起動する * Configure を選ぶ 図(configure.gif) * Fdisk→da0と選び,FreeBSDの領域を確認し,'W'コマンドで書き込む * Labelを選び,BSDパーティションを作成し,'W'コマンドで書き込む
なお,実はここでちょっと注意が必要です.BSDパーティションを 作成する際に,必ずマウントポイントを指定しなければならないのですが, 「A=すべてをデフォルトに設定!」を選んで自動的に パーティション分けしようとすると,デフォルトで / swap /var /usr が指定されます.ところが,/ /var /usr など,現在のシステムがマウントしているものと同じマウントポイント名が 用いられてしまうと,'W' コマンドのあと,カーネルがpanicしてしまうのです. (これにはハマりました) そこで,'A'コマンドではなく,手動でパーティションサイズを指定して, かつ,マウントポイントとして,適当なディレクトリ (たとえば /mnt/a /mnt/b /mnt/c)を指定して,回避しました.
なお,ファイルシステムとして使うBSDパーティションに対しては newfsが自動的に実行され,かつ,仮に指定したマウントポイントに マウントまでしてくれます.
dump|restoreを行なうため,シングルユーザモードで起動し直します.
FreeBSDのブートの最初の方で,
Hit [Enter] to boot immediately, or any other key for command prompt.
と表示されたところで[Enter]以外を押し, 以下のように入力してシングルユーザモードでブートします.
disk1s3a:> boot -s
シングルユーザモードで立ち上がったら,まず / がリードオンリーで マウントされているのを以下のようにして解除します. これは,dump が /tmp に書き込むために必要になります.
# mount / ← Read only でマウントされているのを解除
そして以下の手順を注意して行ない,ファイルシステムをコピーします.
# mount /dev/da0s3a /mnt # cd /mnt # dump 0f - / | restore xf - # cd / # umount /mnt # mount /dev/da0s3e /mnt # cd /mnt # dump 0f - /dev/wd0s3e | restore xf - ← コピー元はマウントせず直接読む # cd / # umount /mnt # mount /dev/da0s3f /mnt # cd /mnt # dump 0f - /dev/wd0s3f | restore xf - ← コピー元はマウントせず直接読む # cd / # umount /mnt |
ファイルシステムとして使っているパーティションが3つあるので, dump|restoreの手順を3回繰り返しています.swapパーティションは コピーする必要はありません.
また,Linuxとは異なり(というかLinuxの方が特例)mkswap に相当する作業は必要ありません.
コピーが終ったら再度,新しい / をマウントして,その中のfstabを修正します.
# mount -a ← vi を使うため,IDE側の /usr 他もマウントする. # mount /dev/da0s3a /mnt # vi /mnt/etc/fstab (wd0s3をすべてda0s3に修正)
パーティションブートセクタをインストールします.
# disklabel -B da0 ← da0で指定していますが,実際にはda0s3に書かれます.
MBRをインストールします.
(bootinst.exeのある場所に移動して) # dd if=boot.bin of=/dev/da0 bs=446 count=1
これで,BIOSの設定でSCSIから起動するようにすれば 新しいディスク上のFreeBSDをブートできます.
あとDOSパーティションのコピーも行なえば完了です. こちらはあえて説明は要らないと思いますので,省略します.
以上で,マルチブートディスクのIDEからSCSIへの移設が完了しました.
To「Linux&FreeBSD ハードウェア設定」index