OpenMediaVault7 (OMV7) で作る PC2台連携 108TB RAID6 システム【Part 1】

これまで、OpenMediaVault 5 (以後 OMV5) 、OpenMediaVault 6 (以後 OMV6) を使って RAID Z 、RAID Z2 を実現し、使ってまいりましたが、ディスクの使用容量が増えるにしたがって、動作に問題が生じて来ました。読み出し時に一瞬止まるのです。主に動画で再生時に詰まった様な動作になるのです。一時間の再生動画で 1-2 回以上は一瞬止まります。RAID Z, RAID Z2 はメモリー食いなのでメモリー不足なのかも知れません。それに、大容量のディスク装置も結局は殆ど NAS として使っているだけなので、今一 RAID Z, RAID Z2 の機能が生かしきれていません。・・で、ディスクの容量増大に伴って、軽いシステムである RAID5, RAID6 を OpenMedia 7 (以後 OMV7) で実現、全面的に移行します。

この記事では、PC2台を連携して 18TB x 6台 (=108TB) + 2台(エラー訂正ディスク) の RAID6 システムを実現します。なお、先に OpenMediaVault7 (OMV7) で作る PC1台 54TB RAID5 システム【Part 1】  【Part 2】を読まれている事を前提にしていますので、既にそちらで説明しているものは、項目だけ 列挙する事があります。

【緊急追加 2024年6月18日】この記事通り進めていけば、OpenMediaVault7 (OMV7) で作る PC2台連携 108TB RAID6 システムができるはずだったのですが ・・・ 再起動すると動作しなくなる不具合が発生しました。 PC2台連携のシステムは OpenMediaVault6 (OMV6) で作る PC2台連携 48TB RAID Z2 システム で実績があり、何の問題もないと考えていたのですが・・・。再起動には手順があり、Slave の電源投入を先にして、その後 Master の電源投入をすると、Master側から Slave の iSCSIディスクが認識され、Masterのディスクと合わせて RAID-6 を実現するのですが、iSCSI ディスクを認識できないです。一時は解決のめどが立たず、この記事も未公開にしていました。Google 先生に教えを請い、一週間の格闘の末、なんとか、めどが立ちました。iSCSIディスク(Slave側) のみの変更追加になります。 【Part 2】で、説明致します。【緊急追加 ここまで】

全体的に読み直すと、所々、意味がなかったり、冗長な所が見受けられますが、一応の動作をしておりますので、当面はこれで進めます。

全体構成・動作説明

全体構成を上図に示します。master 側から見ると Disk 8台の RAID6 システムとして動きます。Disk 8台中、4台は iSCSI ディスクとして slave 側に配置します。それぞれ全体の IP も決まっていますので、記入してあります。平常運転時の master 側の eno1 の帯域を 1Gbps とした時に 他の LANポートの帯域がどれくらい必要か色線で示してあります。eno2 ←→ eno2 の帯域が (1.0 x 8 / 6) x 0.5 = 0.66 ≒ 0.7Gbps となります。slave 側の eno1 はWeb管理画面を読み書きするだけなので、0.1Gbps で良いでしょう。従って平常運転時には帯域的に足らない所はありません。 ( eno1, eno2 は 1Gbpsポート )。ただ、再同期時やシステムチェック時など高速で全体スキャンを行う時には eno2 ←→ eno2 の帯域がボトルネックになります。まあ、PC 2台に分けたコストだとのんびり運用する事にしましょう。

iSCSI ディスク (slave)

それでは、先に Slave 側の iSCSI ディスクを作ります。

鈴木のOMV7 ベースセット から 変更・追加

鈴木のOMV7ベースセットを少し加工していきます。

Kernel 選定 ・操作プラグイン アンインストール

Kernel を Linux 6.8.4-3-pve だけにしようと思ったのですが、プラグイン導入時に amd64系でないと上手く導入できない場合があるみたいです。なので、 Linux 6.8.4-3-pev,   Linux 6.1.0-21 amd64 を残して他のKernelを消去します。で、amd64 を選んでおきます。

