QNAP QM2-2P-244Aが認識されなかったので調べてみた


仕事用に使っているQNAP上でVMを動かすことが多くなり、高速化のためSSDを追加することにしました。
残念ながらドライブベイには空きがないので、PCIeスロットに装着する純正オプションであるQM2カードを購入。
SSDを取り付けていざカードを取り付けるもうまく認識されなかったのでいろいろと調べてみたメモ。

結局のところ、QM2カード自体に不具合があったのですが…

# 環境
- QNAP TS-253D (QTS 4.5.3)
- SATA HDD 4TB x 2本
- QNAP QM2-2P-244A (←今回購入して問題のあった物)
- TEAM MP33 SSD TM8FP6001T (1TB NVMe SSD)[^1]

# 先に結論
QM2の初期不良が原因

- QM2カードにモデル名やシリアル番号が書き込まれていなかった。
- シェルからhal_appコマンドで情報を設定することで正しく認識されるようになった。
- TEAMのSSDは互換性リストに載っていないが、問題なく使用できた。

# 解析編
上記の構成でQNAPにQM2を取り付けましたが、認識されません。
QTSで「ストレージ＆スナップショット」を開いてもHDDしか表示されず追加したSSDは出てきません。

しばらくうなった後で、
SSHで接続してデバイスとして認識されているか確認してみようと思い立ちました。

とりあえず`lspci`でカードが認識されているか見てみます。

```
[~] # lspci -k

(略)
03:00.0 Class 0108: 126f:2263 nvme
(ry

```
なんと、SSDは認識されていました。
ちなみにQM2はMicrosemi(IDT)のPCIe スイッチとして認識されているようです。

SSDが見つかったのでnvmeコマンドをたたいてみます。
その前にデバイスノードを確認。

```
[~] # ls /dev/nvme*
/dev/nvme0  /dev/nvme0n1
```
ありますね。

```
[~] # nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     1xxxxxxxxxxxxx9      TEAM TM8FP6001T                          1           1.02  TB /   1.02  TB    512   B +  0 B   S1218A3
```
ありますね…

このあとSSDにパーティションを作成して既存の共有フォルダ(/share配下)にマウントしてみたところ普通に読み書きもできました。[^2]

というわけで、なんとなくQM2もSSDも機能はしていそうですが、
QTS上でQM2が論理的に認識されていないということのようです。

ここでQNAPのサポートに下記のような内容でチケットを上げました。
> QM2を買ったんだけど、認識してくれない。
> でもシェルから確認するとちゃんとSSD自体は認識しているし読み書きもできそう
> QM2自体が壊れているのか調べる方法はないか？

下記のような投稿もあり(全く同じ現象に見える)QM2自体の不良を疑いました。
https://forum.qnap.com/viewtopic.php?t=159071&p=777056

また、この時に資料としてQNAPの「ヘルプデスク」アプリから出力したログを添付しました。
https://www.qnap.com/en/how-to/knowledge-base/article/how-to-download-diagnostic-logs-from-the-helpdesk-app-in-qts

# 解決編
その後約1週間、サポートの方とやり取りをしましたが、あまり芳しくありません。
あきらめかけたところで、上記のログファイルを思い出し眺めてみることにしました。

ログファイルはzipファイルになっていて、かなりの数のログファイルが含まれていますが、
主要なログが1つのHTMLファイルにまとめられておりブラウザで一覧表示できます。
このHTMLを開いて"QM2"でページ検索してみました。

QM2は認識され、ドライバも読み込まれていることが分かりました。

```
[kernel log]
qm2_i2c_init : Find 111d:8061. SDA 11 SCL 7

[lsmod log]
qm2_i2c                16384  2
```
I2Cで制御しているようです。
さらに検索すると、hal_appというQNAPのハードウエアを制御するコマンドの結果が見つかりました。
以下はQNAP本体のデバイスを列挙するコマンドの結果のようです。

```
[hal_app --se_enum]
========================================================================================================
enc_id enc_parent_sys_id enc_sys_id wwn vendor model status protocol disk_no fan_no cpu_fan_no temp_no gpio_no
0	root	root		QNAP	TS-253D	0	0	2	1	0	0	0	2	0
========================================================================================================
========================================================================================================
enc_id enc_parent_sys_id enc_sys_id wwn vendor model status protocol disk_no fan_no cpu_fan_no temp_no gpio_no
32	root	root_boot		QNAP	BOOT	0	-1	1	0	0	0	0	0	0
========================================================================================================
========================================================================================================
enc_id enc_parent_sys_id enc_sys_id wwn vendor model status protocol disk_no fan_no cpu_fan_no temp_no gpio_no
33	root	root_usb		QNAP	USB	0	2	7	0	0	0	0	0	0
========================================================================================================
========================================================================================================
enc_id enc_parent_sys_id enc_sys_id wwn vendor model status protocol disk_no fan_no cpu_fan_no temp_no gpio_no
34	root	qm2_1_-1.32				0	9	0	0	0	0	0	0	0
========================================================================================================
```
一番下に`qm2_1_-1.32`というIDのものがありますが、よく見るとベンダーやモデル名が表示されていません。
`qm2_1_-1.32`でググってみるとQNAPのフォーラムの投稿がヒットします。
https://forum.qnap.com/viewtopic.php?t=153367&p=778822

