25.8. 永続的な命名

Red Hat Enterprise Linux では、ストレージデバイスを識別する方法が複数あります。特にドライブへのインストール時やドライブの再フォーマット時に誤ったデバイスにアクセスしないようにするため、適切なオプションを使用して各デバイスを識別することが重要になります。

25.8.1. ストレージデバイスのメジャー番号とマイナー番号

sd ドライバーによって管理されるストレージデバイスは、メジャーデバイス番号とそれらに関連するマイナー番号によって内部で識別されます。この目的で使用されるメジャーデバイス番号は、連続した範囲にありません。各ストレージデバイスは、デバイス全体またはデバイス内のパーティションの識別に使用されるメジャー番号とマイナー番号によって表されます。sd<letter(s)>[number(s)] の形式でデバイスおよび番号に割り当てられるメジャー番号およびマイナー番号の間には直接的な関係があります。sd ドライバーによって新しいデバイスが検出されると、利用可能なメジャー番号およびマイナー番号の範囲が割り当てられます。デバイスがオペレーティングシステムから削除されると、メジャー番号とマイナー番号の範囲が解放され、後で再使用されます。
デバイスが検出されると、メジャーおよびマイナー番号の範囲と、関連する sd 名がそのデバイスに割り当てられます。そのため、デバイス検出の順番が変わった場合、メジャーおよびマイナー番号の範囲と、関連する sd 名との関係が変更される可能性があります。 これは、一部のハードウェア設定ではまれですが (シャーシ内の物理的な場所によって SCSI ターゲット ID が割り当てられる内部 SCSI コントローラーおよびディスクなどの場合)、以下の例のような状況で発生する可能性があります。
  • ディスクが起動しなかったり、SCSI コントローラーに応答しないことがあります。この場合は、通常のデバイスプローブにより検出されません。ディスクはシステムにアクセスできなくなり、後続のデバイスは関連する次の sd 名が含まれる、メジャーおよびマイナー番号の範囲があります。たとえば、通常 sdb と呼ばれるディスクが検出されないと、sdc と呼ばれるディスクが sdb として代わりに表示されます。
  • SCSI コントローラー (ホストバスアダプターまたは HBA) が初期化に失敗し、その HBA に接続されているディスクすべてが検出されなかった場合。後続のプローブされた HBA に接続しているディスクは、異なるメジャーおよびマイナー番号の範囲および異なる関連する sd 名を割り当てられます。
  • システムに異なるタイプの HBA が存在する場合、ドライバー初期化の順序が変更される可能性があります。これにより、これらの HBA に接続されているディスクが異なる順序で検出される可能性があります。また、HBA がシステムの他の PCI スロットに移動された場合でも発生する可能性があります。
  • ストレージアレイや干渉するスイッチの電源が切れた場合など、ストレージデバイスがプローブされたときに、ファイバーチャネル、iSCSI、または FCoE アダプターを持つシステムに接続されたディスクがアクセスできなくなる可能性があります。システムが起動するまでの時間よりもストレージアレイがオンラインになるまでの時間の方が長く、電源の障害後にシステムが再起動すると、この問題が発生する可能性があります。一部のファイバーチャネルドライバーは WWPN マッピングへの永続 SCSI ターゲット ID を指定するメカニズムをサポートしますが、メジャーおよびマイナー番号の範囲や関連する sd 名は予約されず、一貫性のある SCSI ターゲット ID 番号のみが提供されます。
そのため、/etc/fstab ファイルなどにあるデバイスを参照するときにメジャーおよびマイナー番号の範囲や関連する sd 名を使用することは望ましくありません。誤ったデバイスがマウントされ、データが破損する可能性があります。
しかし、場合によっては他のメカニズムが使用される場合でも sd 名の参照が必要になる場合もあります (デバイスによりエラーが報告される場合など)。これは、Linux カーネルはデバイスに関するカーネルメッセージで sd 名 (および SCSI ホスト、チャネル、ターゲット、LUN タプル) を使用するためです。

25.8.2. World Wide Identifier (WWID)

World Wide Identifier (WWID) を使用するとデバイスを正確に識別することが可能です。 WWID は、SCSI 標準がすべての SCSI デバイスに必要とするシステムに依存しない永続的な ID です。各ストレージデバイスの WWID は一意となることが保証され、 デバイスのアクセスに使用されるパスに依存しません。
この識別子は、 Device Identification Vital Product Data (ページ 0x80) または Unit Serial Number (ページ 0x83) を取得するための SCSI Inquiry を発行することで取得することができます。WWID から現在の /dev/sd 名へのマッピングは /dev/disk/by-id/ ディレクトリー内で管理されているシンボリックリンクで確認できます。

