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 は個々にネットワークハブに結線する
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個作る事 (=理由:多分この順でスカジー番号が付くらしいから)
システムアップデート
最後にシステムを最新にして置きます。
システム → アップテート管理 → アップデート → アップデートのインストール
Timeout Mismatch 対策をどうするか
# 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でログイン可能か確認する。
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 を選んでインストール
システムアップデート
最後にシステムを最新にして置きます。
システム → アップテート管理 → アップデート → アップデートのインストール
PC2台連携 RAID Z2 を構成する
ここから、PC2台連携 RAID Z2 を マニュアルで構成して行きます。
ハードディスク装着
ストレージ → ディスク → 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 = CHAP
↓
node.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設定
サービス → SMB/CIFS → 設定 → (一番上の)有効にチェック
サービス → SMB/CIFS → 共有 → +(作成) 有効にチェック sharaed folder RAIDZ2-1 必要な機能にチェック default で良いが 私はゴミ箱を有効化した。
自動起動 ルーチン作成
# systemctl disable zfs.target
Timeout Mismatch 対策
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 (メンテナンス、考察編) に続きます。