Chapter 2. 構成を概観する

SCSI サブシステムは 3 レイヤから構成されていて、「高」レベルはユーザー空間 やカーネル空間のインタフェースに、「低」レベルはハードウェアに接しています。 高レベルのドライバは、一般に 2 文字の短い略語で知られています(例えば 「sd」は SCSI ディスクドライバ)。 対応するモジュールドライバの名称は下記の図表の{}内を見てください。 歴史的な理由により、モジュールドライバの名称と組み込みドライバの名称が 異なる場合があります。

SCSI サブシステムの 3 レベルのドライバ構造

高レベルのサブシステムは、ユーザとカーネルの界面をサポートしています。 sd と sr はブロックデバイス、st と sg はキャラクタ・デバイスの インタフェースです。 SCSI サブシステムを使ったどんな操作(例えばディスクからセクタを読み出す) も、3 レイヤのドライバをそれぞれ 1 つずつ使います(例えば sd と SCSI の 中間レベルのドライバ、aic7xxx ドライバ)。

図を見てわかるように、SCSI の中間レベルはすべての操作で共通です。 SCSI の中間レベルは、内部インタフェースを定義しており、高レベル、低レベルの ドライバに共通のサービスを提供します。中間レベルが提供する ioctl は、ファイル ディスクリプタが高レベルの 4 つのドライバのどれに属していても有効です。

ブロックデバイスに対して最もよく行われる操作は、ファイルシステム の「マウント」です。通常 sd デバイスがあるパーティションをマウントしたり (例 mount -t ext2 /dev/sda6 /home)、sr デバイスがデバイス 全体をマウントしたりします (例 mount -t iso9660 /dev/sr0 /mnt/cdrom)。 ブロックデバイスからの読み書きには dd コマンドが使えます。 この場合は、ブロックの大きさを表す引数(「bs」)として、そのデバイスのブロック の大きさ(例えばディスクの場合はたいてい 512 バイト)を設定するか、そのブロック の大きさの整数倍(例えば 8192 バイト)を設定する必要があります。 最近ブロックデバイスサブシステムは、1 つのデバイス(もしくはパーティション) を何回にも渡って、多重マウントできるようになりました。

sd は汎用ディスクの 1 つで、IDE サブシステムの hd に相当します。 sd デバイスをマウントから外せば、fdisk コマンドを 使ってディスクのパーティションテーブルを見たり、修正したりできます。 hdparm は、もともと ATA ディスク(IDE や EIDE ディスク として知られている)を扱うコマンドですが、SCSI ディスクに対して機能する オプションもあります。

sr は CD-ROM サブシステムの 1 つです。ファイルシステム(例えば iso9660) をマウントできるほか、オーディオ CD を読むこともできます。オーディオ CD を読む際は、ファイルシステムをマウントしませんが、普通は ioctl が何回か実行されます。dd のような一般的な Linux コマンドは、オーディオ CD には使えません。

st はキャラクタデバイスで、テープを読み書きします。データの転送やその他の 制御には、通常 mt コマンドを使います。

sg はキャラクタデバイスのインタフェースを使うデバイスに SCSI コマンド をそのまま渡します。汎用的な Linux コマンドでは、sg デバイスを 使わない方が良いでしょう。sg を利用している アプリケーションは、SANE(スキャナー)や cdrecordcdrdao (CD ライター)、cdparanoia (オーディオ CD をデジタルに読み込む)などです。