iLO IPアドレス変更

ILO の IP アドレスを変更します。ブラウザに  http://192.168.11.40  で直接入って IP 192.168.11.40 → 192.168.11.140 に変更します。変更したら、確認の為 新しい設定で OMV7 を立ち上げて下さい。

ホスト名変更

ネットワーク → 一般 → ホスト名をopenmedia-41 → openmedia-141 に変更

ネットワークインターフェースを変更

ネットワークインターフェースを変更します。ネットワークインターフェースが複数ある場合、インターネットに繋ぐ側のみ ゲートウェイ、DNSサーバーを設定します。もう一方は アドレスとネットマスクのみ設定します。これで、一方はインターネット通信を含むコントロール系、もう一方は機器同士の通信に特化して使う事ができます。

ネットワーク → インターフェース  eno1を以下の様に編集して保存

 IPV4
  メソッド     : スタティック
  アドレス     : 192.168.11.141
  ネットマスク : 255.255.255.0
  ゲートウェイ : 192.168.11.1

 高度な設定
  DNSサーバー  : 192.168.11.1
ネットワーク → インターフェース  eno2を以下の様に編集して保存

 IPV4
  メソッド     : スタティック
  アドレス     : 192.168.12.141
  ネットマスク : 255.255.255.0
  ゲートウェイ : 

 高度な設定
  DNSサーバー  :

一旦 ログオフして 192.168.11.141 でログオンします。

ハードディスク装着 & iSCSI (target) 導入

ハードディスク装着 & DiskInfoS.sh 作成

ここで、一度、Shutdown して、ハードディスクを装着します。再度起動して、Web管理画面を立ち上げます。同時にSSH端末を起動して、 OpenMediaVault7 (OMV7) で作る PC1台 54TB RAID5 システム【Part 1】【Part 2】 のUSBメモリーから   DiskInfo.sh_DiskId.sh をコピーします。_DiskId.sh は 生シリアル番号を書き換えます。DiskInfo.sh も DiskInfoS.sh に作り直して、動作を確認しておきます。

Slave 側の DISK を正面左から DISK4, DISK5, DISK6, DISK7 とします。それに伴って各関数を書き直します。まずは、 _DiskId.sh を直します。実行フラグを忘れずに。

#!/bin/bash

# _DiskId.sh ( Disk by-Id return program )

DISK4=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk4
DISK5=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk5
DISK6=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk6
DISK7=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk7
# シリアル番号は実際から適当に変更してあります。

PATH=/usr/sbin:/usr/bin:/sbin:/bin

if [ $1 = 4 ]; then
    echo $DISK4
    exit 0
fi

if [ $1 = 5 ]; then
    echo $DISK5
    exit 0
fi

if [ $1 = 6 ]; then
    echo $DISK6
    exit 0
fi

if [ $1 = 7 ]; then
    echo $DISK7
    exit 0
fi

echo "/dev/disk/by-id/"

次に DiskInfo.sh → DiskInfoS.sh (Disk-Infomation for Slave) も直します。

#!/bin/bash

# DiskInfoS.sh ( DiskInfoS.sh Disk-Information for Slave program )

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DISK4=$(_DiskId.sh 4)
DISK5=$(_DiskId.sh 5)
DISK6=$(_DiskId.sh 6)
DISK7=$(_DiskId.sh 7)

echo -n "DISK4 : "; echo -n $DISK4; echo -n " → "; readlink $DISK4
    if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK5 : "; echo -n $DISK5; echo -n " → "; readlink $DISK5
    if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK6 : "; echo -n $DISK6; echo -n " → "; readlink $DISK6
    if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK7 : "; echo -n $DISK7; echo -n " → "; readlink $DISK7
    if [ $? != 0 ]; then
    echo ""
fi

以下実行例です。

ストレージをワイプします。クイックで十分です。

ストレージ → ディスク → sda - sde のハードディスク(USBは選ばない事) をワイプ x 4回

iSCSI target プラグイン を導入します。

