西川和久の不定期コラム

「Raspberry Pi 4 Model B / 4GB」Part2

~実践編。openmediavaultでNAS化に挑戦! そしてDockerで遊ぶ

製品写真

 Part1ではRaspberry Pi 4 Model Bのご紹介と簡単な確認/ベンチマークテストなどを行なったが、Part2では実践編として、パワーアップしたUSBとネットワークを使ってNASを構築してみたい。

Part1での積み残し、USB 3.0接続のストレージをベンチマークテスト

 Part1はプロセッサとネットワークに関してベンチマークテストを行なったが、USB 3.0へストレージを接続してのベンチマークテストは手持ちの機材の関係で試していなかった。

 入稿後、「たしか昔USB 3.0対応のケース使ってたなぁ……」と、押入れを探したところ、古いノートPCの3.5インチ500GB HDD、およびIntelの初期型SSDが出てきたので、今回はこれを使用することにした。もちろんUSBケーブルも3.0対応のものだ。

 最新鋭の機材ではないが、お試しで古い機材を引っ張り出すのもありだろう。確認して本格的に使うなら新品を用意し組み直せばよい。

 なお、以降の解説は、Raspbian Buster with desktopをインストール、sshの設定などPart1での処理は終えていることを想定している。

昔Mac用にFireWire800/IEEE1394bで使っていたUSB 3.0対応のHDDケースをRaspberry Piへ接続

 まずストレージのベンチマークテスト前に、基本設定としてフォーマット、マウント、動作確認を行なう。手順は以下のとおり。入力が要求される場所は基本Default([Enter])でよい。

パーティション作成

$ sudo fdisk /dev/sda

Command (m for help): p ※パーティション確認(既に1度フォーマットしている)
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Ext Hard Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 00002576-1990-0000-1A49-00003C2E0000

Device     Start       End   Sectors   Size Type
/dev/sda1   2048 976773134 976771087 465.8G Linux filesystem

Command (m for help): d ※パーティション削除
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n ※パーティション作成
Partition number (1-128, default 1):
First sector (34-976773134, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-976773134, default 976773134):

Created a new partition 1 of type 'Linux filesystem' and of size 465.8 GiB.
Partition #1 contains a ext4 signature. ※一度フォーマットしているため

Do you want to remove the signature? [Y]es/[N]o: y

The signature will be removed by a write command.

Command (m for help): p ※パーティション再度確認
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Ext Hard Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 00002576-1990-0000-1A49-00003C2E0000

Device     Start       End   Sectors   Size Type
/dev/sda1   2048 976773134 976771087 465.8G Linux filesystem

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help): w ※保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

ext4でフォーマット

$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 122096385 4k blocks and 30531584 inodes
Filesystem UUID: 8ab76e87-5756-4e65-82c9-43d8ea7463e2
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done

マウントポイント作成/マウント/確認

$ sudo mkdir /mnt/hdd
$ sudo mount /dev/sda1 /mnt/hdd
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15075480 3220824  11191000  23% /
devtmpfs         1867796       0   1867796   0% /dev
tmpfs            1999892       0   1999892   0% /dev/shm
tmpfs            1999892    8644   1991248   1% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs            1999892       0   1999892   0% /sys/fs/cgroup
/dev/mmcblk0p1    258095   53782    204314  21% /boot
tmpfs             399976       0    399976   0% /run/user/1000
/dev/sda1      479669932   73756 455160516   1% /mnt/hdd ※追加されている

簡単なベンチマークテスト

 簡単なベンチマークテストとしてhdparmコマンドを使用した。もともとこのコマンドは、ストレージのパラメータを設定/取得するものだが、-Tオプション(キャッシュ読み込み)/-tオプション(デバイス読み込み)を指定すればシーケンシャルリードの速度を測定できる。標準では入っていないため、apt-getでインストールする。

$ sudo apt-get install hdparm
$ sudo hdparm -tT /dev/sda1

/dev/sda1:

※3.5インチHDDの場合の転送速度

 Timing cached reads:   1856 MB in  2.00 seconds = 928.28 MB/sec
 Timing buffered disk reads: 216 MB in  3.03 seconds =  71.35 MB/sec

