Raspberry PiでRAID付きNASを構築する

# 追記(2024/05/23）
``OpenMediaValut``ver.7が安定版としてリリースされました．
これにより，導入前提OSが``Debian12 (bookworm)``に変更されています．

　また，ソフトウェアRAIDを構築するソフトウェアが，プリインストールではなくなりました．この変更により，この記事で紹介している手法が使えなくなっているかもしれません．
 
 OMV7でこの手法を試した方いらっしゃいましたら，コメント欄で動作報告していただけるとありがたいです．

# 概要
　``Raspberry Pi``を用いて``OpenMediaVault``を使った``RAID搭載NAS``を作っていきます．
![YEP06127.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/58c7c75f-bacd-05ed-66b2-84685db87f09.jpeg)

　``OpenMediaVault``では，USB接続されたHDDに対し，ソフトウェアRAIDを構築することはできません（信頼性の関係）．そこで，裏技を用いてソフトウェアRAIDが``OpenMediaVault``上でも作成できるようにしていきます．

:::note info
**``OpenMediaVault``上でUSB接続によるRAID構築をする理由**

　``OpenMediaVault``を使わなくとも，USB接続かどうかに関わらずソフトウェアRAIDは構築できます（samba + mdadmパッケージ）．では何故``OMV``を使うのか？

それは，後々の管理が楽だからです．``OMV``を使えば，共有フォルダやパーミッションの設定，NASの状態把握などがブラウザ上で直感的に行なえます，このような観点から``OMV``を用いたUSB接続によるHDDのRAID構築を目指していきます．
:::

## 構成
　今回使用するパーツは以下の通り．

今回``RAID 1``を構築するので，データ消失のリスクは低いと考えています．
そこで，HDDはジャンク品（動作確認済み）を使用しました．当たり前ですが，予算があるのであれば新品を買った方がいいと思います．
|パーツ|メーカー|型番|価格|備考|
|:-:|:-:|---|---|---|
|コンピュータ|Element14|Raspberry Pi 4 Model B / 4GB|¥10,560（スイッチサイエンス）||
|HDDケース|玄人志向|KURO-DACHI/CLONE/CRU3|￥3,655（Amazon）||
|SDカード|グリーンハウス|GH-SDMRHCUB32G|¥1,500（Amazon）|元はドラレコ用|
|HDD1|SEAGATE|ST1000DM010|¥1,500|ジャンク品|
|HDD2|WesternDigital|WD1002FBYS|¥1,500|ジャンク品|

合計して``¥18,715``になりました．``BUFFALO``の``LinkStation LS220D0202G``という製品が¥19,248（価格ドットコム調べ，2023/08/27 現在）で売られているところを考えると，市販品買った方が良いという結論になりますね（汗）

ただ，NASの有名メーカーである，``QNAP``や``Synology``と比べれば安価に作れますし，またNASに使用するHDDの容量・台数を増やしていくと，この状況は逆転するのではないかと考えれらます．

また，カスタマイズ性，拡張性（あとからHDDの台数を増やせる）という点から見れば，自作するのも結構悪くないんじゃないですかね

:::note info
自作する楽しみは既製品のNASでは味わえないので高くなってもOK！
:::

### HDDケースについて
　今回は``玄人志向``のHDDケースを使用しましたが，ケースに関してはお好みで良いと思います．HDDが1台入るケースを複数台購入しても良いと思いますし，別に``玄人志向``でなくとも様々なメーカーが同様のHDDケースを販売していますので，そちらを選んでも良いかと思います．今回はソフトウェアRAIDを使用してRAIDを構築していますが，ハードウェアRAID搭載のケースであれば，それ単体でRAIDが構築できてしまいますしね．

　ただ，注意しておきたいのは``Raspberry Pi``側のUSBポート数です．使用するHDDの数やケースによっては，USBポートが足りなくなることがあるので，その際はUSBハブを間に噛ませるなど，対策が必要です．

# 構築方法
## 大まかな流れ
1. SDカードにOSを書き込む
1. OpenMediaVault（NAS管理ソフト）をインストール
1. ソフトウェアRAIDを構築
1. Sambaの有効化・共有ファイルの設定等
1. 動作確認

## 手順
### 1. OSを書き込む
　Raspberry Pi用のOSをSDカードに書き込んでいきます．
OSは，``RaspberryPi OS Lite (64bit)``を選択しました．

:::note info
**使用するOSについて**

使用するOSはRaspberryPi OS以外でも大丈夫ですが，以下の条件を満たす必要があります．
- ~~**``Debian 11(bullseye)``であること**~~
-**``Debian 12(bookworm)``であること**
- **デスクトップ環境が用意されているものでないこと**

となると，``RaspberryPi OS``以外で使用できるものといえば，``Ubuntu Server``くらいでしょうか．
:::

