起動時の流れ
起動スクリプトとして /etc/init.d に murasaki が置かれ、これはランレベル 2 用のシンボリックリンクが start 引数付きで呼び出されることで実行される。スクリプトは Buffalo 社により書き換えられており、以下の処理が行われている。
1. Buffalo 社製のバイナリ /usr/bin/parse_usbscsi を実行。
2. /proc/cmdline を参照し、ホットプラグがオフモードでないことを確認。
3. murasaki 用のロックファイルを作成。
4. エージェントに murasaki を指定するため、murasaki の実行パス /sbin/hotplug.murasaki を /proc/sys/kernel/hotplug に書き込む。
5. /proc/sys/kernel/modprobe を参照し、modprobe の実行パスを取得。
6. /etc/murasaki 下に存在するシステムディレクトリの削除。
7. /sbin/murasaki_init.usb を実行。
8. /proc/scsi/usb-storage-0/0 が存在する場合、マウントスクリプトを start 引数二つで実行。
/usr/bin/parse_usbscsi
この Buffalo 社製のバイナリはデバイス情報を参照し /mnt/usbinfo 下に exist 及び list を生成しているようだ。
# cat list
/dev/sdb
/dev/sdc
/dev/sdd
# cat exist
/dev/sdb,SAMSUNG SV1604N ,HDD
/dev/sdc,WDC WD2500BB-00R,HDD
/dev/sdd,EACS-00D6B0 ,HDD
これらのリストは自作マウントスクリプトからも利用しようと思っていたのだが、筆者の現在の環境においては残念ながら正常に機能しなかった。上記では三台のデバイスがリストされているが実際は四台接続されている環境である。/proc/scsi/scsi を参照するとカーネルはすべてのデバイスを認識していることが確認できる。
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: Generic Model: Traveling Disk Rev: 1.11
Type: Direct-Access RMB: Removable
ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: USB-HS Model: SAMSUNG SV1604N Rev: 0.01
Type: Direct-Access RMB: HardDisk
ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: USB-HS Model: WDC WD2500BB-00R Rev: 0.01
Type: Direct-Access RMB: HardDisk
ANSI SCSI revision: 02
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: WDC WD10 Model: EACS-00D6B0 Rev:
Type: Direct-Access RMB: HardDisk
ANSI SCSI revision: 02
結局リスト化の作業も自前で実装するしかなさそうである・・・。
ホットプラグ時の流れ
最終更新:2008年09月07日 12:14