※Intelの初期型SSDの場合の転送速度

 Timing cached reads:   2042 MB in  2.00 seconds = 1022.43 MB/sec
 Timing buffered disk reads: 764 MB in  3.00 seconds = 254.40 MB/sec

 結果は、HDDがキャッシュ読み込み速度928.28MB/s、デバイス読み込み速度71.35MB/s。SSDがキャッシュ読み込み速度が1,022.43MB/s、デバイス読み込み速度で254.4MB/sだった。ちなみに各値は、前者はキャッシュありなので、実際の速度は後者だ。

 いずれも古いストレージということもあり速度は望めないものの、それでもUSB 2.0の限界は越えているため、USB 3.0で作動しているのは間違いない。

openmediavaultのインストール

 USB 3.0にストレージを接続できたところで、USB 3.0+Gigabit Ethernetという、ほかのRaspberry Piシリーズにはない性能を持つRaspberry Pi 4 Model Bの用途として、NASを構築してみたい。

 NASといっても、ファイルの共有だけならSMB/CIFSを設定すれば終わりなのだが、それではおもしろくないため、「openmediavault」をインストールしてみることにした。

 openmediavaultはオープンソースのNAS化ソフトウェアで、特徴としてはDebianベース、WebベースのUI、SSH、FTP、TFTP、NFS (v3/v4)、SMB/CIFS、RSyncといったサービス、Software RAID、clamav、ldapなどのプラグインに対応している。

 インストール方法はいろいろあるのだが、どうもRaspberry Pi 4 Model Bにopenmediavault 5(最新版)を入れるには、Part1で起動したRaspbian Buster(with desktop)に追加するのが一番良さそうで、ここのスクリプトを使うのがもっとも簡単。手順は以下のとおり。

$ cd /opt
$ wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
$ sudo reboot

 30分近くかかるが、たったこれだけで構築はできる。再起動したら、WebブラウザでGigabit Ethernet側(eth0)もしくはWi-Fi側(wlan0)のIPアドレスを使って、Webブラウザで「http://作動中のIPアドレス」を叩くと、ログイン画面が現れる。ちなみにユーザ名はadmin、パスワードはopenmediavaultが初期値となっている。

 余談になるが、ブラウザは先日リリースされたばかりのChromiumベースのEdgeを使用した(Chromiumベースになった新「Microsoft Edge」が配信開始)。Chromeと互換性があり、動きも軽く、なかなかいい感じに仕上がっている。Windows版はもちろんmacOS版、Windows ARM 64bitネイティブ、後日配信予定のLinux版など、一式揃っているのも見逃せないポイントだ。

 話をもとに戻そう。セットアップの手順を画面キャプチャしたが、ログイン、ネットワーク、SMB/CIFS、ストレージをマウント、共有フォルダ、ユーザーの設定を行なえば、WindowsやmacOSでネットワークドライブとして見える。GUIでの操作なので簡単だ。

ログイン画面(admin / openmediavault)
診断 > ダッシュボード
システム > ネットワーク > イーサネット接続を追加(eth0 / DHCP)
システム > ネットワーク。eth0が追加された
サービス > SMB/CIFS 。一般設定で有効へ
ストレージ > ファイルシステム。/dev/sda1を追加
サービス > SMB/CIFS > 共有フォルダの追加
サービス > SMB/CIFS > 共有。raspberryが追加された
Windowsから接続。この時、アクセス権の管理 > ユーザーで設定しているユーザー / パスワードを使用
CrystalDiskMarkの結果。対象ファイルサイズを64MiBと小さくしているので、キャッシュが効いてシーケンシャルリード/ライトに関してはGigabit Ethernetの最大値が出ている

 以上のように、SMB/CIFSでフォルダ共有するだけなら非常に簡単にできることがおわかりいただけると思う。本格的に運用するのであれば、ケースに入れ、2つあるUSB 3.0へHDD/SSDを接続、ミラー(RAID1)にするのがいいだろう。

 1つトラブったのは、sshがpi / 設定したパスワードで入れなくなったこと。これはユーザー > 編集でグループにsshを加えれば、元通りsshでログインできるようになる。