システム → プラグイン → openmediavault-tgt 7.x 選んでインストール
サービス → tgt → 設定 → Enable → 保存
サービス → tgt → Targets → ⊕(作成)

 名前:disk4 ← [disk4 〜 disk7 対象ディスク判別の為、disk4~7と命名]
 Backing Store:/dev/disk/by-id/[各ディスクのIDを書く] ← DiskInfoS.shからコピペ
 Initiator Adress:192.168.12.41 ← OMV7(Master) のIPを書く
 追加オプション: (なし)

上記の状態で Enable → 保存 すると iqn (=iqn.2024-06.local.openmedia-141:disk4) が作られる。disk4,disk5,disk6,disk7 の順で作る

iSCSI ディスク mdadm 対応 (再起動時 動作不良対策) 【Part2】へ

【緊急追加 2024年6月18日】iSCSI target プラグインの導入は通常これで終わりなのだが、このままでは、大問題が起こる。mdadm (RAID のメインプログラム) でディスクをフォーマット?した場合にiSCSI ディスクにできないのです。( mdadm と iSCSI の相性問題 ) この信じられない問題の解析、解決法は【Part2】でやります。mdadm で iSCSI ディスクを使うにはこの対策が必ず必要です。【緊急追加 ここまで】

StartUptime.sh に Timeout Mismatch 対策 を追加

ここまでで、iSCSI DISK として使えます。最後に仕上げとして StarUptime.sh に Timeout Mismatch 対策を追加します。Timeout Mismatch の説明は何度もしていますので、OpenMediaVault6 (OMV6) で作る PC2台連携 48TB RAID Z2 システム【Part 1】 を参考にして下さい。StarUptime.sh を

#!/bin/bash

# StartUptime.sh ( StartUptime.sh StartUp timing program )

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DISK4=$(_DiskId.sh 4)
DISK5=$(_DiskId.sh 5)
DISK6=$(_DiskId.sh 6)
DISK7=$(_DiskId.sh 7)

LOG=/var/log/installer/StartUptime_log

date > $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK4" >> $LOG
smartctl -l scterc,70,70 $DISK4 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK5" >> $LOG
smartctl -l scterc,70,70 $DISK5 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK6" >> $LOG
smartctl -l scterc,70,70 $DISK6 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK7" >> $LOG
smartctl -l scterc,70,70 $DISK7 >> $LOG

とします。再起動して動作を確かめる前に Kernel を Linux 6.8.4-3-pev に切り替えます。実行結果の StartUptime_log を貼っておきます。

Disk4 〜 Disk7 のセクタエラーリカバリータイムが 7.0 秒に設定されているのが分かります。

RAID6 ディスク 8台 (master)

それでは、次に Master側( = 全体 ) の ディスク8台 の RAID6 システムを作っていきます。

鈴木のOMV7 ベースセット から 変更・追加

iSCSIディスクと同様、鈴木のOMV7ベースセットを少し加工していきます。

Kernel 選定 ・操作プラグイン アンインストール

プラグイン導入時に amd64系でないと上手く導入できない場合があるのは iSCSIディスク同様です。なので、 Linux 6.8.4-3-pev,   Linux 6.1.0-21 amd64 を残して他のKernelを消去します。で、amd64 を選んでおきます。

ネットワークインターフェースを変更

ネットワークインターフェースを変更します。ネットワークインターフェースが複数ある場合、インターネットに繋ぐ側のみ ゲートウェイ、DNSサーバーを設定します。もう一方は アドレスとネットマスクのみ設定します。これで、一方はインターネット通信を含むコントロール系、もう一方は機器同士の通信に特化して使う事ができます。

ネットワーク → インターフェース  eno1を以下の様になっているのを確認 (特にやる事なし)

 IPV4
  メソッド     : スタティック
  アドレス     : 192.168.11.41
  ネットマスク : 255.255.255.0
  ゲートウェイ : 192.168.11.1

 高度な設定
  DNSサーバー  : 192.168.11.1
ネットワーク → インターフェース  eno2を以下の様に編集して保存

 IPV4
  メソッド     : スタティック
  アドレス     : 192.168.12.41
  ネットマスク : 255.255.255.0
  ゲートウェイ : 

 高度な設定
  DNSサーバー  :