例25.4 WWID

たとえば、ページ 0x83 の識別子を持つデバイスは、以下のような設定になります。
scsi-3600508b400105e210000900000490000 -> ../../sda
または、ページ 0x80 の識別子を持つデバイスは、以下のような設定になります。
scsi-SSEAGATE_ST373453LW_3HW1RHM6 -> ../../sda
Red Hat Enterprise Linux では、WWID ベースのデバイス名からそのシステム上の現在の /dev/sd 名への正しいマッピングを自動的に維持します。デバイスへのパスが変更したり、別のシステムからそのデバイスへのアクセスがあった場合にも、アプリケーションはディスク上のデータ参照に /dev/disk/by-id/ を使用することができます。
1 つのシステムから 1 つのデバイスへのパスが複数ある場合、 DM Multipath は WWID を使って検出を行います。次に DM Multipath/dev/mapper/3600508b400105df70000e00000ac0000 などの単一の「擬似デバイス」 を /dev/mapper/wwid ディレクトリー内に示します。
multipath -l コマンドは、永続化されていない識別子であるHost:Channel:Target:LUN/dev/sd 名、major:minor 番号へのマッピングを表示します。
3600508b400105df70000e00000ac0000 dm-2 vendor,product 
[size=20G][features=1 queue_if_no_path][hwhandler=0][rw] 
\_ round-robin 0 [prio=0][active] 
 \_ 5:0:1:1 sdc 8:32  [active][undef] 
 \_ 6:0:1:1 sdg 8:96  [active][undef]
\_ round-robin 0 [prio=0][enabled] 
 \_ 5:0:0:1 sdb 8:16  [active][undef] 
 \_ 6:0:0:1 sdf 8:80  [active][undef]
DM Multipath は、各 WWID ベースのデバイス名からシステムの対応する /dev/sd 名の適切なマッピングを自動的に維持します。これらの名前は、パスの変更後も永続され、他のシステムからデバイスにアクセスしたときに一貫性を保持します。
user_friendly_names 機能を使用すると (DM Multipath の機能)、WWID は /dev/mapper/mpathn の形式の名前にマッピングされます。 デフォルトでは、 このマッピングは /etc/multipath/bindings ファイル内で維持されます。 このファイルが維持されている限り、これら mpathn の名前は永続的となります。

重要

user_friendly_names を使用する場合は、クラスターで一貫した名前を取得するのにその他の操作を行う必要があります。「DM マルチパス」クラスター内で整合性のあるマルチパスデバイス名の維持のセクションを参照してください。
システムにより提供される永続的な名前の他に、udev ルールを使用して独自の永続的な名前を実装し、ストレージの WWID にマップすることもできます。

25.8.3. udev メカニズム (/dev/disk/by-*) によって管理されるデバイス名

udev のメカニズムは、主な 3 つのコンポーネントで構成されます。
カーネル
デバイスの追加、削除、または変更時にユーザー領域へ送信されるイベントを生成します。
udevd については、以下を実行します。
イベントを受信します。
udev ルール
udev サービスがカーネルイベントを受信したときに行う操作を指定します。
このメカニズムはストレージデバイスのみでなく、Linux の全種類のデバイスに使用されます。ストレージデバイスの場合、Red Hat Enterprise Linux には /dev/disk/ ディレクトリーにシンボリックリンクを作成する udev ルールが含まれ、ストレージデバイスのコンテンツ、一意な識別子、シリアル番号、またはデバイスのアクセスに使用されるハードウェアパスを用いてストレージデバイスを参照できます。
/dev/disk/by-label/
このディレクトリーのエントリーは、デバイスに保存されたコンテンツ (データ) のラベルを用いてストレージデバイスを参照するシンボリック名を提供します。blkid ユーティリティは、デバイスからデータを読み取り、そのデバイスの名前 (ラベル) を判断するために使用されます。例を以下に示します。
/dev/disk/by-label/Boot

注記