openmediavault上でDocker / Portainerを使って遊ぶ

 NAS化が思ったより簡単だったので、少しほかのことでも遊んでみたい。openmediavaultのメニューには、OMV-Extrasという項目がある(ちなみにOMVとはopenmediavaultの略)。これを見ると[Dockerのインストール]ボタンがある。

 このOMV-Extrasではサービスなどを追加できるのだが、以前のバージョン4.x系は、たとえばMySQLなどをプラグイン形式でダイレクトにシステムへインストールしていた。しかし5.x系では多くをDockerで代用するように変わっている。

 システムへ入れると、いろいろゴチャゴチャになってしまい、NASとは無関係な部分でトラブってシステムが停止するパターンなどを防ぐためだろう。

 早速[Dockerのインストール]ボタンを押し、Dockerをインストール。終了後、Web UIでDockerを操作できる「Portainer」もインストールする。どちらもワンクリックで完全にオートだ。

 インストール後、http://割り当てられたIPアドレス:9000で、Portainerのログイン画面となる。初期起動時、適当なユーザー名 / パスワードを設定しログイン、endpointの指定が4択になっているので「Local / Manage the local Docker environment」を選ぶとHome画面を表示、localでDockerが動いているのでクリックするとDashboardが現れる。

OMV-Extras > DockerとPortainerがインストール済
PortainerのHome。localでDockerが作動中
Dashboard
App Templates

 App Templatesをながめると、Nginx、Httpd(Apache)、MySQL/MariaDB、Wordpressなど、楽しそうなものがいっぱいだ。

 ここでは動きが分かりやすいHttpdを入れてみる。参考までにopenmediavaultのWeb UIは、Nginx 1.14.2+PHP 7.3.11が使われており、Apacheは入っていない。

 ポイントとして、ApacheはDefaultで80/tcpだが、openmediavaultと被っているため、host 8080→container 80/tcpへ変更し再Deployする。これでhttp://割り当てられたIPアドレス:8080でApacheのhtdocs/index.htmlが表示される。

Httpdを選んでName(apache)を入力し[Deploy the container]
Container listにapacheが追加された
apache詳細
Consoleも開く。htdocs/index.htmlには

It works!

Defaultでは80/tcpになっておりopenmediavaultが開いてしまうためhost 8080→container 80/tcpへ変更し再Deploy
apacheの作動確認。index.htmlにあった「It works!」が表示されている

 次に、App Templatesにはないubuntu、つまりOSそのものを入れてみた。手順はContainer > [+add container]で、Nameは適当(ubuntu)、Imageにubuntuを指定し、[Deploy the container]を実行すればOKだ。

 こうしておけば、フルのubuntuを、システム側を汚さずいろいろ遊ぶことができ、不要になったり、グチャグチャになったらContainerを削除して再度Deployすればよくなる。

Nameは適当(ubuntu)、Imageにubuntuを指定、[Deploy the container]を実行
Consoleでapt-get update、apt-get upgrade中。最小限しか入ってないので、必要なものはapt-get installする

 ただ、今の状態ではmicroSDカードにシステムが乗っていることもあり、時々引っかかるような動きをする。USBからSSDでブートできればいいのだが、どうもまだPi 4ではUSBブートができないようなので、microSDカードでブート(Bootloaderと/boot)し、/にSSDを割り当てたほうが良さそうだ。

 この辺りは興味のある人は検索しながら試して欲しい。

