OpenMediaVault6 (OMV6) で作る PC2台連携 48TB RAID Z2 システム【Part 1】

Linux Debian Base の OpenMediaVault 6 (以後 OMV6) で PC2台連携のRAID Z2の NASを実現します。今まで OpenMediaVault 5 (以後 OMV5) を使っていました。以前にOMV6 を実験的に使った時は “使いにくいなっ!” と思ったのですが、今回 使ってみて、必要なプラグインが全部揃っている(重要)、RAM Diskが使い易い等々、その改善ぶりに驚きました。PC は ヤフーオークション等で 1~1.5万円程度で落札できる HP Micro Server Gen8 (以後 HP Gen8)を使います。iSCSI ディスクを使ってPC2台連携で RAID Z2 を実現します。(既にRAID Z2 PC + iSCSI PCで実現済み、Disk8個 = Disk4個 + Disk4個 使用、実動中)

Part1 では OpenMediaVault6 (OMV6) で作る PC1台 24TB RAID Z システム【Part 1】,【Part 1】の “鈴木のOMV6 ベースセット” を使用し、PC2台を連携 RAID Z2 システムとしてとしてまとめます

2023年6月現在 駆動中のシステムは….

2023年6月現在、筆者が運用している自作のRAID Z, RAID Z2 システムは OpenMediaVault6 (OMV6) で作る PC2台連携 48TB RAID Z2 システムのみです。現在メインシステムとして 1 セット 検証用として 1 セットの合計2セットを運用しています。これまで、幾つかのシステムを自作しましたが、最終的に、これに落ち着きました。過去に作成したシステムは全て解体しましたので、現在手元にありません。過去システムは、技術ノウハウとして、このシステムに取り込んでいくつもりです。さて、運用していくと細かい不具合は色々見つかりますが、データがしっかり記録できる=システムの信頼性が高い 事が非常に優れていると感じています。応答が遅い等の不満はあるものの、これまでに、記録できない、データ誤認、紛失、応答不能等の致命的エラーはありません。今後、このシステムをベースに運用、拡張、修正 等をする予定です。

全体構成と動作説明

左の図はPC 一台でDISK群 A(4個)+DISK群 B(4個) でRAID Z2 を構成した場合です。説明の都合上DISK群A DISK群B に分けていますが、要するに DISK8個のシステムです。OMV6下で動作する ZFS ソフトで 8個のDISKが制御され RAID を構成致します。その内 DISK B群(4個)を切り離してOMV6(Master) と OMV6(Slave) に分けたのが右の図、作成する構成です。両者は eno2 を通じてIP通信します。OMV6(Slave) 側は 所謂 iSCSI DISK構成です。またOMV6(Master)のeno1とeno2 をブリッジ接続する事によりOMV6(Slave)の管理画面制御信も OMV6(Slave)eno2 → OMV6(Master)eno2 → OMV6(Master) eno1 → ネットワークハブ の経路 で通信できます。つまり、OMV6(Slave)の外部との通信はeno2のみで済みます(iLoは別ですが..)。ブリッジ接続ソフトは Master側のOMV6の機能なので、OMV6(Master)側が動作している時のみOMV6(Slave)側もネットワークハブと通信できます。なお、OMV6(Master), OMV6(Slave)に右図のIPアドレス2個を設定するとして説明 致します。

(1) PC2台連携RAID Z2 外部との入出力(=NASの入出力)は OMV6(Master)側 eno1
(2) PC2台連携RAID Z2 はOMV6(Master) eno2 ←→ OMV6(Slave) eno2 の結線で内部通信する
(3) PC2台連携RAID Z2 のOMV6(Slave) は iSCSI DISK 構成
(4) PC(Master) iLo4, OMV6(Slave) iLo4 は個々にネットワークハブに結線する
メモ 1:スクリプトの名前の付け方】プログラムやシェルスクリプトを自分で作ると便利だが、作った内容やファイル名を忘れてしまう。過去に作ったプログラムやスクリプトが一目でわかると、考え方や動作解析の助けになります。スクリプト名は大文字ではじめ、必ず XxxXxxx.sh と命名、最後を.shにする。変わった命名の特徴を持つ事で、自分が作ったか分かります。また、find / -name *.sh で探せるので検索も簡単になります。

OMV6(Slave)で iSCSI ディスクを構成する。

最初に OpenMediaVault6 (OMV6) で作る PC1台 24TB RAID Z システム【Part 1】,【Part 1】の “鈴木のOMV6 ベースセット” を作成します。

IP アドレス変更

続いて設定を追加していきます。今、Web管理画面を開いていると致します。

