第 7章. ユーザー定義デバイス名

The /dev/ディレクトリにはデバイスを表す仮想ファイルがあります。 各仮想ファイルは、ストレージデバイス、USBデバイス、 プリンタなどシステムのデバイスを示します。 この仮想ファイルがデバイス名と呼ばれます。

IDEデバイスのデバイス名はhdで始まり、 SCSIデバイスのデバイス名はsdで始まります。 こうした文字の後に「a」で始まるプレフィックスが付きます。 このプレフィックスはドライブの順番を表します。 例えば、/dev/hdaは1番目のIDEハードドライブ、 /dev/hdbは2番目のIDEハードドライブ、 /dev/hdcは3番目のIDEハードドライブというふうに続きます。

デバイス名のあとに番号が付く場合、この番号はパーティション番号を表します。 例えば、/dev/hda1は、 1番目のIDEドライブの第1パーティションを表します。

ハードドライブをマシン内で物理的に別の場所へ移動する、取り除く、 あるいはハードドライブの初期化に失敗する場合は、 いつくかのデバイス名が変更され、 デバイス名に対する参照が無効にされたままになるかもしれません。 例えば、図7-1に示すように、 システムが3つのSCSIハードドライブを持っていて、 2番目のSCSIハードドライブを取り除くと、異なるドライブのため、 /dev/sdc/dev/sdbになり、 /dev/sdcに対する参照はすべて無効、 /dev/sdbに対する参照もすべて無効になる原因となります。

図 7-1. ハードドライブを取り除く

すべてのハードドライブはそれに附随してUUID と呼ばれる固有の識別子を持ちます。 デバイス名が変更されてしまう問題を解決するために、 devlabelを使用すると、 このUUIDと関連するユーザー定義のデバイス名を追加することができます。 ユーザー定義のデバイス名から実際のデバイス名に対してシンボリックリンクが作成されます。 実際のデバイス名が変更される場合、 シンボリックリンクはそのUUIDに従い同じドライブを指すよう更新されます。 このように、IDE、SCSIいずれのストレージデバイスも それぞれのユーザー定義の名前で参照できます。

また、Devlabelは、デジタルカメラ用メモリカードなど、 リムーバブルハードドライブやUSBデバイスなどのホットプラグデバイスを 自動マウントをするのにも使えます。 自動的にマウントするよう設定した場合、デバイスがプラグインされると、 ユーザー定義のデバイス名でマウントします。

7.1. Devlabelを設定する

ユーザー定義のデバイス名はデバイス名、パーティション名、 またはデバイスのUUIDを基に追加することができます。

次の構文を使用して、ストレージデバイス用のユーザー定義デバイス名を追加します。 デバイスの指定は、デバイス全体でもデバイス上の単一パーティションでも構いません。

devlabel add -d <device> -s <symlink>

例えば、/dev/workシンボリックリンクを追加して、 /dev/hdb1パーティションを示すには、 次のコマンドを使用します。

devlabel add -d /dev/hdb1 -s /dev/work

コマンドが正しく実行されると、次のように表示されます。

Created symlink /dev/work -> /dev/hdb1
Added /dev/work to /etc/sysconfig/devlabel

UUIDを基にデバイスのデバイス名を追加するには、次の構文を使用します。

devlabel add -u <uuid> -s <symlink>

devlabelを使用してデバイス用UUIDを検索するには (または持っているか確認するには)、次の構文を使用します。

devlabel printid -d <device>

シンボリックリンク名はひとつしかない固有名でなければいけません。 追加しようとしたときにすでに同じ名前のリンクが存在する場合は、 設定ファイルは変更されずに次のように表示されます。

The file /dev/work already exists.
Failure. Could not create a symlink.

devlabel一覧からシンボリックリンクを削除するには、 次のコマンドを使用します。

devlabel remove -s <symlink>

そのエントリは設定ファイルから削除され、シンボリックリンクが消去されます。

