LoginSignup
13
12

More than 5 years have passed since last update.

NanoPi-NEO2 で USB mass storage → iSCSI Target してみる

Last updated at Posted at 2017-06-21

はじめに

目的とする構成は、以下の通りです。

PC ---(USB)---> NanoPi NEO2 ---(LAN)---> iSCSI Target(NAS)

つまり、PCにNanoPi NEO2 をUSBで繋ぐと、PCからはUSB-HDDとしてアクセスできるようになるが、そのファイル等の保存先が NAS上の iSCSI Target になる。というもの。

上手く使えば TV録画用のUSB-HDDの代替品となるわけです。
その他、RAID等によるデータ保護、データの自動バックアップ、USB-HDDでは実現できない大容量ができたりするわけです。
また、USB-HDDが分散して困っている人向けにもなります(笑

BeagleBoneBlack時代にも同様の実験しましたが、NanoPi-NEO2の GigabitEhter の恩恵がどれほどあるのか?を探るのがメインテーマです。

d390ebac-32b7-7a31-ac20-36d271eae92d.png

左端が主役の子。

必要なもの

ハードウェア

  • PC本体
  • MicroUSB ケーブル1本 (電源供給も兼ねる)
  • NanoPi NEO2 1台
  • LANケーブルとハブ
  • iSCSI Targetに対応しているNAS (実験はSynologyでやってます)

ソフトウェア

セットアップ

1. microSDでBoot

dd か Win32DiskImager-0.9.5-binary などを使用して、MicroSDに起動イメージを書き込み、NEO2に挿し、Bootさせます。

2. カーネルソースのコンパイル

Open-iSCSIのパッケージを使用するのですが、iscsi_tcp.ko が無いためエラーなってしまいます。そのため、カーネル再ビルドが必要となってしまいます。ディストリビューションによっては元々組み込まれていたりします。

下記手順で iSCSI Initiator over TCP/IP をKernel組み込みにして、再ビルドすればOKです。

NanoPi-NEO2
apt-get install libncurses5-dev libncursesw5-dev bc

cd ~
wget http://www.mediafire.com/file/ica7ti6bxmag03o/linux_4.11.2_20170525.tar.gz
tar xf linux_4.11.2_20170525.tar.gz

cd linux
touch .scmversion
make sunxi_arm64_defconfig
make menuconfig
------------------------
Device Drivers --->
    SCSI device support --->
        SCSI low-level drivers -->
            [space] & [enter]

<*> iSCSI Initiator over TCP/IP [space][space]
------------------------
make -j4

mkdir /boot/old
mv /boot/Image /boot/old
mv /boot/*.dtb /boot/old
cp arch/arm64/boot/Image /boot/
cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb /boot/
reboot

NanoPi NEO2上でのLinuxカーネルコンパイルは、1~2時間程度かかりますので気長に待ちます。
 

3. 必要パッケージのインストール

apt-get install open-iscsi

これだけです。

4. iSCSI Initiator の構成

NanoPi-NEO2
iscsiadm -m discovery -t sendtargets -p 192.168.1.9
iscsiadm -m node --targetname "iqn.2000-01.com.synology:nas.target1" --portal "192.168.1.9:3260" --login

※NASのIPアドレス、targetnameはお使いの物を設定します。
※NAS側のiSCSI Target は別途作成が必要です。

成功すると、/dev/sda のブロックデバイスが作成されます。
カーネルビルドしていないと、iscsi_tcp.ko が無いよ。系のエラーになったります。

5. USB-HDD化

/dev/sda が作成されたので、以下のコマンドで、仮想的な USB-HDD を作成する。
これで、PCへ接続するとUSB-HDDとして認識されるようになります。
もちろん、ただのUSB-HDDですので、フォーマットが必要になります(笑

NanoPi-NEO2
modprobe g_mass_storage file=/dev/sda

6. NEO2起動時の自動接続

上記、4,5は再起動すると消えます。

必要に応じて、/etc/rc.local 等で自動起動します。
Networkの活性化のタイミング次第ではエラーになったりしますので、Sleep等で調整必要な場合もあります。

性能測定結果。

BeagleBoneBlack の結果

当時の結果ですが、100MbpsのLANがボトルネックとなり、性能が全然でていません。。。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2012 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    11.471 MB/s
          Sequential Write :     7.710 MB/s
         Random Read 512KB :    10.053 MB/s
        Random Write 512KB :     5.635 MB/s
    Random Read 4KB (QD=1) :     0.637 MB/s [   155.5 IOPS]
   Random Write 4KB (QD=1) :     3.356 MB/s [   819.4 IOPS]
   Random Read 4KB (QD=32) :     0.679 MB/s [   165.8 IOPS]
  Random Write 4KB (QD=32) :     3.062 MB/s [   747.6 IOPS]

  Test : 1000 MB [F: 0.8% (0.1/10.0 GB)] (x1)
  Date : 2014/08/15 0:21:21
    OS : Windows 7 Home Premium Edition SP1 [6.1 Build 7601] (x64)

NanoPi NEO2

1GbpsLANの恩恵は、ちょっとはあるようです。
USB2.0 ボトルネックで 25~30MB/sec 程度を期待していましたが、かなり下回りました。残念。

-----------------------------------------------------------------------
CrystalDiskMark 5.2.1 (C) 2007-2017 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    15.884 MB/s
  Sequential Write (Q= 32,T= 1) :    15.860 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     1.702 MB/s [   415.5 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     8.901 MB/s [  2173.1 IOPS]
         Sequential Read (T= 1) :    15.728 MB/s
        Sequential Write (T= 1) :    15.729 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     3.162 MB/s [   772.0 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     7.581 MB/s [  1850.8 IOPS]

  Test : 1024 MiB [D: 0.0% (0.1/255.9 GiB)] (x1)  [Interval=5 sec]
  Date : 2017/06/07 21:03:16
    OS : Windows 10 Professional [10.0 Build 15063] (x86)

その他

ボトルネック要因の調査のため、ネットワーク側を測定をしてみました。

 iSCSI Target : Synology DS216j (2TB x2, RAID 1)

$ hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:   1094 MB in  2.00 seconds = 546.39 MB/sec
 Timing buffered disk reads: 294 MB in  3.01 seconds =  97.61 MB/sec

# FATでフォーマットした場合
$ dd if=/dev/zero of=/nas/write_bench bs=1M count=4096
4294967295 bytes (4.3 GB, 4.0 GiB) copied, 54.7855 s, 78.4 MB/s

# EXT4 でフォーマットした場合
$ dd if=/dev/zero of=/nas/write_bench bs=1M count=4096
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 45.5653 s, 94.3 MB/s

 iSCSI Target : Synology DS412+ (3TB x4, RAID 6)

# EXT4 でフォーマットした場合
$ dd if=/dev/zero of=/nas/write_bench bs=1M count=4096
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 46.271 s, 92.8 MB/s

# CIFS共有先へのdd (NAS側のファイルシステムは、Ext4)
$ dd if=/dev/zero of=/nas_cifs/write_bench bs=1M count=4096
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 47.475 s, 90.5 MB/s

計測結果としては、GigabitEhter ほぼほぼ出ており、USB回りがネックとの結論になりました。
その替りに、iSCSI等の性能はGigabitEtherの恩恵を受けていますので、MicroSDの代替にはもってこい!ともいえる状況です。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12