西川和久の不定期コラム
「Raspberry Pi 4 Model B / 4GB」Part2
~実践編。openmediavaultでNAS化に挑戦! そしてDockerで遊ぶ
2020年1月21日 06:00
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での処理は終えていることを想定している。
まずストレージのベンチマークテスト前に、基本設定としてフォーマット、マウント、動作確認を行なう。手順は以下のとおり。入力が要求される場所は基本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での操作なので簡単だ。
以上のように、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が現れる。
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が表示される。
次に、App Templatesにはないubuntu、つまりOSそのものを入れてみた。手順はContainer > [+add container]で、Nameは適当(ubuntu)、Imageにubuntuを指定し、[Deploy the container]を実行すればOKだ。
こうしておけば、フルのubuntuを、システム側を汚さずいろいろ遊ぶことができ、不要になったり、グチャグチャになったらContainerを削除して再度Deployすればよくなる。
ただ、今の状態では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)の環境の方がいいだろう。
Part2ではRaspberry Pi 4 Model BをNAS化、そしてDockerを使って遊んでみた。プロセッサ/メモリのパワーアップはもちろん、USB 3.0とGigabit Ethernet対応はポイントが高く、何をするにしてもボトルネックがなくなった。これだけのボードコンピュータが1万円もしないのだから、いい時代になったものだ。
2回の記事を読んで「お!面白そうだな。買って試して見るか♪」と思っていただければ幸いである。Pi 3を所有している筆者も欲しくなってしまった。