Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

25.8. 永続的な命名

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

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

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

25.8.2. World Wide Identifier (WWID)

World Wide Identifier (WWID) は、デバイスを確実に識別するために使用できます。これは、永続的で、SCSI 規格によりすべての SCSI デバイスが必要とするシステムに依存しない識別子です。各ストレージデバイスの WWID 識別子は一意となることが保証され、デバイスのアクセスに使用されるパスに依存しません。
この識別子は、SCSI Inquiry を発行して Device Identification Vital Product Data ( 0x83ページ)または Unit Serial Number ( 0x80ページ)を取得することで取得できます。これらの 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/ 名を使用できます。
システムからデバイスへのパスが複数ある場合、DM Multipath は WWID を使用してこれを検出します。その後、DM Multipath/dev/mapper/wwid ディレクトリーに単一の疑似デバイスを表示します(例: /dev/mapper/3600508b400105df70000e00000ac0000 )。
multipath -l コマンドは、非永続識別子へのマッピングを表示します。Host:Channel:Target: 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 名への適切なマッピングを自動的に維持します。これらの名前は、パスが変更しても持続し、他のシステムからデバイスにアクセスする際に一貫性を保持します。
( DM Multipathの) user_friendly_names 機能を使用すると、WWID は /dev/mapper/mpathn 形式の名前にマップされます。デフォルトでは、このマッピングは /etc/multipath/bindings ファイルで維持されます。これらの mpathn 名は、そのファイルが維持されている限り永続的です。
重要
user_friendly_names を使用する場合は、クラスター内で一貫した名前を取得するために追加の手順が必要です。DM Multipathブックの Consistent Multipath Device Names in a Cluster を参照してください。
システムが提供するこれらの永続名に加えて、udev ルールを使用して独自の永続的な名前を実装し、ストレージの WWID にマップすることもできます。

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

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/
このディレクトリーのエントリーは、デバイスに格納されているコンテンツ (つまりデータ) 内の 一意の ID により、ストレージデバイスを参照するシンボリック名を提供します。blkid ユーティリティーは、デバイスからデータを読み取って、デバイスの一意の識別子(UUID)を取得するために使用されます。以下に例を示します。
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
/dev/disk/by-id/
このディレクトリーのエントリーは、(その他のすべてのストレージデバイスとは異なる) 固有の ID により、ストレージデバイスを参照するシンボリック名を提供します。この識別子はデバイスのプロパティーですが、デバイスのコンテンツ (つまりデータ) には保存されません。以下に例を示します。
/dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05
/dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05
この id は、デバイスの World-Wide 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、または FCoE ストレージデバイスといった、デバイスがサーバーシャーシにない場合に発生する可能性が高くなります。
  • また、カーネルはいつでも udev イベントを送信する可能性があり、デバイスにアクセスできない場合に /dev/disk/by-*/ リンクが削除される可能性があります。
  • udev イベントが生成され、それが処理されるまでに遅延が生じる可能性があります。たとえば、多数のデバイスが検出され、ユーザー空間の udevd サービスが各デバイスのルールを処理するのにある程度の時間がかかる場合などです。これにより、カーネルがデバイスを検出したときと、/dev/disk/by-*/ 名が利用可能になるまでの間に遅延が発生する可能性がありました。
  • ルールによって呼び出される blkid などの外部プログラムはデバイスを短期間開き、他の目的でデバイスにアクセスできなくなる可能性があります。

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

udev の命名属性は永続的ですが、システムの再起動後も独自に変更されないため、設定可能なものもあります。以下の永続的な命名属性には、カスタム値を設定できます。
  • UUID: ファイルシステムの UUID
  • LABEL: ファイルシステムラベル
UUID 属性と LABEL 属性はファイルシステムに関連するため、使用するツールはそのパーティションのファイルシステムによって異なります。
  • 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-f61943f5ea50 )に置き換えます。new_label を、ラベル(例: backup_data )に置き換えます。
注記
udev 属性の変更はバックグラウンドで行われ、時間がかかる場合があります。udevadm settle コマンドは、変更が完全に登録されるまで待機します。これにより、次のコマンドが新しい属性を正しく利用できるようになります。
また、新しいデバイスの作成後に コマンドを使用する必要があります。たとえば、parted ツールを使用してカスタムの PARTUUID 属性または PARTLABEL 属性でパーティションを作成した後、または新規ファイルシステムを作成した後などです。