Solaris 9をディスクレスにする |
YAMAMORI Takenori ●yamamori |
■Solaris 9 インストール CD-ROM を、Linux で完全マウントする■
Solaris の CD-ROM は、単なる iso9660(+RockRidge) のファイルシステムではなく、その先頭部分に Sun のディスクラベルが書かれていて、通常のハードディスクと同じように複数のスライス(SunOS パーティション)を持った、ある意味特殊な CD-ROM です。その中には、Solaris の ufs フォーマットのスライスもあります。
このため、Solaris のインストール CD-ROM を、Linux などからマウントしても、iso9660(+RockRidge) でフォーマットされた部分しかマウントされず、ufs フォーマットの部分はマウントされません。このことが、特に Solaris 9 で問題になります。
上記の ufs フォーマットのスライスには、Solaris のインストーラ自身がマウントする root ファイルシステムが一式入っています。
Solaris 8 以前では、この ufs スライスと同じものが、iso9660 スライスの Solaris_*/Tools/Boot ディレクトリ以下に収められており、NFS サーバ側で ufs スライスをマウントしなくても、iso9660 スライスをマウントするだけで Solaris をネットワークインストールすることができました。
しかし、Solaris 9 では、iso9660 スライスの Solaris_9/Tools/Boot ディレクトリは、ufs スライスのルートディレクトリへのシンボリックリンクに変わってしまいました。
このように変更されても、ブートサーバが同じ Solaris マシンであり、vold を使って CD-ROM をマウントしていれば問題ありません。しかし、Solaris 以外の UNIX マシンをブートサーバとしたい場合、何らかの方法で 問題の ufs スライスを読み出す必要があります。
ここでは、Linux を使って Solaris 9 (SPARC版)の「Software 1 of 2」の CD-ROM を、 その ufs スライスを含めてマウントする方法を説明します。
Linux の fdisk コマンドは強力です。fdisk は、通常は Fdiskパーティションテーブルを認識して動作しますが、実は Sun のディスクラベルにも対応しており、今回の例のように Solaris のインストール CD-ROM については、その Sun のディスクラベル情報を表示することができます。
$ uname -sm Linux i686 ← 確かに、Linux の Intel 機 $ fdisk -l /dev/cdrom ← そのまま fdisk を実行 Disk /dev/cdrom (Sun disk label): 1 heads, 640 sectors, 2048 cylinders Units = cylinders of 640 * 512 bytes Device Flag Start End Blocks Id System /dev/cdrom1 r 0 888 284160 4 SunOS usr ← iso9660 /dev/cdrom2 r 888 1742 273280 2 SunOS root ← ufsスライス /dev/cdrom3 1742 1746 1280 0 Empty /dev/cdrom4 1746 1750 1280 0 Empty /dev/cdrom5 1750 1754 1280 0 Empty /dev/cdrom6 1754 1758 1280 0 Empty |
上図のように確かに Sunディスクラベルが読み出せました。上図で形式的に /dev/cdrom1 と表示されている部分が、Solaris での s0 スライスに相当します。(番号がひとつずれます)
Sunディスクラベルは読み出せましたが、この CD-ROM の ufs スライスは、このままではマウントできません。上記の図で /dev/cdrom2 と表示されている部分が ufs スライスですが、/dev/cdrom2 というデバイスは実際には存在せず、単に fdisk コマンド上で形式的に表示されているに過ぎません。
そこで、このディスクラベル情報から、ufs スライスの開始位置を手で計算し、その値をオフセットとして Linux のループバックデバイス経由でマウントするようにします。
このオフセット値は、
「開始シリンダ」×「ヘッド数」×「セクタ数」×「512バイト」
となります。この例での 「Solaris 9 Software 1 of 2」では、
888 * 1 * 640 * 512 = 290979840(byte) |
となり、290979840 が求めるオフセット値です。
(もちろん、このオフセット値は実際の CD-ROM のバージョンよって異なります)
Linux で、ファイルシステムを、ブロックデバイスの先頭からではなく、途中からマウントしたい場合は、ループバックデバイスを経由して、そのオプションでオフセット値を指定することにより行ないます。
オフセット値は、mount コマンドのオプションとしても指定でき、この場合、
mount -o loop,offset=290979840 …ほかのオプションは省略…
とすればよいことになります。
さらに、マウントされるファイルシステムが Solaris の ufs ですが、Linux では Linux 以外の OS のファイルシステムにもかなり広範囲に対応しており、この場合は、
mount -t ufs -o ufstype=sun …ほかのオプションは省略…
とすればマウントできます。
ここでは Solaris 9 の CD-ROM を用いているため、マウントポイントが Solaris 上のものと同じになるように、s0 s1 というマウントポイントを作成することにします。
以上を踏まえた実行例を以下に示します。
$ cd /mnt $ su # mkdir s0 s1 ← マウントポイントを作る # mount -r -t iso9660 /dev/cdrom /mnt/s0 ← まず iso9660 のマウント # mount -r -t ufs -o loop,ufstype=sun,offset=290979840 /dev/cdrom /mnt/s1 # exit ↑ 問題の、ufs スライスのマウント $ df /mnt/s0 /mnt/s1 ← df で、マウント状況を確認 Filesystem 1k-blocks Used Available Use% Mounted on /dev/hdc 284160 284160 0 100% /mnt/s0 /dev/hdc 256710 236076 0 100% /mnt/s1 |
これで「Solaris 9 Software 1 of 2」の CD-ROM が iso9660 のみならず ufs スライスを含めてマウントされました。
本当に正常にマウントされているかどうか、問題の Solaris_9/Tools/Boot のシンボリックリンクがちゃんと解決しているかどうかを確認してみましょう。
$ cd /mnt/s0/Solaris_9/Tools ← 問題のディレクトリに移動 $ ls -l Boot はシンボリックリンク total 96 ↓ lrwxrwxrwx 1 root bin 11 Apr 16 03:23 Boot -> ../../../s1 -rwxr-xr-x 2 root daemon 59586 Apr 15 14:54 add_install_client -rwxr-xr-x 2 root sys 1325 Apr 15 14:54 dial -rwxr-xr-x 2 root daemon 18599 Apr 15 14:54 rm_install_client -rwxr-xr-x 2 root daemon 13045 Apr 15 14:54 setup_install_server $ cd Boot ← 問題のシンボリックリンクをたどってみる $ /bin/pwd /mnt/s1 ← 確かに s1 に移動できた $ ls -l ← s1 の下の root ファイルシステムを表示 total 30 drwxr-xr-x 2 root sys 512 Apr 16 03:39 a lrwxrwxrwx 1 root bin 9 Apr 16 04:21 bin -> ./usr/bin drwxr-xr-x 2 root sys 512 Apr 16 03:39 cdrom drwxr-xr-x 10 root sys 1024 Apr 16 04:21 dev drwxr-xr-x 3 root sys 512 Apr 16 04:21 devices drwxr-xr-x 29 root sys 3072 Apr 16 04:21 etc drwxr-xr-x 9 root sys 512 Apr 16 04:21 kernel lrwxrwxrwx 1 root bin 9 Apr 16 04:21 lib -> ./usr/lib drwxr-xr-x 2 root sys 512 Apr 16 03:33 mnt drwxr-xr-x 2 root sys 512 Apr 16 03:33 opt drwxr-xr-x 43 root sys 1536 Apr 16 04:20 platform dr-xr-xr-x 2 root root 512 Apr 16 03:33 proc -rw-r--r-- 1 root bin 0 Apr 16 03:36 reconfigure drwxr-xr-x 3 root sys 1024 Apr 16 04:21 sbin drwxrwxrwt 4 root sys 512 Apr 16 04:22 tmp drwxr-xr-x 23 root sys 512 Apr 16 04:19 usr lrwxrwxrwx 1 root bin 14 Apr 16 04:13 var -> ./tmp/root/var drwxr-xr-x 3 root bin 512 Apr 16 04:22 webstart |