*※具体的な手順については割愛します．*

### 2. ``OpenMediaVault``（NAS管理ソフト）をインストール
　``OpenMediaVault（OMV）``をインストールしていきます．``OMV``は通常，OSと一緒にインストールしますが，公式サイトで配布されているものが``Intelx86``系用OSであるため，このままでは``ARM``系である``Raspberry Pi``にインストールすることができません．

そこで，今回は既存の``Debian``系OS上で動作するようにしていきます．

#### ① インストールスクリプトを実行
``Raspberry Pi``のターミナル上で以下のコマンドを実行します．
```shell InstallScript.sh
sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
```
:::note alert
トラブルを避けるため，HDDはまだ接続しないでください．
:::
すると，``OMV``のインストールが開始されます．インストール終了まで大体20分程度かかります．気長に待ちましょう．

　インストールが完了すると，自動的にシステムの再起動が行われます．再起動したらインストール完了です．

::: note info
SSH接続で作業をしている場合には再起動に伴って，接続が切断されますので，再起動後に再度接続をし直してください．
:::

#### ③ ``OMV``のインストール完了の確認
　正しくインストールが完了しているか，確認していきます．``ifconfig``等でRaspberryPiのIPアドレスを確認した後，ブラウザで以下のサイトにアクセスします．
```管理画面へのアクセス.
http://ラズパイのアドレス
```
すると，以下のようなサイトに繋がるはずです．
![OMV管理画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/f620a050-c200-6a8b-139a-cbda27205f29.png)

:::note info
言語が日本語でない場合は，**地球儀のアイコン**をクリックすると変更できます．
:::
デフォルトでは，以下のようなIDとパスワードで管理画面にアクセスできます．
- ログインID：``admin``
- パスワード：``openmediavault``

試しにアクセスして，管理者パスワードを変更しておきましょう．

以下の画像のように，右上にある``ユーザーアイコンをクリック``→``パスワードの変更``でパスワードを変更しておきます．
![パスワード変更](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/488781fa-9520-96ab-4dcf-260b5986a8c1.png)

### 3. ソフトウェアRAIDの構築
　続いて，ソフトウェアRAIDを構築していきます．``OMV``ではUSB接続されたHDDは信頼性の関係でRAIDを構築することができません．そこで，裏技を使ってソフトウェアRAIDの設定を行います．

#### ① HDDを接続する．
　HDDを接続します．``Raspberry Pi``には，``USB2.0``と``USB3.0``の2種類がありますので，注意して接続してください．

#### ② HDDのフォーマット
　HDDのフォーマットを行います．先程のように``OMV``の管理画面にアクセスしてください．
続いて，``ストレージ``→``ディスク``と進みます．

![ディスクの管理画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/13384802-4205-dfd1-4e8f-b4fcc33e19ea.png)

フォーマットするには，フォーマットしたい（RAIDを構築したい）HDDをリストから選んだ後，``ワイプ``をクリックしてフォーマットします．

:::note info
途中フォーマット方法に``クイック``か``セキュア``を選ぶ画面が現れますが，特段のことがなければ，``クイック``で大丈夫です．
:::

また，このときデバイスの欄に記載されている，HDDのパス（画面の例では，/dev/sdaや/dev/sdb）を覚えておいてください．

#### ③ RAIDの構築
　RAIDの構築をしていきます．前述の通り，``OMV``の管理画面上ではUSB接続されたHDDのRAID構築は行えません．

そこで，再度``ターミナルにアクセス``します.

ターミナルに接続したら，以下のコマンドを実行します．

```ターミナルにアクセス.sh
sudo mdadm --create /dev/md0 --raid-devices=構築に用いるドライブ数 --level=RAIDのレベル HDD1 HDD2

# RAIDのレベルには，構築したいRAIDのレベルを入力
# 記載例：raid0,raid1,raid5

# HDD1,HDD2には，先程確認したHDDのパスを入力します．
# 記載例：/dev/sda
```

途中聞かれることがありますが，``y``で問題ないようです．

私の場合は，2台のドライブを使って``RAID1``を構築しますので，以下のようになります．
```2台のドライブでRAID1を構築するとき.sh
sudo mdadm --create /dev/md0 --raid-devices=2 --level=raid1 /dev/sda /dev/sdb
```

コマンドが成功していれば，RAID構築の設定は完了です．

#### ④ RAID構築の確認
　RAID構築が正しく行えているか確認します．再度ブラウザで``OMV``の管理画面を開いてください．
続いて``ストレージ``→``ソフトウェアRAID``を開きます．

![ソフトウェアRAID](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/559f07ef-1bf1-ab1e-de69-97a0b3cd74e4.png)

正しく，RAIDが構築されていれば，ソフトウェアRAID一覧に先程作成したRAIDドライブ（/dev/md0）が表示されているはずです．

