web-dev-qa-db-ja.com

sataデバイス名をRAIDシステムの物理sataインターフェースにマップする方法

10個のSATAポートと、ブートディスクとして別のSATAを備えたシステムがあります。 10個のSATAポートは、5個のソフトウェアRAID1アレイを構成します。 RAIDディスクは、起動の間に取り外して、いつでも任意の空のディスクと交換できます。

/ dev/sdaが常に私の最初の物理SATAポートであり、/ dev/sdjが常に RAID1アレイが正しく動作するための10番目であることを確認する必要があります。たとえば、最初のポートの最初のディスクに障害が発生した場合、それは欠落ディスクとしてマークする必要があるため、次のポートのディスクは/ dev/sdbである必要があります。現在、次に使用可能なディスクは/ dev/sdaとしてマウントされ、アレイが完全に破壊され、ブート構成が破壊されます。

1つおきのディスクに障害が発生し、各RAID1アレイのペアに動作中のディスクが1つしかないという恐ろしいシナリオを想像してみてください。番号付けshould be:

/ dev/sda/dev/sdc/dev/sde/dev/sdg/dev/sdi

しない:

/ dev/sda/dev/sdb/dev/sdc/dev/sdd/dev/sde

特定のディスクにUUIDでラベルを付けるためのudevルールを見てきましたが、ユーザーはディスクを任意にホットスワップするため、これはまったく便利ではありません。

デフォルトでは、Linuxは次に使用可能なディスクに次のアルファベット文字でラベルを付けます。 1つの壊れたディスクが複数のRAID1アレイを壊す状況はたくさんあります。

  • デバイスを特定のハードウェアインターフェイスにマッピングするにはどうすればよいですか?これも可能ですか?
  • 起動時に「欠落している」デバイスがあり、後続のデバイスに誤ったラベルが付けられないようにすることは可能ですか?
2
sg90

Debian Wiki には、私が必要としたものを説明する優れたエントリがあります。これに続いて、/ etc/udev/rules.d /20-disk-bay.rulesの下に独自のルールを作成しました。例として、最初の2つのsataポートマッピングのみを含めました。

# There are different DEVPATHs for major kernel versions!
# Example for SATA N:
#
# Kernel < 3 DEVPATH
# *1f.2/hostN/targetN:0:0/N:0:0:0*
#
# Kernel > 3 DEVPATH
# *1f.2/ata(N+1)/Host*

########## Map SATA 0 to /dev/sdb ##############

# Kernel < 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/Host0/target0:0:0/0:0:0:0*", NAME="sdb", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/Host0/target0:0:0/0:0:0:0*", NAME="sdb%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

# Kernel > 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/Host*", NAME="sdb", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/Host*", NAME="sdb%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

########## Map SATA 1 to /dev/sdc ##############

# Kernel < 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/Host1/target1:0:0/1:0:0:0*", NAME="sdc", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ENV{DEVTYPE}=="partition", SUBSYSTEM=="block", DEVPATH=="*1f.2/Host1/target1:0:0/1:0:0:0*", NAME="sdc%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

# Kernel > 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/Host*", NAME="sdc", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"
KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/Host*", NAME="sdc%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

LABEL="END_20_PERSISTENT_DISK"

上記のルールは、マザーボードの最初の物理SATAポートであるSATAポート0に配置されたドライブを/ dev/sdbとして常にマップし、SATA1に配置されたドライブを/ dev/sdcとしてマップします。一貫した物理ポートマッピングが私のユースケースでは重要です。 、5つのRAID-1アレイがあり、ディスクを物理的なホットスワップベイから任意にスワップアウトできます。技術者以外のユーザーは、デバイスIDを処理することなく、いつでもこれらのディスクをスワップアウトできます。システムは完全に自律的であり、ホットスワップベイの間違ったディスク上にRAIDアレイを構築することはありません。これは非常に特殊なユースケースです。

1
sg90

次のように配列を作成する場合:

mdadm --create --name=DATA00 --level=6 --auto=part --verbose /dev/md0 --raid-devices=6 /dev/sda1 /dev/sdb1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1

そして、次のことを行います。

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

mdadm.confに次のようなエントリがあります。

ARRAY /dev/md/DATA00 metadata=1.2 name=owl:DATA00 UUID=5eeada67:ff994361:bae3ab52:d9e8bd49

UUIDがこれを処理するため、元のパーティションやドライバーの順序を参照する必要はありません。アクティベーション/再起動後にアレイを構成する実際のパーティションは、/proc/mdstatから確認できます。個々のパーティション(そのUUIDを含む)を確認するには、mdadm --examine /dev/sdXYを使用します

決して再起動後にドライブに特定の順序を設定する必要があり、外部SATAが接続されているかどうかに応じてBIOSが切り替わるため、非常に満足しています。関係ありません。

1
Anthon

ユーザーがディスクを任意にホットスワップするのはなぜですか?

多くのホットスワップは、ディスクがより早く摩耗する可能性が高いことを意味します。速度のレイドアドバンテージは失われます。実際、アレイのパフォーマンスは、回復中は単一のディスクよりも悪くなる可能性があります。

ディスクを恣意的にリッピングする習慣は、遅かれ早かれ、誰かが同じアレイに属する2つのディスクを引き出して、結果としてシステムをクラッシュさせる可能性がある状況に陥ります。

ここで説明した問題は言うまでもありません。また、mdadmがアレイに手動で追加せずに新しいディスクを取得するかどうかはわかりませんが、それを回避する方法があるかもしれません。

これはバックアップスキームですか?それから私はそれを強くお勧めしません!従来のバックアップを使用します-LVMがある場合はおそらくLVMスナップショットを使用します。

ユーザーがサーバーを「悪用」している場合は、サーバールームのドアをロックするか、ほとんどのホットスワップベイに付属のキーを奪うか、システム(レイドを行うのに十分重要)が危険にさらされていることを管理者に通知します。この動作によるダウンタイム。

ディスクが壊れているか、古いために交換される場合を除いて、ディスクをホットスワップしないでください!

ホットスワップは、壊れている、古い、または他の理由で交換する必要があるディスクを交換するときに、システムの稼働時間を中断しないようにするツールです。不規則な理由-これで十分です。 (これは、非常に重要なシステムに関しては十分です)。

ディスクが破損した場合は、事前にRAIDアレイに予備のディスクを追加して、予備のディスクを自動的に同期するか、ホットスワップされた交換用ディスクを手動で追加する必要があります。

Anthonの回答、またはこのガイドを参照してください: https://raid.wiki.kernel.org/index.php/RAID_setup

0
Erk