RAID 用 md プラグインを導入

ここで、md プラグインを導入しておきます。

システム → プラグイン → openmediavault-md 7.x をインストール
mdプラグイン導入後に、Kernel を Linux 6.8.4-3-pevに切り替えて、おきます。

ハードディスク装着 & open-scsi 導入

ここで、一度、Shutdown して、ハードディスクを装着します。装着ディスクは正面から見て左からDISK0, DISK1, DISK2, DISK3 とします。リストで並べた時も整列するよう、シリアルの若いものから DISK0, DISK1 ・・と装着すると良いでしょう。再度起動して、Web管理画面を立ち上げます。同時にSSH端末を起動して、 OpenMediaVault7 (OMV7) で作る PC1台 54TB RAID5 システム【Part 1】【Part 2】 のUSBメモリーから   DiskInfo.sh_DiskId.sh をコピーします。

Open iSCSI 導入 & 設定

iSCSIと連携する為にOpen iSCSI インストール。SSH端末から

# apt-get install open-iscsi

次に、/etc/iscsi/initiatorname.iscsi ファイルを nano エディタで開き iqn 4個を設定します。設定した内容を cat で表示して置きます。これは iSCSI target プラグインに設定した内容です。

iscsid.service  open-iscsi.serviceを restart して置きます。

# systemctl restart iscsid.service open-iscsi.service

このあと “discovery” して “login” するとiSCSI ディスクがつながりますが 一気に4台、繋いでしまうとディスクが disk4~disk7 の順でマウントされない可能性が大きいです。結果 md0 デバイスを作る際にディスクの順が入れ替わります。順序混乱はメンテナンス時の失敗の元ですので、一個ずつ、順序良くディスクをつないで行きます。192.168.11.141の Web管理画面から入って targetの内 disk4 のみEnable にして disk5,disk6,disk7はEnableを外しておきます。

# iscsiadm -m discovery -t sendtargets -p 192.168.12.141
# iscsiadm -m node --login -p 192.168.12.141

その結果、/dev/disk/by-id の下に sdf ディスクが追加されます。

追加で disk5 を Enable にし、iscsiadm -m discovery…、iscsiadm -m node… を行います。この作業をdisk7まで 都合4回繰り替えします。

結果きれいに scsiディスクが並びました。一方 iqn.2024-06.local ・・・と sdx との関係は /dev/disk/by-path を見れば解ります。

例えば 赤線 iqn.2024-04.local.openmedia-141:disk4  は sdf にリンクが張られています。これらの関係をつかえるように _DiskId.sh を以下に拡張しました。

#!/bin/bash

# _DiskId.sh ( Disk by-Id return program )

DISK0=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk0
DISK1=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk1
DISK2=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk2
DISK3=/dev/disk/by-id/ata-TOSHIBA_MG09ACA18TE_14xxxx_disk3
DISK4=/dev/disk/by-id/scsi-360000000000000000e00000000010001
DISK5=/dev/disk/by-id/scsi-360000000000000000e00000000020001
DISK6=/dev/disk/by-id/scsi-360000000000000000e00000000030001
DISK7=/dev/disk/by-id/scsi-360000000000000000e00000000040001
# disk0~disk3のシリアル番号は実際から適当に変更してあります。

PATH=/usr/sbin:/usr/bin:/sbin:/bin

if [ $1 = 0 ]; then
    echo $DISK0
    exit 0
fi
if [ $1 = 1 ]; then
    echo $DISK1
    exit 0
fi
if [ $1 = 2 ]; then
    echo $DISK2
    exit 0
fi
if [ $1 = 3 ]; then
    echo $DISK3
    exit 0
fi
if [ $1 = 4 ]; then
    echo $DISK4
    exit 0
fi
if [ $1 = 5 ]; then
    echo $DISK5
    exit 0
fi
if [ $1 = 6 ]; then
    echo $DISK6
    exit 0
fi
if [ $1 = 7 ]; then
    echo $DISK7
    exit 0