情報はデバイス上のコンテンツ (データ) から取得されるため、コンテンツが別のデバイスにコピーされても、ラベルは同じになります。
また、以下の構文どおりにラベルを使用すると /etc/fstab のデバイスを参照することもできます。
LABEL=Boot
/dev/disk/by-uuid/
このディレクトリーのエントリーは、デバイスに保存されたコンテンツ (データ) の一意な識別子を用いてストレージデバイスを参照するシンボリック名を提供します。blkid ユーティリティは、デバイスからデータを読み取り、デバイスの一意な識別子 (UUID) を取得するために使用されます。例を以下に示します。
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
/dev/disk/by-id/
このディレクトリーのエントリーは、一意な識別子 (他のストレージデバイスとは異なる) を用いてストレージデバイスを参照するシンボリック名を提供します。識別子はデバイスのプロパティーですが、デバイス上のコンテンツ (データ) には保存されません。例を以下に示します。
/dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05
/dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05
ID は、デバイスのワールドワイド ID またはデバイスのシリアル番号から取得されます。/dev/disk/by-id/ エントリーにパーティション番号が含まれることもあります。例を以下に示します。
/dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05-part1
/dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05-part1
/dev/disk/by-path/
このディレクトリーのエントリーは、デバイスのアクセスに使用されるハードウェアパスを用いてストレージデバイスを参照するシンボリック名を提供します。PCI 階層のストレージコントローラーへの参照で始まり、SCSI ホスト、チャネル、ターゲット、および LUN 番号が含まれ、任意でパーティション番号が含まれます。メジャーおよびマイナー番号または sd 名のよりも、これらの名前の使用が推奨されますが、ファイバーチャネル SAN 環境でターゲット番号が変更しないようにし (永続バインディングなどを使用)、ホストアダプターを別の PCI ストッロに移す場合は名前の使用を更新するよう注意する必要があります。さらに、HBA のプローブに失敗した場合、ドライバーが異なる順序でロードされた場合、または新しい HBA がシステムにインストールされた場合など、SCSI ホスト番号が変更する可能性があります。バイパスリストの例を以下に示します。
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0
/dev/disk/by-path/ エントリーに以下のようなパーティション番号が含まれることもあります。
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0-part1

25.8.3.1. udev デバイスの命名規則の制限

以下は、udev の命名規則の制限の一例です。
  • udev イベントに対して udev ルールが処理されるときに udev メカニズムはストレージデバイスをクエリーする機能に依存する可能性があるため、クエリーの実行時にデバイスにアクセスできない場合がある可能性があります。これは、デバイスがサーバーシャーシにない場合にファイバーチャネル、iSCSI、または FCoF ストレージデバイスで発生する可能性が高くなります。
  • カーネルも udev イベントをいつでも送信する可能性があるため、デバイスにアクセスできない場合に /dev/disk/by-*/ リンクが削除される可能性があります。
  • udev イベントが生成される時点とそのイベントが処理される時点の間で遅延が発生することがあります (大量のデバイスが検出され、ユーザー領域の udevd デーモンによる各デバイスのルールの処理に時間がかかる場合など)。これにより、カーネルがデバイスを検出する時点と /dev/disk/by-*/ の名前が利用できる時点の間で遅延が発生することがあります。
  • ルールによって呼び出される blkid などの外部プログラムによってデバイスが短期間開放され、他の目的でデバイスにアクセスできなくなる可能性があります。

25.8.3.2. 永続的な命名属性の変更

udev 命名属性は永続的ですが、システム再起動で変更されません。以下の永続的な命名属性には、カスタムの値を設定できます。
  • UUID: ファイルシステム UUID
  • LABEL: ファイルシステムラベル
UUIDLABEL 属性はファイルシステムに関連するため、使用する必要のあるツールは、そのパーティションのファイルシステムに依存します。
  • XFS ファイルシステムの UUID または LABEL 属性を変更するには、ファイルシステムのマウントを解除し、xfs_admin ユーティリティを使用して属性を変更します。
    # umount /dev/device
    # xfs_admin [-U new_uuid] [-L new_label] /dev/device
    # udevadm settle
  • ext4、ext3、ext2 ファイルシステムの UUID または LABEL 属性を変更するには、tune2fs ユーティリティを使用します。
    # tune2fs [-U new_uuid] [-L new_label] /dev/device
    # udevadm settle
new_uuid を、設定したい UUID に置き換えます。例: 1cdfbc07-1c90-4984-b5ec-f61943f5ea50new_labelbackup_data などのラベルに置き換えます。

注記

udev 属性の変更はバックグラウンドで行われ、時間がかかる場合があります。udevadm settle コマンドは変更が完全に登録されるまで待機します。これにより、次のコマンドが新しい属性を正しく利用できるようになります。
また、新しいデバイスを作成した後に、このコマンドを使う必要があります。たとえば、parted ツールを使用してカスタムの PARTUUID または PARTLABEL属性でパーティションを作成する後や、新しいファイルシステムを作成した後が考えられます。