devlabelシンボリックリンクの状態を見るには、 次のコマンドを使用します。

devlabel status

次のような出力が返されます。

lrwxrwxrwx    1 root            9 Apr 29 13:20 /dev/work -> /dev/hdb1
lrwxrwxrwx    1 root            9 Apr 29 13:41 /dev/tcf -> /dev/hda1

7.1.1. ホットプラグデバイス

hotplugと呼ばれるプログラムは、 ハードウェアが追加/削除されたなど、 システム稼働中にシステムイベントが生じたときに動作します。 例えば、USBハードドライブやUSBメディアカードリーダーをシステムに装着した場合、 hotplugはシステムログファイル(/var/log/messages)にメッセージをログすることでユーザーに通知して、 デバイスが作動するよう適切なカーネルモジュールを読み込みます。

PCI、USB、またはIEEE 1394(ファイアウォールとも呼ばれる)デバイスがプラグインされたときも、 hotplugスクリプトはdevlabelを再起動します。 これにより、リムーバブルストレージメディアがユーザー定義のデバイス名 (/dev/usbcardなど)を受け取り、 オプションで自動的にストレージデバイスをマウントすることができるようになります。

USBカードリーダーをコンピュータのUSBポートに差しこんだら、 次のコマンドをrootとして発行します (/dev/sda1はメディアカードのデバイス名で、 /dev/usbcardは使用するユーザー定義のデバイス名とします)。

devlabel add -d /dev/sda1 -s /dev/usbcard --automount

このコマンドはマウントポイント用のエントリを/etc/sysconfig/devlabel に追加して、/dev/usbcardから/dev/sda1 へのシンボリックリンクを作成します。devlabelに付ける--automount オプションは、それのエントリが/etc/fstabにあり デバイスが存在する場合に、devlabelが再起動するときそのデバイスを 自動的にマウントするよう指示します。

updfstabは新しいデバイス用IDEバスやSCSIバスをスキャンして、エントリがまだない場合にエントリをデバイス用の/etc/fstab に追加するプログラムです。また、 USBデバイスはSCSIデバイスとして表されるので、USBデバイス用エントリも追加します。 詳細についてはupdfstab man ページを参照してください。

USBデバイスを差しこむと、hotplugupdfstab プログラムを実行します。これにより、ストレージデバイスが存在する場合、 そのストレージデバイス(メディアカードなど)用にエントリを追加します。 (カードが入っていないカードリーダーを差しこんだ場合は、エントリは追加されません。) 追加された行には実際のデバイス名(/dev/sda1 など)と kudzuオプションが含まれます。 kudzuオプションはKudzu [1] にデバイスが存在しなければその行を削除できることを伝えます。 devlabelにその行が必要なため、 kudzuオプションが削除されなければなりません。 これにより、行はファイルに残ります。 また、デバイス名をdevlabelデバイス名 (/dev/usbcardなど)に変更して、マウントポイント (/mnt/usbcardなど)を作成します。

行の編集が終了したら、次のような表示になるはずです。

/dev/usbcard   /mnt/usbcard   auto    noauto,owner 0 0

--automountを付けたため、 devlabelが再起動すると、 コンピュータにUSBデバイスをプラグインしたときに、USBカードリーダーデバイスに入っている ストレージメディアが/mnt/usbcardにマウントされます。 気をつけなければいけないのは、USBカードリーダーをコンピュータにプラグインするとき、 そのカードはすでにリーダーの中に入っていなければならないということです。 カードがリーダーに入っていないと、 devlabelはストレージデバイスを見つけられず、 自動的にはマウントできなくなります。

USBカードリーダーにカードが入っていない状態でプラグインしてしまった場合は、 カードを挿入したときに、devlabel restart コマンドをrootとして実行して、メディアカードをマウントします。

注意

[1]

Kudzuは、 システムブート時に実行されるハードウェア検索ツールで、 システムから追加/削除されているハードウェアを見つけます。