web-dev-qa-db-ja.com

再起動後にマルチパスdevnodeが変更されるのはなぜですか?

Multipath -llを実行すると、出力は次のようになります。

ocr3 (149455400000000000000000001000000ca0200000d000000) dm-9 IET,VIRTUAL-DISK
[size=980M][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
 \_ 1:0:0:11 sdo 8:224 [active][ready]
\_ round-robin 0 [prio=0][enabled]
 \_ 1:0:0:10 sdn 8:208 [active][ready]

ただし、sdoやsdnなどの同じocr3のdevnodeは、再起動後に変更されます。
一貫性の問題だと思います。
再起動後にdevnodeが変更されるのはなぜですか?
再起動後もdevnodeを永続的にする方法は?

1
finkfink

ホットプラグと動的再構成を可能にするために、/dev/sd*デバイスノードがブート間で同じままであると想定しないでください。

AHCI SATAコントローラーが1つしかないワークステーションでは、順序は通常静的です。これは、ほとんどの場合、ストレージコントローラードライバーが読み込まれる順序によって決定されるためです。通常、ルートディスクのドライバーは、ブートのinitramfsフェーズで読み込まれます。 usb-storage。 AHCIコントローラーによって管理されるディスクの順序は、コントローラーポートがドライバーによってポート番号順にプローブされるため、固定されます。

ただし、SANストレージに接続されているシステムでは、状況はそれほど単純ではありません。複数のディスクコントローラーが存在する可能性があります(内部システムディスク用に1つ、次に各SAN = HBA)であり、起動時に、HBAは通常PCIバスの順序でプローブされ、各HBA内のLUNは、SAN構成にも依存する可能性があるドライバー固有の順序で検出されます。順序も、単一のHBA内では、LUNWWIDまたはその他のストレージ構成の詳細に基づいている場合があります。

また、各HBAに事前に割り当てられた/dev/sd*名の範囲はありません。各HBAのLUNに名前が割り当てられると、システムは/dev/sd*名にギャップを残さずに次のHBAに進みます。

/dev/sd*名がディスクまたはLUNに割り当てられると、システムの実行中に別のLUNを指すように自動的に再割り当てすることはできません。そうしないと、ファイルシステムまたはデータベースが破損する可能性があります。システムの実行中のこのような再割り当てには、常にsysadminが関与する必要があります。起動時にのみ、自動的に再割り当てできます。

その結果、SAN管理者がシステムの新しいLUNを提示する場合、そのWWIDは確かに一意である必要がありますが、WWID値は既存の前、後、または途中のいずれかである可能性がありますLUN。ホットアドされると、そのパスへの各パスは次の空き/dev/sd*デバイス名を取得するため、既存のすべてのLUNを追跡します。それだけでも、次にシステムが/dev/sd*名の順序を変更することが実質的に保証されます。起動します。

もちろん、必要に応じてudevルールを使用して/dev/sda*名を特定のHBAおよびWWIDに修正することもできます...しかし、それは非常に小さな利益のために多くの作業です。すべての/dev/sd*デバイスは、カーネルに関する限り、まったく同じように動作するはずです。それが当てはまらない場合は、バグを見つけたので、報告する必要があります。したがって、それらの順序が重要である必要がある理由はありません

Linuxカーネル開発者は、オンライン構成可能性から制限を取り除こうとしていたため、2.5。*開発サイクル中にこれに気づきました。システム構成を/dev/sd*名から完全に独立させる方法があります。

  • 従来のパーティションを使用する場合は、/dev/disk/by-*デバイスの代わりに/dev/sd*デバイス名を使用するか、UUID=LABEL=または/etc/fstab構文を使用できます。

  • LVMを使用する場合、デバイス名を永続的に保存することすらありませんが、表示可能なディスクとパーティションでLVM署名を探し、そこから動的に構成を構築します。これは、起動時、およびvgscanを実行するたびに自動的に発生します。 (はい、ディスクの使用中にLVMマッピングが変更されるのを防ぐセーフガードがあります。)

  • マルチパスを使用する場合、マルチパスLUNは、WWID(friendly_namesが無効になっている場合)、各WWIDが最初に表示されたときに割り当てられた/dev/mapper/mpath*名、および/etc/multipath/wwids(またはRHEL/CentOS 6以前の/var/lib/multipath/bindings)に永続的に保存されます。 /varが別のファイルシステムである場合は間違いであることが判明しました...)、またはWWIDで自分で割り当てることができるエイリアスによって。

SANディスクが接続されている古いRHEL3システムを管理する必要がありました。最初はHBAが1つしかありませんでしたが、冗長性のために別のHBAが追加され、SAN移行...しかし、それは別のベンダーからのものであったため、ベンダー固有のマルチパスソリューションは利用できませんでした。mdadmの(その後廃止された)マルチパス機能を使用する必要がありました。追跡する必要がありました。 2つの単語:それはひどい。そのシステムがついに時代遅れになったとき、私はとても幸せでした。

1
telcoM