LinuxでのSCSIデバイス名を予測可能なものにする:scsidev

LinuxでSCSIデバイス

SCSIデバイスをたくさん接続してLinuxを運用する事が可能です. IDEデバイスを接続する場合にも同様ですが,4個くらいまでは予測できますが, それ以上になるとデバイス名がどうなるのか予測が難しくなります. SCSIデバイスエミュレーションのレイヤがあるため, Linuxにおいては,USBで接続したディスクやIDE接続のディスクをSCSIディスクとして 扱うことができます. そのため,SCSI自体を利用していなくとも,SCSIデバイスの扱いが必要な 場合があります.

USB接続で動的にデバイスを接続する場合に,接続した順番でデバイス名が 変わってしまって困った事はありませんか? そのような場合,scsidevを利用することができます.

scsidev

scsidevはLinuxカーネル2.4とか2.6で利用できるもののようです(2.2系列については未確認). Debianにおいてはscsitoolsパッケージに入っています. 昔はhwtoolsパッケージに入っていたようです.

scsidevを実行すると,/dev/scsi以下にデバイスを作成してくれます.

brw-rw----   1 root     disk            0 12月  1 07:04 sdh1-0c0i0l0
brw-rw----   1 root     disk            0 12月  1 07:04 sdh1-0c0i0l0p1
brw-rw----   1 root     disk            0 12月  1 07:04 sdh1-0c0i0l0p2
crw-------   1 root     root            0 12月  1 07:04 sgh0-0c0i0l0
crw-------   1 root     root            0 12月  1 07:04 sgh1-0c0i0l0
brw-rw----   1 root     cdrom           0 12月  1 07:04 srh0-0c0i0l0
    

この際に,/proc/scsi/scsiにある情報をもとに,/etc/scsi.alias ファイルを設定すると,その情報を元にデバイスを作成してくれます.

$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: TOSHIBA  Model: DVD-ROM SD-R5002 Rev: 1M31
  Type:   CD-ROM                           ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: USB-HS   Model: WDC WD1600AB-00D Rev: 0.01
  Type:   Direct-Access                    ANSI SCSI revision: 02
    

この場合には,/etc/scsi.alias

manufacturer="USB-HS", model="WDC WD1600AB-00D", devtype=disk, alias=usbhdd
    

と設定して,scsidevを実行すると, /dev/scsiに以下のデバイスファイルが作成されます.

brw-rw----   1 root     disk            0 12月  1 07:14 usbhdd
brw-rw----   1 root     disk            0 12月  1 07:14 usbhdd-p1
brw-rw----   1 root     disk            0 12月  1 07:14 usbhdd-p2
    

これで,毎回USBディスクを接続するたびにscsidevコマンドを実行すれば, /dev/scsi/usbhdd-p1をマウントすればよい,ということが分かります.

USB HDDを接続する場合の作業手順

SCSIDEVを使っている場合の作業手順は以下のようになります. 前提: カーネルがUSB mass storage deviceに対応していること.

USB HDD デバイスの購入
USB HDDデバイスをPCに接続 dmesgにて接続を確認.
usb 1-1: new high speed USB device using address 2
scsi1 : SCSI emulation for USB Mass Storage devices
  Vendor: SAMSUNG   Model: SV1203N           Rev: TQ10
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sda: 234493056 512-byte hdwr sectors (120060 MB)
sda: assuming drive cache: write through
 sda: sda1
	    
cat /proc/partitions にてそれらしいデバイスがあることを確認
$ cat /proc/partitions
major minor  #blocks  name
  .
  . 
   8     0  117246528 sda
   8     1  117242338 sda1
	    
cfdisk, fdisk などを利用してパーティション切り.cfdisk /dev/sda $ cat /proc/partitions にてそれっぽく切れていることを確認
ファイルシステムを作成する
#mke2fs -j /dev/sda1
	      #tune2fs -c0 -i0 /dev/sda1
	    
tune2fs -l /dev/sda1で確認
# tune2fs -l /dev/sda1  | grep -e "^\(Maximum mount count\|Check interval\)"
Maximum mount count:      -1
Check interval:           0 ()
	    
cat /proc/scsi/scsiにて情報取得し,
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: SAMSUNG  Model: SV1203N          Rev: TQ10
  Type:   Direct-Access                    ANSI SCSI revision: 02
	    
そのエントリを/etc/scsi.aliasに追加
manufacturer="SAMSUNG", model="SV1203N", devtype=disk, alias=iodatahdd120g
	    
scsidevコマンドを実行
$ ls -l /dev/scsi/
合計 0
brw-rw----    1 root     disk       8,   0 2004-03-23 23:45 iodatahdd120g
brw-rw----    1 root     disk       8,   1 2004-03-23 23:45 iodatahdd120g-p1
	    

その他の関連文献

特に参考になる文献は以下です.

なお,scsidevと同等以上の機能を提供しようとしているのが,最近(2003年12月20日現在)話題になっているudevのようです.

ネットワークカードについて同じような機構を提供しているのが,nameifです./etc/mactabeth0 00:90:CC:0B:68:0Aというような感じで記述します. Debianでは標準で動かそうという動きがあるようです.

RedHat 9, RedHat EL 3.0には,devlabelというツールがあるようで,それが標準になっているようです.


Junichi Uekawa

$Id: scsidev.html.ja,v 1.10 2004/07/14 14:05:45 dancer Exp $