SATA接続のQM2-2S-220Aに関する投稿ですが、似たような症状だなぁと思い読み進めていきます。
結果として、最後の投稿が今回の問題の解決策になりました。

投稿内容は今回のケースと同じように認識されないことをサポートデスクとやり取りしたところDeveloper向けのマニュアルが送られてきたというものでした。

投稿主とは環境等が少し違うのですが、読み解くと、おそらくQM2カードにモデル名やシリアル番号が書き込まれていない状態であることが原因のようです。(つまり不良品ということ？)
たしかにQTSでの認識にhal_app経由で取得したモデル名やシリアル番号をもとに処理していると考えればこれまでの挙動(=Linux上ではカーネルドライバは読み込まれているのでちゃんと動く)も納得がいきます。

というわけで、フォーラムの投稿内容に従ってモデル名とシリアル番号を設定してみます。

```
SSHで接続してadminでログイン後下記の手順を行う

[~] # hal_app --se_sys_scan
ENCLOSURE_SCAN *********************************
enc_sys_id[0] = root
enc_sys_id[1] = root_boot
enc_sys_id[2] = root_usb
enc_sys_id[3] = qm2_1_-1.32
ENCLOSURE_SCAN END*****************************

"-1” はモデル名が設定されていないことを意味している
フォーラムでは QM2-2S-220Aだったのでモデル名として"QM2-2S"を設定しているが、
今回はQM2-2P-244Aなので"QM2-2P"で設定してみる

[~] # hal_app --se_sys_set_nickname enc_sys_id=qm2_1_-1.32,value=QM2-2P

さらに、QM2カードに張り付けられたシールに書かれたシリアル番号を設定する
hal_app --se_sys_set_board_sn enc_sys_id=qm2_1_-1.32,value=Q2xxxxxxxx

再度scanを行うと…
[~] # hal_app --se_sys_scan
ENCLOSURE_SCAN *********************************
enc_sys_id[0] = root
enc_sys_id[1] = root_boot
enc_sys_id[2] = root_usb
enc_sys_id[3] = qm2_1_1.32
ENCLOSURE_SCAN END******************************

"-1"だった部分が"1"になりました
下記のコマンドでモデル名とシリアル番号が設定されていることを確認します

[~] # hal_app --se_sys_get_nickname enc_sys_id=qm2_1_1.32
enc_sys_id = qm2_1_1.32, get nickname = QM2-2P
[~] # hal_app --se_sys_get_board_sn enc_sys_id=qm2_1_1.32
enc_sys_id = qm2_1_1.32, ret = 0,HW SN = Q2xxxxxxxx
```

なんかいけそうな感じがするのでQNAPを再起動します。

再起動には時間がかかるのでじっと観察します。
すると、これまで点灯はしていましたが、点滅することのなかったQM2カードのアクセスランプLEDが点滅するではありませんか。
起動完了後、期待を胸にブラウザからQTSにログインすると無事認識されていました!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96852/fc3aae67-4753-2d4e-4d72-ae476ec629b2.png)

やりました。

# まとめ
長くなりましたが、以上が顛末です。
結局のところQM2の不具合(初期不良)だったようです。
SSD自体も互換性リストにないものですが、その後特に問題なく動作しています。
先のフォーラムにもあるように、ハズレ品があるのかもしれません。

実はこのカードはAmazon.com(USのサイト)で購入したものでした。
なので、初期不良として処理するのも面倒だったので自己解決を目指したわけですが、
そういう意味では高くても国内代理店から買う方がよいのかもしれません。(そこは各自のスタンスだと思います)
ちなみにAmazon USだと89USDくらいで買えました。日本で買うと安くても倍くらいします。

それからQNAPのサポートは最初の応答まで2日ほど、その後は1日に1～2回のやり取りでした。
ただ、今回はSSDがサポート対象外だったこともあり、「よくわかりませんねぇ」って感じの対応でした。
QM2単体(SSDを装着しない状態)でQM2が正常に動作しているか確認する方法を聞いてみましたが期待するような回答は得らませんでした。

正常に認識されると下記の画像のように[コントロールパネル]-[システムステータス]-[ハードウエア情報]にQM2の情報が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96852/629c69b1-b973-6deb-9bde-0f8b687008f3.png)


[^1]: SSDはQNAPの互換性リストには掲載されていませんでしたが私の環境では使用できました。
[^2]: 通常、サードパーティ製のPCIe-NVMeアダプタを使った場合ファイルストレージとしては使用できませんが、これを応用すればQM2以外のアダプタ(Amazonで1000円未満で買える)を使ってもファイル保存用に使えちゃいますね。動作保証されないしOSの更新時にfstabとかも書き換えられてしまうかもしれませんが…。