Solaris 10(x86)をインストールしてみよう

 
  YAMAMORI Takenori ●yamamori

■コラム■ Solaris 10インストールCDの秘密

Solaris 10のインストールCDのうち,1枚目のSoftware CD1は, 単なるISO 9660のCDではなく,少し特殊な構造になっています. 実際,CD1のISOイメージファイルのサイズが650MB近くあるのに, ISO 9660のファイルシステムは200MB強程度しかなく, 不思議に思った方も多いことでしょう.

Solaris 10 x86版のSoftware CD1の構造を下図に示します. ISO 9660では,ファイルシステムの先頭から32Kバイトは空きエリアですが, x86版のCDでは,この空きエリアに,ハードディスクと同様の配置で ブートローダやfdiskパーティションテーブルなどが書き込まれています. これらの中にはSunディスクラベルも存在し,このSunディスクラベルによって, おもに2つのスライスが定義されています. そのひとつが通常のISO 9660ファイルシステムで, もうひとつがSolarisのUFSファイルシステムです. このUFSのファイルシステムは,ISO 9660のあとに存在します.

このCDを,Linuxなどで普通にISO 9660(RockRidge拡張つき)でマウントすると, ISO 9660の部分のみがマウントされ,UFSの部分は読めません. このため,CD内のSolaris_10/Tools/Bootというシンボリックリンクが, ../../../s0という存在しないUFS上のディレクトリを指したままになっています. (ただし,DVDではSolaris_10/Tools/Boot以下にもファイル一式が存在します)

・図 Solaris 10 x86版Software CD1の構造

0x0000 +--------------------------------+
       | ブートローダ(CD起動用)       |
       | fdiskパーティションテーブル    |
0x0200 +--------------------------------+
       | ブートローダ(pboot)          |
0x0400 +--------------------------------+
       | Sunディスクラベル              |
       |                                |
0x0800 +--------------------------------+
       | ブートローダ(bootblk)        |
       :                                :
       |                                |
0x8000 +--------------------------------+
       | ISO 9660 PVD                   |
       |                                |
       :                                :
       | ISO 9660ファイルシステム本体   |
       :                                :
       :                                :
       |                                |
?????? +--------------------------------+
       | Solaris UFSファイルシステム    |
       |                                |
       :                                :
       :                                :
       |                                |
       +--------------------------------+

このUFSファイルシステムの開始位置がわかれば, Linux上からも適切なオプションを付けてマウントできるはずです. 本来ならSunディスクラベルを読み出して,開始位置を求めるべきですが, これをLinux上で行なうのは少々困難です. そこで,やや強引な方法ですが,ISO 9660の終了位置から, 2Kバイトずつオフセットをずらしながら試行錯誤でマウントを 行なうという方法を紹介します.

ISO 9660の終了位置は,cdrecord(cdrtools)付属のisoinfoコマンドで表示される ボリュームサイズから計算できます.そこで,下図のように, シェルのuntil文をコマンドラインに直接入力して,オフセット位置を探りながら マウントを行なえば,適切なオフセットのところでUFSファイルシステムが マウントされるのです.マウント後,試しに,lsやdfコマンドを実行して, その様子を確認することができます.

・図 Linux上でx86版Software CD1のUFSファイルシステムをマウント
-----
$ isoinfo -i /dev/cdrom -d | grep size   ← ISO 9660のボリュームサイズを求める
Volume set size is: 1
Logical block size is: 2048              ← セクタサイズは2Kバイト
Volume size is: 109872                   ← 合計109872セクタ

$ expr 2048 \* 109872        ← 2048×109872を計算する
225017856                    ← ボリュームサイズは225017856バイト

$ su             ← rootになる
# mkdir /mnt/s0  ← マウントポイントを作成
# n=225017856    ← オフセットの初期値      ↓until文でマウントの試行錯誤
# until mount -r -t ufs -o loop,ufstype=sunx86,offset=$n /dev/cdrom /mnt/s0
> do                     ← ループの開始
>   n=`expr $n + 2048`   ← オフセットに2Kバイトを加算
>   echo $n              ← 現在のオフセットを表示
> done                   ← ループの終了
…省略…       ← ループ中,多数のエラーメッセージが出る
225114112      ← このオフセットで試行      ↓しかしマウントエラー
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       or too many mounted file systems
225116160      ← このオフセットで試行
#              ← シェルのプロンプトに戻れば正常にマウントされている
# ls /mnt/s0   ← 試しにlsコマンドを実行    ↓このようなファイルが見える
a    boot   dev      etc     lib  opt       proc         sbin    tmp  var
bin  cdrom  devices  kernel  mnt  platform  reconfigure  system  usr
# df /mnt/s0   ← 試しにdfコマンドを実行    ↓確かにマウントされている
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/cdrom              363852    353448         0 100% /mnt/s0
-----

To『Solaris 10(x86)をインストールしてみよう』[index]


このページは、技術評論社 Software Design 2005年4月号、『x86版 Solaris 10のインストール』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 with Linux/FreeBSD[Home]
yamamori