fi

echo "/dev/disk/by-id/"

DiskInfo.sh → DiskInfoM.sh として DISK4 〜 DISK7 の分を追加しました。

#!/bin/bash

# DiskInfoM.sh ( DiskInfoM.sh Disk-Information for Master program )

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DISK0=$(_DiskId.sh 0)
DISK1=$(_DiskId.sh 1)
DISK2=$(_DiskId.sh 2)
DISK3=$(_DiskId.sh 3)
DISK4=iscsi-iqn.2024-06.local.openmedia-141:disk4
DISK5=iscsi-iqn.2024-06.local.openmedia-141:disk5
DISK6=iscsi-iqn.2024-06.local.openmedia-141:disk6
DISK7=iscsi-iqn.2024-06.local.openmedia-141:disk7

echo ""
echo -n "DISK0 : "; echo -n $DISK0; echo -n " → "; readlink $DISK0
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK1 : "; echo -n $DISK1; echo -n " → "; readlink $DISK1
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK2 : "; echo -n $DISK2; echo -n " → "; readlink $DISK2
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK3 : "; echo -n $DISK3; echo -n " → "; readlink $DISK3
if [ $? != 0 ]; then
    echo ""
fi

echo ""
echo -n "DISK4 : "; echo -n $DISK4; echo -n " → "
                            readlink /dev/disk/by-path/*$DISK4*
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK5 : "; echo -n $DISK5; echo -n " → "
                            readlink /dev/disk/by-path/*$DISK5*
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK6 : "; echo -n $DISK6; echo -n " → "
                            readlink /dev/disk/by-path/*$DISK6*
if [ $? != 0 ]; then
    echo ""
fi
echo -n "DISK7 : "; echo -n $DISK7; echo -n " → "
                            readlink /dev/disk/by-path/*$DISK7*
if [ $? != 0 ]; then
    echo ""
fi

実行すると DISK0 〜 DISK3 と シリアルNo と sdx との関係、DISK4 〜 DISK7 と iqn…と sdx との関係が一目瞭然ですね。

これで、ディスクを入れ替える場合等にも、該当のディスクを間違える事なく交換できると思います。例えば sdf を交換するには、DISK4 を交換すれば良いという事です。

ストレージ 

準備も整いましたので、ここから RAID 6 を構築していきます。まず、各ハードディスクをスワイプします。

ストレージ → Multiple Device ( md0 作成 )

通常のディスクでは sda, sdb … に相当する “multiple devices” md0 を作成します。プラグインで作成する方法も一応、説明しますが、お勧めはコマンド使用の方です。
【プラグイン使用の場合】
ストレージ → Multiple Device → ⊕(作成) → Level RAID 6 を選んで → デバイス選択でディスクを選びます。(この時 sda、sdb、sdc、・・・の順に並んでいる事を確認する) これで md0 が作られます。
cat /proc/mdstat で md0 の構成を見る事ができます。 0番ディスクは sdaに 1番は sdb ・・にと設定通りになっています。(構成後しばらくは resync が動作している、resync 表示は省いてある。resync中も問題なく次の段階に進む事ができる)。この方法だと resync を止める事ができません。本システムでは resync に 10日以上 (10時間ではありません) かかるみたいです。
【コマンド使用の場合】
より繊細な制御ができるので、こちらがお勧めです。コマンドでmd0 を作ってもプラグインで確認できます。DiskInfoM.sh を使うと diskx と sdx の関係がすぐわかります。
この場合は disk0 〜 disk 7 の並びは sda, sdb, sdc, sdd, sdf, sdg, sdh, sdi となるので、以下のコマンドで md0 を作成します。
# mdadm --create --verbose --force --assume-clean --raid-devices=8 --level=raid6 \
  /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sdf /dev/sdg /dev/sdh /dev/sdi

実際の作成、確認の様子です。

resync が動いていないのも確認できます。

再起動時にデバイス名が変更されない対策

再起動時にデバイス名が変わる事が良くあるのでその対策をする。(再起動時には StartUptime.sh 内で 再構築するので、この対策が必要かどうか微妙な所ですが、それでも、md0 → md127 のように名前が変わると デバイス指定が /dev/md0 → /dev/md127 と変える必要があり 再構成時の 命令が複雑になる)

# mdadm --detail --scan

の出力を /etc/mdadm/mdadm.conf の 一番下の行に貼り付けます。同じような mdadm.conf の下から2行目は削除します。その状態で、情報を アップデートします。

# update-initramfs -u

ストレージ → ファイルシステム

この (Multiple Devce) md0 をフォーマットして、システムにマウントするのが “ファイルシステム” の役目ですが、ここでは、md0 のフォーマットはコマンドで行います。
# mkfs -t ext4 /dev/md0
これで、EXT4 で フォーマット済みの md0 ができましたので、これをマウントします。
ストレージ → ファイルシステム → ▶(既存のファイルシステムをマウントします。) でファイルシステム /dev/md0 が選べます。これで、md0 がマウントされます。
 # df でマウント先を見ると /srv/dev-disk-by-uuid-01df1334-7ca2-470f-a653-00193f3eba94 とUUIDから自動生成したらしく、やたら長い、ださい、扱いずらい。この値は当然、UUIDによって異なる事になる。以下UUID毎に異なるので /srv/dev-disk-by-uuid-xxxx と表現するこの後の共有フォルダ設定では、このフォルダ下、共有フォルダが自動で作られる。まあ、Windows から SMB 設定でアクセスするには共有フォルダまでしか見えないので、OMV7 の場合と割り切って、進める事にする。 (後で、扱いやすいフォルダにも再マウントします)

ストレージ → 共有フォルダ

共有フォルダを作っていきます。
 ⊕(作成) → 名前 RAID6-0 とし ファイルシステムは /dev/md0 [EXT4..] を選びます。相対パスは自動で RAID6-0/ となります。
で、 /srv/dev-disk-by-uuid-xxxx 下に RAID6-0 ができているのを確認します。

サービス

SMB( サンバプロトコル ) でWindows からの共有設定をします。

サービス → SMB/CIFS → 設定

サービス → SMB/CIFS → 設定 は 良く分からず WORKGROUP を有効にしました。

サービス → SMB/CIFS → 共有

サービス → SMB/CIFS → ⊕(作成) 共有フォルダを選択 → RAID6-0  ✔ ゴミ箱を有効化

ユーザー

各自 自由に設定して下さい。
ここまでで、Windows から共有できるはずなので、試してみて下さい。

他の Linux System との共有も便利に・・

他のリナックスとのデータ共有を考えた場合、共有フォルダ名が、長かったり、複雑だったりすると扱いずらいので、md0 を分かり易いフォルダ名 /array-0 に再マウントします。
# mkdir /array-0
# mount /dev/md0 /array-0
/array-0 下の共有ホルダ と 従来の /srv/dev-disk-by-uuid-xxxx 下の共有ホルダが同じ事を確認します。
これで、コマンドベース、フルパスでフォルダを指定する場合、短い単純な名前で扱う事ができます。他にマウントポイントを array-1 , array-2 と作っておきます。他の Linux System とデータのやり取りはarray-1, array-2 に nfs で共有フォルダをマウントすると扱いやすいです。

再起動時のRAID環境の再構築 ・・緊急トラブル → 【Part 2】へ

さて、ここまでで RAID 6 環境が出来上がりましたが、再起動時についても設定します。PC2台で連携するには、再起動時に手順どおり進める必要があるのでので、単純な /etc/fstab を用いた再構成をやめて、( =fstab の最終行をコメントアウトして下さい )、StartUptime.sh で再構成を行っています。 以下にソースを示します。
#!/bin/bash

# StartUptime.sh ( StartUptime.sh StartUptime execute program )

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DISK0=$(_DiskId.sh 0)
DISK1=$(_DiskId.sh 1)
DISK2=$(_DiskId.sh 2)
DISK3=$(_DiskId.sh 3)
DISK4=$(_DiskId.sh 4)
DISK5=$(_DiskId.sh 5)
DISK6=$(_DiskId.sh 6)
DISK7=$(_DiskId.sh 7)

LOG=/var/log/installer/StartUptime_log

date > $LOG

echo "" >> $LOG
echo "# systemctl restart iscsid.service open-iscsi.service" >> $LOG
systemctl restart iscsid.service open-iscsi.service >> $LOG

echo "" >> $LOG
echo "# iscsiadm -m discovery -t sendtargets -p 192.168.12.141" >> $LOG
iscsiadm -m discovery -t sendtargets -p 192.168.12.141 >> $LOG

echo "" >> $LOG
echo "# iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk4 -p 192.168.12.141 --login" >> $LOG
iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk4 -p 192.168.12.141 --login >> $LOG

echo "" >> $LOG
echo "# iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk5 -p 192.168.12.141 --login" >> $LOG
iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk5 -p 192.168.12.141 --login >> $LOG

echo "" >> $LOG
echo "# iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk6 -p 192.168.12.141 --login" >> $LOG
iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk6 -p 192.168.12.141 --login >> $LOG

echo "" >> $LOG
echo "# iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk7 -p 192.168.12.141 --login" >> $LOG
iscsiadm -m node -T iqn.2024-06.local.openmedia-141:disk7 -p 192.168.12.141 --login >> $LOG

echo "" >> $LOG
echo "# cat /proc/mdstat" >> $LOG
cat /proc/mdstat >> $LOG

echo "" >> $LOG
echo "# mdadm -S /dev/md0" >> $LOG
mdadm -S /dev/md0 >> $LOG

echo "" >> $LOG
echo "# mdadm -A /dev/md0 \\" >> $LOG
echo " $DISK0 \\" >> $LOG
echo " $DISK1 \\" >> $LOG
echo " $DISK2 \\" >> $LOG
echo " $DISK3 \\" >> $LOG
echo " $DISK4 \\" >> $LOG
echo " $DISK5 \\" >> $LOG
echo " $DISK6 \\" >> $LOG
echo " $DISK7" >> $LOG
mdadm -A /dev/md0 $DISK0 $DISK1 $DISK2 $DISK3 $DISK4 $DISK5 $DISK6 $DISK7 >> $LOG

echo "" >> $LOG
echo "# cat /proc/mdstat" >> $LOG
cat /proc/mdstat >> $LOG
MOUNT01=/srv/dev-disk-by-uuid-xxxx   # 各UUID毎に異なる生成された値をいれる
echo "" >> $LOG
echo "# mount /dev/md0 $MOUNT01" >> $LOG
mount /dev/md0 $MOUNT01 >> $LOG

echo "" >> $LOG
echo "# mount /dev/md0 /array-0" >> $LOG
mount /dev/md0 /array-0 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK0" >> $LOG
smartctl -l scterc,70,70 $DISK0 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK1" >> $LOG
smartctl -l scterc,70,70 $DISK1 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK2" >> $LOG
smartctl -l scterc,70,70 $DISK2 >> $LOG

echo "" >> $LOG
echo "# smartctl -l scterc,70,70 $DISK3" >> $LOG
smartctl -l scterc,70,70 $DISK3 >> $LOG
PC2台で連携するには (1) iSCSI ディスク群Bと通信、4台のブロックデバイスを確立する。(2) Disk8台で再構築 ( =Assemble) する の手順を踏む必要があります。所が mdadm はシステム立ち上がり時から自動で md0 を合成しようとします。 (止め方がわかりません) その為、(1) の前に既に md0 の合成は失敗した状態になっています。 しかたがないので、一旦 stop してリソースを開放してから、再構築しています。あまり美しい方法ではありませんが、まあ動作しているので、良しとしています。StartUptime_log をコメント付きで載せておきますので各行の内容を理解して進めて下さい。
これで、再起動時も RAID 環境の再構築が行われます (但し iSCSI ディスク mdadm 対応 (再起動時 動作不良対策) 【Part2】も実施済み の場合 )
【Part2】 へ続く
タイトルとURLをコピーしました