ネットワーク → 一般 → ホスト名をopenmediavault → openmedia-131 に変更
ネットワーク → インターフェース eno2を以下の様に編集して保存

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

 高度な設定
  DNSサーバー  : 192.168.11.1

一旦 ログオフしてネットワークハブを eno2 側に結線し直して 192.168.11.131 でログインする。

ネットワーク → インターフェース → eno1 を削除する

Kernel 入れ替え プラグイン 導入

本来プラグインは機能の拡張用ですが、このプラグインはKernelを入れ替えするだけではなく、他の機能の拡張もします。今回は Kernel 入れ替えしか使いませんが、他の機能も見て置くと参考になります。カーネル入れ替えは二段階でやります。最初に Kernel 入れ替え用プラグイン をインストール。次にプラグインを使ってカーネルを入れ替えます。

途中で画面が追加、変更されない場合は、都度ログオフしてログオンすると良い。

システム → プラグイン → openmediavault-kernel x.x.x を選んでインストール
  システム → カーネル → Proxmox(画像) → Install Proxmox kernel x.x (最新)
  システム → カーネル → Proxmox Default を確認して Remove non-Proxmox kernels

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

ここで、一度、Shutdown して、ハードディスクを装着します。再度起動して、Web管理画面にはいります。ストレージをワイプします。クイックで十分です。

ストレージ → ディスク → sda - sde のハードディスク(USBは選ばない事) をワイプ x 4回
サービス → tgt → 設定 → Enable → 保存
サービス → tgt → Targets → ⊕(作成)

 名前:disk1 ← [disk1 〜 disk4 の順につけた 自由に名づけてよい]
 Backing Store:/dev/disk/by-id/[各ディスクのIDを書く]
 Initiator Adress:192.168.11.31 ← OMV6(Master) のIP
 追加オプション: (なし)

上記の状態で Enable保存 すると iqn (=iqn.2023-05.local.openmedia-131:disk1) が作られる。必ず、disk1,disk2,disk3,disk4 の順で4個作る事 (=理由:多分この順でスカジー番号が付くらしいから)

システムアップデート

最後にシステムを最新にして置きます。

システム → アップテート管理 → アップデート → アップデートのインストール
この時点で ダッシュボードでシステム情報を表示したら 6.3.10-2 (Shaitan) になっていました。

Timeout Mismatch 対策をどうするか

ここまでで、iSCSI DISK として使えます。追加としてPowerON時にTimeout Mismatch 対策が必要か調べます。Timeout Mismatch は全面的にこのページを参考にしています。 Timeout Mismatch とは Sector ERR が起きた時のTimeout が Kernel (=Linuxのシステム) のTimeout (=default 30秒) よりも大きい事により、本来 1Sector 分の故障なのをディスクが応答しないと勘違いしてしまう現象、みたいです。通常、スタンドアローンのディスクでエラーが起きた場合は代替手段はないので、ディスクを出来るだけ頑張って読もうとします、実際、何度かトライすればなんとか読める事も多いです。ので、タイムアウトはかなり長く設定されています。他方、RAID5やRAID6 のシステムでは一か所故障でも、他から補完できますし、一か所で長くリトライしているとシステム全体のパフォーマンスが落ちる事につながります。従って、Sector ERR でも そこそこのTimeout で復帰します。この時間が適切に設定されているか( =7.0秒 ) 確認します。これもまず、マニュアルで調べて見ましょう。例えば /dev/sda を調べるには
# smartctl -l scterc /dev/sda    ← ディスクは 他の方法でも指定可能

調べた結果、適切な値 70 (=7.0秒) が設定されている場合は無理に対策する必要はありません。値が Disable 等で設定されていない場合は

# smartctl -l scterc,70,70 /dev/sda    ← ディスクは 他の方法でも指定可能

で、設定できます。上書き設定しても支障はありません。以下、マニュアルで確認、設定した例を添付します。例はディスク1個分ですが、実際は4個のディスク全てに適応します。この例では Disable なので対策した方が良いです。(東芝のNAS用は対策が必要みたいです。比べてシーゲートのNAS用は必要ないみたいです。) さらに電源を切ると今の設定を忘れてしまいます。なので、PowerON時に毎回設定する必要があります。

StartUptime.sh に追加する

StartUptime.sh は PowerON時に 実行するスクリプトです。前述の2項目を追加して自動実行するスクリプトとします。”鈴木のOMV6 ベースセット” から追加の部分を赤で表示します。

#!/bin/bash

PATH1=$PATH
PATH=/usr/sbin:/usr/bin:/sbin:/bin

LOG_SAVE=/var/log/installer/StartUptime_log

