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)>[番号の形式です。]sd ドライバーが新規デバイスを検出するたびに、利用可能なメジャー番号とマイナー番号の範囲が割り当てられます。オペレーティングシステムからデバイスを削除すると、メジャー番号とマイナー番号の範囲が後で再利用できるように解放されます。
メジャー番号とマイナー番号の範囲、および関連する sd 名は、検出されると各デバイスに割り当てられます。つまり、デバイスの検出順序が変わると、メジャー番号とマイナー番号の範囲、および関連する sd 名の関連付けが変わる可能性があります。これは一部のハードウェア設定とは対照的ではありませんが(たとえば、内部 SCSI コントローラーや、シャーシ内の物理の場所によって SCSI ターゲット ID が割り当てているディスクなど)、無駄になることはありません。これが実行される状況の例を以下に示します。
  • ディスクが起動しなかったり、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)は、デバイスを確実に識別するために使用できます。これは、SCSI 標準がすべての SCSI デバイスから必要とする、永続的なシステムに依存しない ID です。各ストレージデバイスの WWID 識別子は一意となることが保証され、デバイスへのアクセスに使用されるパスに依存しません。
この識別子は、SCSI Inquiry を発行して Device Identification Vital Product Data (0x83 ページ)または Unit Serial Number (0x 80ページ)を取得することで取得できます。この 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) に単一の「pseudo-device」を表示します
コマンド 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 名への適切なマッピングを自動的に維持します。これらの名前は、パスが変更しても持続し、異なるシステムからデバイスにアクセスする際に一貫性を保持します。
DM Multipathuser_friendly_names 機能を使用すると、WWID は /dev/mapper/mpathn 形式の名前にマッピングされます。デフォルトでは、このマッピングは /etc/multipath/bindings ファイルに保持されています。これらの mpathn 名は、そのファイルが維持されている限り永続的です。
重要
user_friendly_names を使用する場合は、クラスター内で一貫した名前を取得するために追加の手順が必要です。『DM Multipath』の「クラスター」の「Consistent Multipath Device Names 」を参照してください。
システムにより提供される永続的な名前のほかに、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/
このディレクトリーのエントリーは、デバイスに格納されているコンテンツ(つまりデータ)内の一意の識別子によって、ストレージデバイスを参照するシンボリック名を提供します。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 は、デバイスの 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 スロットに移動する場合に名前の使用が更新されるようにする必要があります。また、SCSI ホスト番号は、HBA がプローブに失敗した場合、ドライバーが別の順序でロードされる場合や、新しい HBA がシステムにインストールされている場合に変更される可能性があります。by-path 一覧の例を以下に示します。
/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 イベントが生成されそのイベントが処理されるまでに遅延が生じる場合があります(大量のデバイスが検出され、ユーザー空間の udev サービスによる各デバイスのルールを処理するのにある程度の時間がかかる場合など )。これにより、カーネルがデバイスを検出してから、/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 属性でパーティションを作成した後、または新しいファイルシステムの作成後にコマンドを使用する必要があります。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。