Errpr: topology
Disks have duplicate serial numbers: None (sda,sdb,sdc,sdd,sde)
+View Stack Trace
25.10 の Nightly をいじっていたら5月の頭ぐらいから、シリアルナンバーが同一のディスクでPoolを作成しようとすると怒られるようになった。
(TrueNAS CORE 13.0-U6.7 の Pool Manager)
以前はシリアルナンバーの重複を無視して強行するオプション(Show disks with no-unique serial numbers)があったけど、TrueNAS SCALE ではフツーに構成できていました。
Andrew Walker
2025年5月6日 10:35
(edited)
Virtual hard drives should not be used for truenas data pools. This is covered in our hardware and installation guides. In this situation the only supported configuration is passthrough of whole drives or an HBA.
仮想ハードドライブは、Truenas データプールに使用しないでください。これはハードウェアおよびインストールガイドで説明されています。この場合、サポートされる唯一の構成は、ドライブ全体のパススルーかHBAです。
「仮想環境で仮想ディスクのPoolは非推奨です」
ってことで実験環境や検証目的の操作は容認しない感じ。
まあ確かに本運用だったらシステムだけPVE上でデータディスクはディスク全体をパススルーして使うのがいいと思うけど。
しょうがないので手動でコマンドを使ってPoolを作成する。
いつもインストール後に、仮想ハードディスクを4台追加してRAIDZ2構成にするのでそういう設定で、lz4圧縮と暗号化を有効にしてみる。
インストールが完了しただけのTrueNAS SCALE で
System > Shell
に
openssl rand -hex 32 > /home/truenas_admin/tank.key chmod 600 /home/truenas_admin/tank.key chown truenas_admin:truenas_admin /home/truenas_admin/tank.key
として暗号化キーのファイルを生成する。
Shell 画面への貼り付けは [Shift] + [Insert]
ついで、
cat -A /home/truenas_admin/tank.key
として鍵内容を表示する。
この文字列を最後の$を除いてコピーする。
[Ctrl]+[Insert]でコピーできる。
sudo zpool create \ -O encryption=on \ -O keyformat=hex \ -O keylocation=file:///home/truenas_admin/tank.key \ tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
と実行して暗号化されたRAIDZ2プールを作成する。
(\ は前の行に続けて入力する。圧縮のオプション忘れているのに後で気づいた)
ちょっと表示が変だけど、sudo なので
truenas_admin
のパスワードを入力する。
cannot mount '/tank' : failed to create mount point : Read-only file system
とか表示されてるけどこの段階ではこれでOK。
TrueNAS SCALE を再起動する。
その間に先ほどコピった32文字を json ファイルに保存する。
既存の TrueNAS SCALE からダウンロードして、
{"tank": "3bb63f4b3b5a01a8a3ee8c03e363b1cb0c2b1e4280fdf3f9cc1f3038ffe71ecb"}
プール名 32文字(末尾の$は不要)
という形式で拡張子 .json のテキストファイルとして保存する。
サンプル:dataset_tank_key.json
(TrueNAS SCALE の実機からダウンロードして上の暗号化キーを入力しているので、各自で書き換えて使ってください)
再起動したら、
Storage > Import Pool
プルダウンに変な文字列のプールが見えるので選択して、
「Import」
Unlock Pool
暗号化されているPoolなので
「Continue」
Choose File から先ほど用意した .json ファイルを選択。
「Save」
うまくいくと
Unlock Datasets
「Continue」
「Close」
Datasets にプールが表示されるようになります。
これで見た目は暗合化されたRAIDZ2のプールがGUIで触れるようになりました。
もちろん、同一のPVEのSSDから切り出した仮想ハードディスクを何個どう束ねようと冗長性は全くないのであくまで検証・練習用。
とはいえディスクの出し入れの操作とかはやっぱりできないので、あまり役に立たないかな。
なおPoolを作成するコマンドの例
なんかChatGPTに訊いたらオススメオプションとかいって
-O compression=lz4 (lz4 圧縮を有効)\ -O acltype=posixacl (POSIX準拠のアクセス制御リスト(ACL) を有効)\ -O xattr=sa (拡張属性(xattr)を「System Attributes(SA)」としてZFSメタデータ領域に内包)
を追加してきた。
(もう面倒臭くなってきたので未検証。下記のコマンドのサンプルには含まれてる)
もちろんそれぞれに必要な台数の仮想ハードディスクは追加してから実行する。
2台で MIrror
sudo zpool create \ -O encryption=on \ -O keyformat=hex \ -O keylocation=file:///home/truenas_admin/tank.key \ -O compression=lz4 \ -O acltype=posixacl \ -O xattr=sa \ tank mirror /dev/sdb /dev/sdc
3台で Raidz1
sudo zpool create \ -O encryption=on \ -O keyformat=hex \ -O keylocation=file:///home/truenas_admin/tank.key \ -O compression=lz4 \ -O acltype=posixacl \ -O xattr=sa \ tank raidz /dev/sdb /dev/sdc /dev/sdd
4台で Raidz2
sudo zpool create \ -O encryption=on \ -O keyformat=hex \ -O keylocation=file:///home/truenas_admin/tank.key \ -O compression=lz4 \ -O acltype=posixacl \ -O xattr=sa \ tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
5台で Raidz3
sudo zpool create \ -O encryption=on \ -O keyformat=hex \ -O keylocation=file:///home/truenas_admin/tank.key \ -O compression=lz4 \ -O acltype=posixacl \ -O xattr=sa \ tank raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf