Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@tadakado

QNAPのPCIeに一般のカードが挿せないので何とかする (How to install my PCIe card in QNAP)

はじめに

PCIeが搭載されているQNAP NASの多く(おそらくエンタープライズ向けでないもの)は、PCIeのブラケットが特殊なものになっていて、ロープロファイル フラット ブラケットと読ばれている。そのため、普通のPCIeカードが挿さらない。(以下のような背面の場合) これによって、省スペースのNASが実現しているのだが。。。

ハードウェア

ロープロファイル ブラケットのL字のところが曲げてない規格になっている。ロープロファイル ブラケットのL字を加工修正するのは大変なので、代わりにフルサイズ ブラケットを以下のように加工すると、何とかなる。斜めのカットは必須では無いが、カードを挿しやすくなるかも。右の写真は実際のQNAPの製品のブラケット。[ ]内は必要な工具。
1. 下側を5mm(PCIeのスペック的には4.05mm)カットする[金ノコ]
2. 筐体に合わせて上側のカットする場所を決めてカットする(だいたい90mmぐらいになるように)[金ノコ]
3. 筐体に合わせてM3のねじ穴を切る[ドリル、ハンドタップ]
Lowprofile_Flat_Bracket.png

ソフトウェア

QNAP上でのカーネルモジュールのコンパイル

一つ目は、PCIeカードを直接、QNAP上で使用する場合。
目的のPCIeカードのカーネルモジュールが存在しない場合には、コンパイル環境を整備してモジュールを作成する必要あり。
1. パッケージ管理ソフトのインストール
https://github.com/Entware/Entware/wiki/Install-on-QNAP-NAS を参考に
http://bin.entware.net/other/Entware_1.00std.qpkg をインストール
2. 以下を実行して、必要なものをインストール
(例)
PATH=/opt/bin:$PATH
opkg install pciutils
opkg install gcc
opkg install diffutils patch
opkg install git git-http
3. カーネルモジュールをコンパイル
https://sourceforge.net/projects/qosgpl/ からファイルをダウンロードしたりする。詳細はググって他で探して。
4. カーネルモジュールをロードするスクリプトを書いて、自動実行の機能により起動時にロードする
https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup

仮想マシンへのPCI passthrough

二つ目は、PCIeカードを仮想マシンで使用する場合。
QNAP上の仮想マシンへ、PCIeカードのアクセスを許可してやる。

lspci
...
07:00.0 XXXX controller: ...

と出たら、この番号(07, 00, 0)をメモして、

ls /QVS/usr/etc/libvirt/qemu
...
01234567-89ab-cdef-0123-456789abcdef.xml

目的の仮想マシンのID(上の例では、01234567-89ab-cdef-0123-456789abcdef)を取得し、

/QVS/usr/bin/virsh edit 01234567-89ab-cdef-0123-456789abcdef

で、仮想マシンの設定を変更する。具体的には、以下の内容を<devices>の中に追加する。

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
      </source>
    </hostdev>

残念な事にこの方法は、ファームウェアのアップデートで設定が消えてしまうので、必要に応じで再実行しやすい様にシェルスクリプトを作成する。まず、上記の内容<hostdev>...</hostdev>をファイル(pci_device.xml)にし、以下のシェルスクリプトを作成する。

#!/bin/bash
DOMAIN=01234567-89ab-cdef-0123-456789abcdef
/QVS/usr/bin/virsh attach-device $DOMAIN --file pci_device.xml --config
/QVS/usr/bin/virsh reboot $DOMAIN

感想

金属板削ったり、自作PC以上に自作感が味わえる。やるなQNAP。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?