:::note info
**シンクロナイズ**
画像は，RAID構築してしばらく経った後のスクリーンショットになりますが，RAID構築直後は``シンクロナイズ``作業が行われます．HDDの容量によって時間は大きく異なりますが，私の場合（HDD 1TB）では3時間ほどかかりました．

``シンクロナイズ``中であっても，別の操作を行うことは可能ですが，念のため完了するまで待っておいた方がいいでしょう．
:::

### 4. ``Samba(SMB)``の有効化
　シンクロナイズが終了したら，実際に共有の設定を行なっていきます．

#### ① ファイルシステムの作成
　NASのストレージとして使う``ファイルシステムの作成``を行っていきます．

``ストレージ``→``ファイルシステム``にアクセスし，プラスボタンを押下．
![ファイルシステム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/25ddfe98-32f5-0890-4d58-ece630cd7ba5.png)

その際，ストレージの形式を聞かれますので，お好きなフォーマット形式（今回は``BTRFS``）を選んでください．

![フォーマット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/c2dc44f1-4ecc-4661-4641-9c526514b44d.png)

すでにRAIDは構築済みなので，プロファイルには``Single``を選択，デバイスには``先程作成したRAIDドライブ``を選択し，保存をクリックします．

続いてマウントを行う画面に遷移しますので，先程設定したドライブがファイルシステムに選択されていることを確認し，保存を押します．

:::note warn
このとき，変更の反映を促すバナーが表示された場合には，反映ボタンを押してください．
:::

:::note info
マウントを行う画面に自動的に遷移しない場合，``ファイルシステム``ページの再生ボタン（マウント）から同様の作業を行なってください．
:::

#### ② 共有フォルダの作成
　共有フォルダを作成していきます．

``ストレージ``→``共有フォルダ``→``作成（プラスボタン）``を選択，名前とファイルシステムを選んだ後，パーミッションを
``Administrator: 読み込み/書き込み, Users: 読み込み/書き込み, Others: アクセス不可``に変更し，保存します．

#### ③ SMBの設定
　ファイル共有を行うためのシステム（Samba）の設定を行っていきます，

``サービス``→``SMB/CIFS``→``設定``を選択します．
続いて，ワークグループの項目の上の``有効ボタン``にチェックをいれ，変更を保存．

その後，``サービス``→``SMB/CIFS``→``共有``のページに移動し，``作成``ボタンをクリックします．
有効ボタンにチェックが入っていることを確認した後，``Shared folder``に先ほど作成した共有フォルダを選択，保存します．

これで，ファイルの共有が行えるようになりました．

#### ⑤ NAS用アカウントのパスワード設定
NASにアクセスするためのパスワードを設定していきます．

``ユーザー``→``ユーザー``にアクセス．デフォルトではRaspberryPiのアクセスに用いているアカウントが登録されているはずです．別個新しくNASアクセス用のアカウントを作成しても良いのですが，今回は予め登録されているアカウントを使用していきます．

予め登録されているアカウントを選択後，``編集``をクリック，``パスワード``，``パスワードの確認``の欄にNASにアクセスするためのパスワードを入力します．入力が終わったら保存し，変更を保存します．

:::note warn
今回設定したパスワードと``Raspberry Pi``を操作するためのパスワードは別です．混同しないようにしてください．
:::

# 5. 動作確認
　動作確認を行います．まず，エクスプローラのアドレス欄に``NASのIPアドレス``を入力します．
すると，ログイン画面が現れますので，先程設定したアカウント名とパスワードを入力します．

そうすると，先程作成したフォルダが表示され，自由に読み書きができるはずです．

ここまでできれば，作成完了です．

# 使用感について
　読み書きの速度を計測してみました．ベンチマークに用いるソフトは``CrystalDiskMark``です．
![CrystalDiskMark_20230902114202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2676391/72040ff7-e969-109a-06eb-6104c693afa8.png)
 結果，``最大115.77 MB/s``の読み取りができていることがわかりました．我が家のLAN環境は1Gbps（125 MB/s）環境ですので，実測値などを考慮すれば，想定されるような結果が得られているのではないかと考えられます．

``RAID1``構成のHDDでこの速度ですから，``RAID0``や``RAID10``などを用いて高速化を図りたい場合，LAN環境を実測値で1Gbps以上の速度が出せるようにしなければならないことになります．
そうすると，LANケーブルだけでなく，LANカードやルータなども場合によっては交換しないといけなくなるため，一般の家庭ではHDD単体で十分なのかもしれませんね．

# 参考文献
https://github.com/OpenMediaVault-Plugin-Developers/installScript

https://zenn.dev/oversleep/articles/3f9ad984a37aba

https://www.youtube.com/watch?v=NNLbsh17r7U&t=409s

https://pype.org/raspberry-pi-nas-project-1-build-the-raid/