Raspberry Pi を NAS にする
はじめに
おうち倉庫にずっと籠もっていた Raspberry Pi (以降 RPi)を NAS 化したその備忘録です.

使うもの
ハードウェア
Jeff 氏[1]のブログを参考にしました.
| 品名 | 内容 |
|---|---|
| Raspberry Pi 5 | NAS にするマシン本体 |
| Radxa Penta SATA HAT | SATA 接続で内蔵ディスクをたくさん使えるようにする HAT |
| Radxa POWER DC 12 60W | Radxa Penta SATA HAT 用の電源供給ユニット |
| Radxa Penta Top Board | おしゃれなファンと OLED が載ったボード |
| 内蔵ディスク | エンジニアの家なら多分そこら辺に落ちてるやつ |
ソフトウェア
| 品名 | 内容 |
|---|---|
| Raspberry Pi OS Lite | Raspberry Pi 用の OS |
| OpenMediaVault 7 | NAS 構築用のソフトウェア |
0. 発注
Radxa 系のパーツをアリエクでとりあえず注文します.
1 週間もすれば届きます. 箱が多少潰れるのはご愛嬌.
1. Raspberry Pi の事前準備
rpi-imager を利用して OS を microSD カードに焼きます.
今回は OpenMediaVault (以降 OMV) を使いたいので, 互換性のある Raspberry Pi OS Lite を焼きます. OMV が Raspberry Pi OS のデスクトップ版をサポートしていないのでちょっと注意です.
ユーザ管理とかは好きなようにやりましょう.
以降は lru というユーザ名で, sudoers に入ってる想定で記述します.
最近の Imager はどうやら焼く時点で hostname とかの設定ができるようになっているようですが, まんまと忘れたので愚直に設定を入れていきます.
1.1 hostname の設定
インストールしたら適当な名称に hostname を変更しておきます.
$ sudo hostnamectl set-hostname pi-nas
hostnamectl では /etc/hostname まで変わってくれますが, /etc/hosts の内容は変わらないので合わせておきます. CLI editor は vim 一択です. vim を入れましょう.
$ sudo apt install -y vim
$ sudo vim /etc/hosts
# 自身を指す記述の行を修正
127.0.1.1 pi-nas
1.2 sshd の起動
Raspberry Pi をリモートから操作するために sshd を起動しておきます.
$ sudo raspi-config
# Interfacing Options > SSH > Enable
$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
Active: active (running) ...
ここまで来たら一旦 reboot しておきます.
$ sudo reboot
1.3 作業する PC からの ssh key 投げ
ssh で接続するための鍵を作成して登録しておきます.
ローカルネットワークでつなげて, .localドメインで mDNS を利用して接続します.
# 鍵は好きなやつ作る
$ ssh-keygen -t ed25519
# ユーザ名部分は RPi のユーザ名に合わせる
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub lru@pi-nas.local
2. ハードウェアの組み立て
届いたハードウェア群を組み立ててきます.
基本公式の手順[2]に従えば問題ありません.

2.1 HAT の接続
Radxa Penta SATA HAT を接続します.
RPi のアクティブクーラーは付けたままにしたいですが, ヒートシンクとこの HAT はガッツリ干渉します. 仕方なしにヒートシンクの一部をニッパーでぶち飛ばして合わせます.


その後ケーブルを RPi の PCIe スロットに接続します.
あとは GPIO ピンに HAT のピンヘッダを接続するだけです.


このとき, TopBoard をつける想定なら, TopBoard の方のクソ長ネジで止めましょう. (写真は忘れてそのまま止めた図)
2.2 ディスクの取り付け
Radxa Penta SATA HAT には SATA ポートが 4 つあります. (側面に eSATA ポートもあります)
基本的に上部の 4 つで済ませたいところですが, サイズ感からわかる通り, 2.5 インチのディスクしか上載せ形態での接続には対応していません. 3.5 インチの HDD もサポートされていますが, Serial ATA ケーブルで直接接続する形になります.
2.5 インチの SSD は 2 台しかなかったのでとりあえずこの 2 台を載っけます.

2.3 Top Board の取り付け
Radxa Penta Top Board を取り付けます. 小さいネジで止めてしまった人は頑張って小さいネジを外しましょう. クソ長ネジへと差し替えて最上部に Top Board を取り付けます.