date > $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk1のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk1のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk2のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk2のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk3のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk3のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk4のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk4のID]" >> $LOG_SAVE

PATH=$PATH1

実行結果を貼っておきます。

OMV6(Master)で PC2台連携 RAID Z2 を構成する。

今度はOMV6(Master)に取り掛かります。最初に OpenMediaVault6 (OMV6) で作る PC1台 24TB RAID Z システム【Part 1】,【Part 1】の “鈴木のOMV6 ベースセット” を作成します。

eno1,eno2 を ブリッジ接続に変更

続いて設定を追加していきます。eno1, eno2 をブリッジ接続して、スタティックアドレス 192.168.11.31 にします。( 私の体験では、ブリッジ接続に変更する際にトラブルが多発しますので、注意 1 を参考にして下さい。) 手順は色々考えられます。例として、最初に omv-firstaid を使って eno1 をDHCP 接続にして IPアドレスをしらべて DHCP でログインします。まず、

ネットワーク → インターフェース → ⊕(作成) ブリッジ を以下の様に編集して保存

 タイプ : ブリッジ
 インターフェース : eno2
 IPV4
  メソッド     : スタティック
  アドレス     : 192.168.11.31
  ネットマスク : 255.255.255.0
  ゲートウェイ : 192.168.11.1

 高度な設定
  DNSサーバー  : 192.168.11.1

一旦 ログオフしてネットワークハブを eno2 側に結線し直して 192.168.11.31 でログインする。

ネットワーク → インターフェース → eno1 を削除する
ネットワーク → インターフェース → br0 → 編集 → eno1を追加する

一旦 ログオフしてネットワークハブを eno1 側に結線、eno2 を OMV6(Slave) の eno2 に結線 し直して 192.168.11.31 でログインする。同時に OMV6(Slave)も 192.168.11.131でログイン可能か確認する。

【注意 1:ブリッジ接続時のトラブル対策ブリッジ接続作成の際にトラブルに遭遇する確率は高い。Web管理画面表示がおかしくなったり、応答しなくなったりする。そうなるとWeb管理画面では対応できない。最悪は再インストールなのだが、login: 時の画面に戻って omv-firstaid を使ってDHCP接続からやり直せる場合も多い。また、ブリッジ接続作成時の注意としては一気に作ろうとするとトラブル場合が多い。つまり、ブリッジ接続追加、eno1接続追加、スタティクアドレス設定追加、など一つずつ設定して行き、その都度、保存、適用する。つまり、設定の変更を可能な限り少なくするとうまく行く場合が多い。実際、私は10回以上設定をやり直してやっと目的のブリッジ接続を作成できた。

Kernel 入れ替え プラグイン 導入

本来プラグインは機能の拡張用ですが、このプラグインはKernelを入れ替えするだけではなく、他の機能の拡張もします。今回は Kernel 入れ替えしか使いませんが、他の機能も見て置くと参考になります。カーネル入れ替えは二段階でやります。最初に Kernel 入れ替え用プラグイン をインストール。次にプラグインを使ってカーネルを入れ替えます。

途中で画面が追加、変更されない場合は、都度ログオフしてログオンすると良い。

システム → プラグイン → openmediavault-kernel x.x.x を選んでインストール
  システム → カーネル → Proxmox(画像) → Install Proxmox kernel x.x (最新)
  システム → カーネル → Proxmox Default を確認して Remove non-Proxmox kernels

ZFS ストレージ プラグイン 導入

ZFS (RAID Z, RAID Z2 ) 機能を追加します。

システム → プラグイン → openmediavault-zfs x.x.x を選んでインストール

システムアップデート

最後にシステムを最新にして置きます。

システム → アップテート管理 → アップデート → アップデートのインストール
この時点で ダッシュボードでシステム情報を表示したら 6.3.10-2 (Shaitan) になっていました。

PC2台連携 RAID Z2 を構成する

ここから、PC2台連携 RAID Z2 を マニュアルで構成して行きます。

ハードディスク装着 

ここで、一度、Shutdown して、ハードディスクを装着します。再度起動して、Web管理画面にはいります。ストレージをワイプします。クイックで十分です。
ストレージ → ディスク → sda - sde のハードディスク(USBは選ばない事) をワイプ x 4回

Open iSCSI 導入 & 設定

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

# apt-get install open-iscsi

/etc/iscsi/initiatorname.iscsi ファイルを nano エディタで開き iqn 4個を設定します。設定した内容を cat で表示して置きます。

/etc/iscsi/iscsid.conf の58行目を編集して

#node.session.auth.authmethod = CHAPnode.session.auth.authmethod = CHAP    コメント解除

