GNU/Linux >> Linux の 問題 >  >> Cent OS

mdadm を使用して、マルチパス デバイス上にソフトウェア ミラーを作成する方法

問題

mdadm ツールを使用して、2 つの device-mapper-multipath デバイスを使用してソフトウェア RAID ミラーを作成しました:

# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1

その後、セットアップが確認されました:

# /sbin/mdadm --detail /dev/md0
...
  Number   Major   Minor   RaidDevice State
    0     253        2        0      active sync   /dev/dm-2
    1     253        3        1      active sync   /dev/dm-3

実際のマルチパス デバイス名 (/dev/dm-N) が表示されるため、よりわかりやすい名前 (/dev/mapped/ocrp1) のマッピングも検証されます。

# /bin/ls -l /dev/mpath/
lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrp1 -> ../dm-2
lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrmirrorp1 -> ../dm-3
# /bin/ls -l /dev/mapper/
brw-rw---- 1 root disk 253,   2 Apr 23 11:15 ocrp1
brw-rw---- 1 root disk 253,   3 Apr 23 11:15 ocrmirrorp1

これらの便利な名前は同じマルチパス デバイスにマップされるため、セットアップが正しいことが証明されています。再起動後、mdadm は以下を表示します:

# /sbin/mdadm --detail /dev/md0
...
Number   Major   Minor   RaidDevice State
  0       8       97        0      active sync   /dev/sdg1
  1       8      113        1      active sync   /dev/sdh1

RAID はアクティブですが、期待どおりにマルチパス デバイスを使用していません。

解決策

これは実際にはタイミングの問題です。システムの起動中、/etc/rcN.d スクリプトは、マルチパス デバイスが検出され準備が整う前に mdadm を開始します。マルチパスデバイスの数が多いほど認識に時間がかかり、マルチパス処理が完了する前に mdadm が実行される可能性があるため、これは本質的に競合状態です。

解決策は、必要なファイル システム ハンドラとデバイスを /initrd に追加することです。 ファイルを作成して、これらがブート時にカーネルで利用できるようにします。これにより、カーネルはマルチパス デバイスの処理を早期に開始できます。

注意 :Linux カーネルの /vmlinuz ファイルは、いくつかの非常に基本的なデバイスのみをサポートするように構築されています。ファイル システム ハンドラと一般的なデバイス ドライバは個別にコンパイルされ、/initrd (初期 RAM ディスク) ファイルにパッケージ化されます。 GRUB または LILO ブートローダーは、最初に /initrd ファイルの内容をメモリに配置してから、カーネルをロードする必要があります。次に、カーネルは初期 RAM ディスクを使用して、ルート ファイル システムにアクセスするために必要なデバイス ドライバーを取得します。次に、カーネルは実際のルート ファイルシステムを使用するように切り替え、/initrd メモリ イメージで使用されているメモリを解放します。

この巧妙なアプローチにより、1 つのカーネル イメージに各システムに合わせて調整されたデバイス ドライバー セットを提供できます。使用されないデバイス ドライバーとファイル システム ハンドラー コードを保持するためにシステム メモリを浪費する必要はありません。

マルチパス サポートを含むカスタム /initrd ファイルを作成するには、次の手法を使用します:

1. マルチパス、device-mapper-multipath、および HBA ドライバーを含む新しい initrd ファイルを作成します。

# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules

CentOS/RHEL 6 および 7 で同じことを行うには、以下の投稿をご覧ください。

CentOS/RHEL 6 および 7 でマルチパスを使用して「initramfs」を再構築する方法

2. ファイル /etc/mdadm.conf を確認します RAID デバイス用に構成されています:

# /bin/cat /etc/mdadm.conf
DEVICE /dev/mapper/*
ARRAY /dev/md0 uuid=ccfe8a98:ea584ff2:2fad9d51:305ea2da
devices=/dev/mapper/ocrp1,/dev/mapper/ocrmirrorp1 level=raid1

3. 新しい RAM ディスク イメージを、ブートローダーが期待するブート ロケーションにコピーします。

# /bin/cp /root/initrd-mp.img /boot/

4. ブートローダー構成ファイル /boot/grub/grub.conf に新しいエントリを追加して、新しい RAM ディスク イメージを使用します。

title MDADM-MP
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-mp.img
注意 :GRUB スタンザの例を適切に変更してください。カーネルのバージョンとルート デバイスは、この例とは確実に異なります。

CentOS/RHEL 7 および grub2 を使用する場合、正確な手順については以下の投稿を参照してください。

CentOS / RHEL 7 :GRUB2 引数を grubby で変更する方法

5. システムを再起動し、GRUB メニューから MDADM-MP エントリを選択します。

ヒント :それでもマルチパス デバイスが使用されていない場合は、起動スクリプトを追加して、最後の起動ステップとして mdadm を実行する必要があります。これを行う 1 つの方法は、完全な /etc/init.d/ サービス スクリプトを記述したくない場合に、必要なコマンドを /etc/rc.local に追加することです。


Cent OS
  1. Linuxでスワップを作成する方法

  2. Linuxでスワップファイルを作成する方法

  3. auditd を使用して Linux でファイルの削除を監視する方法

  1. DM-Multipath デバイスでパーティションとファイル システムを作成する方法

  2. Linux で logrotate を使用してカスタム ログ ファイル ローテーションを作成する方法

  3. DM-Multipath を使用するように既存の Lvm ボリューム グループを構成する方法

  1. Ansibleでファイルを作成する方法

  2. RHEL 8 /CentOS8にFail2banをインストールして使用する方法

  3. cPanelでファイルマネージャーを使用する方法