3. 各種ハードウェア制御設定の追加
こちらも公式の手順[3]に従っていきます.
3.1 PCIe スロットの設定
デフォルトでは RPi 5 の PCIe スロットが無効化されているのか, ディスクが認識されません.
$ sudo lsblk
# SD カードしかない
mmcblk0 179:0 0 119.1G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 118.6G 0 part /
/boot/firmware/config.txt の末尾に以下の設定を追加することで接続が有効化されます. pcie_gen指定は PCI Express 3.0×1 接続となるようにしているものですが任意です. 書かなくても良い.
[all]
dtparam=pciex1
dtparam=pciex1_gen=3
設定後に再起動します.
再起動後, ディスクが認識されるようになります.
$ sudo reboot
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
sdb 8:16 0 931.5G 0 disk
mmcblk0 179:0 0 119.1G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 118.6G 0 part /
PCIe スロットに接続されているデバイスの確認は以下のコマンドで行えます.
8GT/s なので PCIe 3.0 接続ができていますね. 先の任意記述を飛ばした場合は 5GT/s で PCIe 2.0 接続となります.
# PCIe デバイスの確認
$ sudo lspci
0001:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21)
0001:01:00.0 SATA controller: JMicron Technology Corp. JMB58x AHCI SATA controller
0002:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21)
0002:01:00.0 Ethernet controller: Raspberry Pi Ltd RP1 PCIe 2.0 South Bridge
# Link 状態の確認
$ sudo lspci -vvv -s 0001:01:00.0 | grep LnkSta
LnkSta: Speed 8GT/s, Width x1 (downgraded)
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ EqualizationPhase1+
3.2 ファン / OLED の制御
せっかくつけた Top Board ですから制御パッケージを入れておきましょう. [4]
rockpi-penta の GitHub から取得でき, ファンと OLED の制御が可能になります.
$ wget https://github.com/radxa/rockpi-penta/releases/download/v0.2.2/rockpi-penta-0.2.2.deb
$ sudo apt install -y ./rockpi-penta-0.2.2.deb
インストール後, /etc/rockpi-penta.conf にファンと OLED の設定が書かれています.
OLED に表示される内容はそう多くありませんが, uptime, CPU 温度, IP アドレスなどが表示されます.

フルパワーだとファンがそこそこの騒音を発しますが, 風量が結構あります. 温度測定器を持っていないのが悔やまれる.
4. OpenMediaVault のインストール
公式の手順[5]に従います.
4.1 事前準備
必要なライブラリをインストールします. (jqが入るだけ)
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
4.2 OMV のインストール
インストールスクリプトを実行します.
実行が完了すれば, もう OMV がインストールされ立ち上がっている状態になります.
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
4.3 Web UI へのアクセス
Web UI へのアクセスは, hostname がpi-nas であれば, ブラウザから http://pi-nas.local でアクセスできます.
デフォルトのユーザ名: admin, パスワード: openmediavault です. ログイン後, パスワードは変えておきましょう.
5. RAID
OMV は RAID の取り扱いに対応してはいますが, 構築には対応していません. RAID はmdadm を使って構築していきます.
5.1 RAID の構築
今回は RAID1 (ミラーリング) を構築します.
ディスクは完全に NAS 用に使う前提なので, パーティションは切らずにディスク全体を RAID に利用します. (ディスクの一部だけを RAID に利用したい場合は, 事前にパーティションを切っておく必要があります)
$ sudo mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices 2 /dev/sda /dev/sdb
構築の進捗は以下のコマンドで確認できます.
$ cat /proc/mdstat
md0 : active raid1 sdb[1] sda[0]
976630464 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.5% (4948928/976630464) finish=78.5min speed=206205K/sec
bitmap: 2/2 pages [32KB], 65536KB chunk
ビルド完了まで結構待ちます. 気長に待ちましょう.
5.2 RAID のファイルシステム初期化
RAID の構築が完了したら, OMV からデバイスを認識できるようになります.
Web UI の Storage > File Systems にある Create and Mount ボタンから, ext4 あたりのファイルシステムを作成しマウントします.
最新を追うなら btrfs も選択肢. この辺は好みです.

6. SMB/CIFS の設定
NAS へアクセス可能としたい機体に Windows がいるので, SMB/CIFS を利用します.
6.1 共有フォルダの作成
Storage > Shared Folders から, Create ボタンを押して共有フォルダを作成します.
適当な名前を付けて, RAID デバイス上に作成します.