【訂正 & 追加 2023年7月11日その後の検討で上記の58行目の編集はしない方が動作が安定する事が分かりました。つまり、iscsid.conf ファイルはデフォルトのままで編集の必要は有りません。

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

# systemctl restart iscsid.service open-iscsi.service

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

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

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

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

結果きれいに scsiディスクが並びました。

ZFS 設定

次にZFSのプールを作成して、共有ホルダーを作ります。

ストレージ → ZFS → Pools → +(追加) → + Add Poolで作成

 名前               : tank
 プールタイプ    : RAID-Z2
 デバイス      : sda - sdi のHDD が表示されるのですべてチェック
 マウントポイント  : /zfs
 デバイスエイリアス : By ID
 shiftの設定  ashift value : 12
ストレージ → 共有ホルダー → +(作成) 私は以下にした

 名前            : RAIDZ2-1
 ファイルシステム: tank
 相対パス        : RAIDZ2-1/
 パーミッション  : Administrator: R/W, Users: R/W, Others: RO

SSH端末で  /zfs/RAIDZ2-1 が作られている事を確認します。

ユーザー設定

ここは各人自由にユーザーを作って下さい。あとで SMB で Windows側からアクセスしますので、Windows側からアクセスする ユーザーと パスワードも設定して置きましょう。
私は とりあえず Administrator を作りました。(Windows側から Administrator でアクセスする)

SMB設定

Windows側からアクセスする SMBを設定します。
サービス → SMB/CIFS → 設定 → (一番上の)有効にチェック
サービス → SMB/CIFS → 共有 → +(作成)

有効にチェック
 sharaed folder RAIDZ2-1

 必要な機能にチェック default で良いが 私はゴミ箱を有効化した。
ここまでで、Windows から 共有ホルダ  RAIDZ2-1 にアクセスできるはずなので、確かめて下さい。

自動起動 ルーチン作成

実はRAID Z システムはPowrON時に自動起動するルーチンが含まれています。但し、このオリジナルのルーチンはiSCSI等を想定していないので、PowerON時にいきないRAIDの再構成をしようとします。なので、このオリジナルのルーチンは止めて置きます。 ZFS – ArchWiki 3.1 自動起動 によると自動起動デーモンがこれを行っているみたいです。SSH端末でオリジナルの自動起動ルーチンを止めます。
# systemctl disable zfs.target
で、作成する自動起動ルーチンですが、PowerON時に実行する事になりますので、StartUptime.sh にスクリプトを追加する事にします。

Timeout Mismatch 対策

PowerON時にTimeout Mismatch 対策も入れます。Timeout Mismatchの説明は省略致します。

StartUptime.sh に追加

それでは、StartUptime.shに追加して行きます。追加の部分を赤字で示します。
#!/bin/bash

PATH1=$PATH
PATH=/usr/sbin:/usr/bin:/sbin:/bin

LOG_SAVE=/var/log/installer/StartUptime_log

date > $LOG_SAVE

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

echo "" >> $LOG_SAVE
echo "# iscsiadm -m discovery -t sendtargets -p 192.168.11.131" >> $LOG_SAVE
iscsiadm -m discovery -t sendtargets -p 192.168.11.131 >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# iscsiadm -m node --login -p 192.168.11.131" >> $LOG_SAVE
iscsiadm -m node --login -p 192.168.11.131 >> $LOG_SAVE
### -p 192.168.11.131 は無くても良いが、logに他のIPが混在する場合が有るので
### IPを限定する為に付けている。

echo "" >> $LOG_SAVE
echo "# zpool import" >> $LOG_SAVE
zpool import >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# zpool import tank" >> $LOG_SAVE
zpool import tank >> $LOG_SAVE

### これ以降は Timeout Mismatch 対策

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk1のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk1のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk2のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk2のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk3のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk3のID]" >> $LOG_SAVE

echo "" >> $LOG_SAVE
echo "# smartctl -l scterc,70,70 /dev/disk/by-id/[disk4のID]" >> $LOG_SAVE
smartctl -l scterc,70,70 /dev/disk/by-id/[disk4のID]" >> $LOG_SAVE

PATH=$PATH1

実行した結果を貼っておきます。

システムの起動方法

システムの起動方法は、iSCSI DISK 側が先に起動している必要があるので、PC (Slave)側を先に起動してください。多分 30秒程度先にPowerONすれば良いと思います。順番を違えて起動しない場合はPC(Master) のみ再起動すれば、連携します。

ここまでで、iSCSI ディスクを使ってPC2台連携で RAID Z2 を実現しました。

Part2 (メンテナンス、考察編) に続きます。

 

タイトルとURLをコピーしました