OSを64bitのubuntu serverにしてUnixBenxh再測定

 最後にPart1で掲載したUnixBenchであるが、OS、Raspbian Busterが32bitで“Machine armv7l (unknown)”と、32bitでの結果だった。そこで今回は64bitに対応しているubuntu serverを使って再測定してみた。

 当初、技適対応4GBモデルではRevision/Modelが初期モデルと異なるため、うまく動かなかったようだが、執筆時点では修正されており、imgファイルをmicroSDカードへ焼くだけで問題なく起動する。

 今度は“aarch64 (aarch64)”となり64bitだ。結果は32bit vs 64bitで、1 parallel copy of tests 324.7:313.2、4 parallel copies of tests 864.1: 864.4とほぼ同じだった。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ubuntu: GNU/Linux
   OS: GNU/Linux -- 5.3.0-1014-raspi2 -- #16-Ubuntu SMP Tue Nov 26 11:18:23 UTC 2019
   Machine: aarch64 (aarch64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   22:33:14 up 30 min,  2 users,  load average: 1.30, 2.33, 2.30; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Sat Jan 18 2020 22:33:14 - 23:02:59
0 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       14106745.3 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2632.4 MWIPS (10.0 s, 7 samples)
Execl Throughput                                697.9 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        115292.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           33559.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        313528.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                              199883.0 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  44130.9 lps   (10.0 s, 7 samples)
Process Creation                               2100.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2719.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    789.5 lpm   (60.0 s, 2 samples)
System Call Overhead                         178968.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   14106745.3   1208.8
Double-Precision Whetstone                       55.0       2632.4    478.6
Execl Throughput                                 43.0        697.9    162.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     115292.6    291.1
File Copy 256 bufsize 500 maxblocks            1655.0      33559.3    202.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     313528.5    540.6
Pipe Throughput                               12440.0     199883.0    160.7
Pipe-based Context Switching                   4000.0      44130.9    110.3
Process Creation                                126.0       2100.8    166.7
Shell Scripts (1 concurrent)                     42.4       2719.3    641.3
Shell Scripts (8 concurrent)                      6.0        789.5   1315.8
System Call Overhead                          15000.0     178968.2    119.3
                                                                   ========
System Benchmarks Index Score                                         313.2


========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ubuntu: GNU/Linux
   OS: GNU/Linux -- 5.3.0-1014-raspi2 -- #16-Ubuntu SMP Tue Nov 26 11:18:23 UTC 2019
   Machine: aarch64 (aarch64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   23:12:34 up  1:09,  1 user,  load average: 0.00, 0.60, 1.27; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Sat Jan 18 2020 23:12:34 - 23:42:13
0 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       56167560.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    10529.8 MWIPS (10.0 s, 7 samples)
Execl Throughput                               2328.4 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        237094.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           64025.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        526706.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              800214.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 159759.9 lps   (10.0 s, 7 samples)
Process Creation                               8214.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6357.8 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    848.6 lpm   (60.5 s, 2 samples)
System Call Overhead                         700105.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   56167560.6   4813.0
Double-Precision Whetstone                       55.0      10529.8   1914.5
Execl Throughput                                 43.0       2328.4    541.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     237094.4    598.7
File Copy 256 bufsize 500 maxblocks            1655.0      64025.5    386.9
File Copy 4096 bufsize 8000 maxblocks          5800.0     526706.2    908.1
Pipe Throughput                               12440.0     800214.1    643.3
Pipe-based Context Switching                   4000.0     159759.9    399.4
Process Creation                                126.0       8214.2    651.9
Shell Scripts (1 concurrent)                     42.4       6357.8   1499.5
Shell Scripts (8 concurrent)                      6.0        848.6   1414.3
System Call Overhead                          15000.0     700105.3    466.7
                                                                   ========
System Benchmarks Index Score                                         864.4

 余談になるが、先のDockerのApp TemplatesでMySQL/MariaDBをインストールしなかったのには理由がある。OSが32bitだったためにContainerも32bit版が必要になるのだが、2つともArmに関しては64bit版のみで、インストール出来なかったのだ(ファイルが見つからないとエラーになる)。

 試しにと、64bit版ubuntu serverにDockerとPortainerをインストールして、MariaDBとWordpressをApp Templatesから入れたところ、問題なく作動している。NASはSMB/CIFSでの共有のみで、Dockerがおもなら、こちら(64bit)の環境の方がいいだろう。

64bit版ubuntu serverで作動しているPortainer
MariaDBとWordpressをTemplatesから入れ、無事Wordpressが作動
64bit環境下だとCentOS 8も動く(Arm 32bit版はない)
Container/MariaDBをモニタリング。ほとんどリソースは使ってない

 Part2ではRaspberry Pi 4 Model BをNAS化、そしてDockerを使って遊んでみた。プロセッサ/メモリのパワーアップはもちろん、USB 3.0とGigabit Ethernet対応はポイントが高く、何をするにしてもボトルネックがなくなった。これだけのボードコンピュータが1万円もしないのだから、いい時代になったものだ。

 2回の記事を読んで「お!面白そうだな。買って試して見るか♪」と思っていただければ幸いである。Pi 3を所有している筆者も欲しくなってしまった。