6.2 SMB/CIFS の有効化
Services > SMB/CIFS > Settings を選択し, Enable にチェックを入れます.
特に Workgroup 等の設定が不要であれば, そのまま Save ボタンを押して設定を保存します.
6.3 共有フォルダの展開
Services > SMB/CIFS > Shares から, Create ボタンを押して先ほど作成した共有フォルダをアクセス可能な状態にします.

6.4 ユーザの作成
User Management > User から, Create ボタンを押してユーザを作成します.
共有フォルダにアクセスしてくるだけなので, そんなにたくさんの権限は要らないでしょう.
Group を定義しておくと後々の権限設定が楽になるんじゃないかなと.

6.4 共有フォルダへのアクセス権限の設定
Storage > Shared Folders から先ほど作成した共有フォルダを選択し, Permission ボタンから権限を設定します.
先ほど作成したユーザまたはそのユーザに付与したのグループを選択し, Read/Write にチェックを入れます.
7. アクセス検証
From Linux

無事アクセスできました. 適当にテキストファイルでも置いておきます.
From Windows

こちらからも無事アクセス出来ました.
おしまい
今まで常時使うわけでもないけどちょっとなくなると困るんだよな〜みたいなファイルの置き場に困ってましたがこれで解決です.
さっそく数百 GB ほど整理したファイルを突っ込んでみましたが現状特に問題は起きていません.
今後は HDD を追加して, 更に大容量に拡張していく見込みです.
Discussion
このページも参考にして、ラズパイのOMVのインストールに挑戦、難儀しましたが、なんとかインストールできて稼働しました。
しかし、ウェブの画面から電源ボタンを押しシャットダウンを選択したところ、最初のウェブ画面が表示できなくなりました。
ラズパイのrebootでは起動しません。また再インストールになります。
#ラズパイ4はOMVインストールの前に固定IPアドレス(eth0)にしてあります。
Lruさんもシステムの電源を切ることもあると思います。
シャットダウンの正しい手順、留意事項等あればご教授いただければ幸いです。
前田悦弘
私の方でも WebUI からシステムアップデートなどを適用して再起動したり, シャットダウンしたりを何度か行っていますが, 今のところ特に問題は発生したことはありません.
Penta SATA HAT は Raspberry Pi は 5 しか公式サポートがないので, 4 利用だとするとハードウェア的に正常動作するかは結構怪しいと思います.
(Raspberry Pi 4 向けだと, Dual/Quad SATA HAT なる別のものがあったようなのですが, ちょっと今から入手は厳しいかも...)
特に HAT を載せたわけではなく, 単に RPi にインストールした OMV の管理画面にネットワーク経由でアクセスできないという状況であれば, RPi + OMV + 静的 IP 関連でネットワーク設定まわりのトラブル報告がいくつかあるようなので, そちらを参照してみると良いかもしれません.
(うちの設定では RPi は IP を固定化しない方針を取っています)
Lruさま
素早い返信ありがとうございます。
何回もWe-UIから静的IP(固定位IP)を設定するところでつまづいて、再インストールをしていました。
・Lruさんに問い合わせた後、webで「nginxサーバーサービス」が起動していない場合があるという記事を見つけたので
systemctl status nginx.service
でステータスを見ると(invalid)となっていたのでrestartさせるとActive: active (running)
となり、無事ログインできるようになりました。
何回かOMVをシャットダウン、RPi起動時にnginxリスタートをして確認していました。いつの間にかリスタートかけなくても正常にロクグイン画面が出るようになりました。
判然としませんがとりあえず解決しているようです。
教えていただいたfrom.openmediavault.orgの記事を見ていてRPiの
Installing OMV7 on a Raspberry PI
を見つけ本家のインストールマニュアルを見ることができました。
・OMVインストール後の最初のログインは3−5分待ってからと記載されてました。
RPiが再起動したらすぐログイン操作してました。
もしかすると、OMVの画面からの固定アドレス設定も、反映されるまでもう少し待っていれば良かったかもしれないと、せっかちな自分を反省しているところです。
Linuxを使うにあたって英文ドキュメントを読むことを厭わないようにと言われていたのですが、改めて英文情報を調べることも大事だと思いました。
もう少しいじってみて今度はRPi5でbookwormでなくtrixieでもできるのかトライしてみようかと考えてます。
また困ることがあればご相談させていただくこともあろうかとも思います。その際はよろしくお願いします。
ありがとうございました。
前田悦弘
私は、73歳でコピペ主体のLinux使いの爺さんです。お付き合いいただいたことに再度感謝申し上げます。