おうちサーバー構築報告：Raspberry Pi 5 でNAS構築

## 能書き

[おうちサーバー構築報告：予告](https://qiita.com/katz_engineer/items/471408eda1d09507c451)の流れとは違いますが。実は[予告](https://qiita.com/katz_engineer/items/471408eda1d09507c451)でも触れた我が家の HP N54L が、とうとう故障しました。連続して大量のファイルをコピーすると、いつの間にか電源が切れます… バックアップが出来ません。これは困った！

偶々タイミング良く、知り合いから2TBのHDDを5台譲っていただきました。そこでまあ少々考えまして、ラズパイ5でNASを作ってみようかと。HDDケースとしては[MAL355EU3R](https://www.fff-no1.co.jp/product/hddcase/mal355eu3r.html)を選択。

と言う訳で、今回はラズパイ5をNASに仕立てる過程の記録です。

## ハードウェア

- [ラズパイ5スターターキット 8GB版](https://akizukidenshi.com/catalog/g/g129363/)
- [RAID対応 SATA3.5&SATA2.5インチHDD5台ケースMAL355EU3R](https://www.fff-no1.co.jp/product/hddcase/mal355eu3r.html)
- 今までN54Lで使っていた、今となっては小容量の500GB HDD ×4台 + [1TB HDD ×1台](https://qiita.com/katz_engineer/items/5581bbb94874020138d9#%E7%8A%B6%E6%B3%81%E7%A2%BA%E8%AA%8D)

## やること

- ラズパイ5にUbuntuServerをインストール
- ZFSとSambaを設定
- 今まで使っていたHDDをインポートして、データを引き継ぐ

## 参考文献

- [Raspberry Pi 5 スターターキット/コンプリートキット 組み立て - SWITCH SCIENCE](https://www.switch-science.com/pages/pi5assy)
- [ラズパイ5に64ビットOS（Lite版）をインストール - Zenn](https://zenn.dev/katz_engineer/articles/20240622_katz_raspberrypi5_os64)
- [Raspberry Pi 5 に Ubuntu Server を簡単セットアップ - ぎょーむにっし](https://tks2.co.jp/2024/02/18/raspberry-pi-5-%E3%81%AB-ubuntu-server-%E3%82%92%E7%B0%A1%E5%8D%98%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97/)
- [Ubuntu Server 22.04LTSでIPアドレスを固定する方法 - Qiita](https://qiita.com/ayato23vr/items/1089ba331ee3450a511b)
- [インストール - OpenZFS - インストール - 私的サーバー構築日誌：Ubuntu 24.04 LTS in MicroServer N54L - Qiita](https://qiita.com/katz_engineer/items/bd96a26e0a65ceb28ff7#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-1)
- [ストレージのimport - OpenZFS - インストール - 私的サーバー構築日誌：Ubuntu 24.04 LTS in MicroServer N54L](https://qiita.com/katz_engineer/items/bd96a26e0a65ceb28ff7#%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AEimport)
- [別マシンで作成したzpoolのインポート - UbuntuにZFSを導入しSambaファイルサーバにする - クリエイターの雑記帳](https://cgbeginner.net/ubuntu-zfs/#toc12)
- [私的サーバー構築日誌：Sambaで共有フォルダ公開・Ubuntu 24.04 LTS in MicroServer N54L - Qiita](https://qiita.com/katz_engineer/items/d601ad8acfb90c8567f2)

## ラズパイ5にUbuntuServerをインストール

### Windows版インストーラー

まずは[公式サイト](https://www.raspberrypi.com/software/)から Raspberry Pi Imager をダウンロードします。私の場合は普段使いのマシンがWindowsなので、Windows版インストーラーをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/d333a728-9c06-488e-b9b4-6e771835d401.png)

ダウンロードしたインストーラーを実行します。

「このアプリがデバイスに変更を加える事を許可しますか？」画面が表示されるので、ここは「はい」をクリックします。

Select Setup Language 画面。日本語は無いようなのでEnglishを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/ae28c7e0-c3b3-4c81-8247-389297f07434.png)

Welcome画面。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/4931d8de-2909-44fb-a9f0-a95ee2b4565a.png)

License Agreement 画面。「I accept the agreement」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/bce16755-a390-4ba9-a3cb-f098c4990816.png)

Select Destination Location 画面。インストール先フォルダを選択します。私はデフォルトでいきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7a97476e-044a-480a-8ff6-23a6ee086564.png)

Select Additional Tasks 画面。デスクトップにショートカットを作るか否かを選択できるようですが、私は不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/a07041ab-de6f-42fc-bc2e-2ad326204f70.png)

Raspberry Pi Imager セットアップウィザード、完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7fff1641-9567-409e-aea8-ccdabdf4eed2.png)

### Raspberry Pi Imager

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/ff9f3dfa-4b1f-408d-aa26-a588fea86d03.png)

Raspberry Piデバイスは「RASPBERRY PI 5」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/cc8ca055-31d5-42f6-b695-f8d57520546b.png)

OS > Other general-purpose OS > Ubuntu > Ubuntu Server 24.04.2 LTS (64-bit)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/3169b303-d3a0-42fa-8afa-24ec7cdb5c73.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/1466409d-e383-4f69-8e45-38abf89708b2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/2d514145-d775-420e-9afa-c335e7ae7928.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/9cc8f84e-0c54-4967-a7e5-322c077133c8.png)

ストレージ… あ、忘れてた。MicroSDカードをこのノートパソコンで書き込めるようにアダプターで接続します。そうすると選択肢が表示されます。
ストレージ > SDHD Card - 31.0GB

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/e3f9415d-4931-43d0-b55c-a1b29040bc94.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/919ec78c-7fa8-4644-b682-a71540fcd05a.png)

「次へ」ボタンをクリックすると「Would you like to apply OS customization settings?」ダイアログが表示されますので、「設定を編集する」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/3714d463-5fc3-4bac-9d42-693717502002.png)

Windows とアプリに位置情報へのアクセスを許可しますか？ ラズパイと言えばイギリス製ですし、とりあえず「はい」でいいかな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/c011e416-671c-491e-9f6e-63d4a5463ed9.png)

OS Customization 画面一般タブ。Wi-Fi以外の各項目を設定します。ここは各自のお好みで。ちなみにWi-Fiに関しては通信速度の点で有線の方が有利だそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/f529892e-416f-4f13-8980-ce34560807b1.png)

OS Customization 画面サービスタブ。私はSSHを公開鍵認証にしたかったんですが、なぜか、キーを貼り付けられません。仕方が無くパスワード認証にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/59ab7d4c-bf25-40ec-8a40-d4d977034af8.png)

OS Customization 画面オプションタブ。デフォルトのままでいいですかね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7562edb6-0a9c-480d-a137-4665e5e941ea.png)

全部設定したら「保存」ボタンをクリックします。

Would you like to apply OS customization settings? 画面。「はい」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/14cc6b50-992f-425d-9691-3484876b067b.png)

削除の確認画面。「はい」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/2d9a6461-872d-4565-8b32-5b297cd32fe6.png)

Windowsのフォーマット確認画面。恐らく Raspberry Pi Imager がMicroSDのフォーマットを壊して、そのせいでWindowsが認識できなくなって、という流れでこの画面なのでしょう。ここは「キャンセル」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/248a5f29-e1c9-4bb9-9512-9b3572457729.png)

書き込みは順調に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/94870437-8c38-4060-8a78-b497a6b5eecf.png)

書き込みが終了したらMicroSDカードを取り出して、Raspberry Pi Imager を終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7e3453c4-70ef-4aa0-bb1e-728915c39784.png)

### ラズパイ起動とssh接続

MicroSDカードをラズパイに挿入します。そしてEthernetケーブル・モニター・USBキーボード・電源を繋ぎます。OSがUbuntuServerなのでマウスは不要です。

モニターはスターターキットに同梱されていたHDMI-miniHDMIのケーブルですね。ラズパイ側にはminiHDMI端子が2つありますが、どちらに挿入しても大丈夫のようです。

電源は繋いだ途端にスイッチが入りますので、最後に繋ぎましょう。

最初に電源を入れた時にはcloud-initが動くようです。まずは一服して落ち着くのを待ちますか。ロシアンティーを一杯。ジャムではなく、マーマレードでもなく、蜂蜜で。

無事に起動すると、Windowsマシンからはホスト名で接続できるようです。

```console:Windowsマシン
ping raspberrypi
```

```console:Windowsマシン
ssh administrator@raspberrypi
```

### ネットワークIPアドレス固定化

ラズパイのIPアドレスを固定化します。

```console:ラズパイ5
cd /etc/netplan
sudo vi 99-config.yaml
```

`/etc/netplan`には`50-cloud-init.yaml`が存在しますが、これはこのまま放置し、`99-config.yaml`ファイルを追加します。その内容は[我が家のIPアドレス体系](https://qiita.com/katz_engineer/items/03be4aac1db264ca4197#我が家のipアドレス体系)に従って下記にします。

- NASのIPアドレス: 172.16.1.3/16
- デフォルトゲートウェイ: 172.16.2.1
- DNSサーバ: デフォルトゲートウェイと同じ(172.16.2.1)

```console:/etc/netplan/99-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      addresses: [172.16.1.3/16]
      routes:
        - to: default
          via: 172.16.2.1
      nameservers:
        addresses: [172.16.2.1]
```

`/etc/netplan/99-config.yaml`を作成したら反映します。すると即座にIPアドレスが変わりますのでsshが切断されます。

```console:ラズパイ5
sudo chmod 600 99-config.yaml
```

```console:ラズパイ5
sudo netplan apply
```

sshを接続し直しましょう。

## UbuntuServerにNAS設定

### ZFS

#### インストール

OpenZFSをインストールします。

```console:ラズパイ5
sudo apt update -y && sudo apt upgrade -y
```

```console:ラズパイ5
sudo apt install -y zfsutils-linux
```

zfsがインストールされた事を確認します。

```console:ラズパイ5
zpool --version
```

実行結果はこんな感じになります。

```console:ラズパイ5
$ zpool --version
zfs-2.2.2-0ubuntu9.2
zfs-kmod-2.2.2-0ubuntu9.1
```

#### HDD接続

いよいよHDDを接続します。

HDDケースはこれです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/0f315c22-7606-426a-8bf9-9483f95e7ffd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/8065e0e3-6859-486b-9fc2-5fe9387e7f2a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/8da01eef-55d4-4f98-b752-84421fb87752.png)

HP N54L の電源を切り離し、収まっていた5台のHDDを取り出して、上のHDDケースに格納。モードはスタンダードモード、5台のHDDを個別認識させるモードです。内臓RAID機能は使いません。折角の機能なんですけどね。

添付のUSBケーブルでHDDケースとラズパイ5を接続します。ラズパイ5の方は電源を入れっ放しですが、USBケーブルを接続してからHDDケースの電源を接続、電源を入れます。

数秒置いてから状況を確認。まずはlsblk。

```console:ラズパイ5
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  38.7M  1 loop /snap/snapd/23546
loop1         7:1    0  44.3M  1 loop /snap/snapd/24509
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0     2G  0 part
└─sda2        8:2    0 463.8G  0 part
sdb           8:16   0 931.5G  0 disk
├─sdb1        8:17   0 931.5G  0 part
└─sdb9        8:25   0     8M  0 part
sdc           8:32   0 465.8G  0 disk
├─sdc1        8:33   0     2G  0 part
└─sdc2        8:34   0 463.8G  0 part
sdd           8:48   0 465.8G  0 disk
├─sdd1        8:49   0     2G  0 part
└─sdd2        8:50   0 463.8G  0 part
sde           8:64   0 465.8G  0 disk
├─sde1        8:65   0     2G  0 part
└─sde2        8:66   0 463.8G  0 part
mmcblk0     179:0    0  28.9G  0 disk
├─mmcblk0p1 179:1    0   512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  28.4G  0 part /
```

`sda`から`sde`まで5台、認識してくれたようです。では`zpool import`を。

```console:ラズパイ5
$ sudo zpool import
[sudo] password for administrator:
   pool: tank
     id: 2891006712653798077
  state: ONLINE
status: The pool was last accessed by another system.
 action: The pool can be imported using its name or numeric identifier and
        the '-f' flag.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
 config:

        tank                                 ONLINE
          raidz2-0                           ONLINE
            sde                              ONLINE
            sdd                              ONLINE
            sdc                              ONLINE
            sda                              ONLINE
            ata-ST1000VN008-3CW10C_WWD1E4QZ  ONLINE
```

何か1台だけ名前が変ですが、とにかく5台をZFSとして認識してくれました！

`zpool import`に当たっては`-f`オプションを指定します。`zpool export`していなかったので。

またマウント先は`/mnt/tank`にしたいので、そのように指定します。

そして、[デバイスをWWN(World Wide Name)で管理したい](https://cgbeginner.net/ubuntu-zfs/#toc6)ので、その指定を入れます。

```console:ラズパイ5
sudo zpool import -d /dev/disk/by-id/ -R /mnt -f tank
```

インポートには少々時間がかかりました（体感で数十秒？）

さてインポートできたかな？

```console:ラズパイ5
zfs list
ls /mnt/tank
```

うむ、見覚えのあるディレクトリ名が出てきます。やった！

#### 自動マウント

マシン起動時に自動マウントさせるには`/etc/zfs/zpool.cache`にプール情報を保存する必要があるそうです。Copilot、ありがとう。

但し、実行に時間がかかりますな。体感で10分前後でしょうかね？ちゃんと計れば良かったんですが、うっかりしてました…

```console:ラズパイ5
sudo zpool set cachefile=/etc/zfs/zpool.cache tank
sudo zpool export tank
sudo zpool import tank
```

コマンドが終了したら、マウント先が`/tank`になっていました。`-R`オプションを付けずに`zpool import tank`したから当然ですか。仕方無いですな。

確認の為にマシンを再起動します。

```console:ラズパイ5
sudo reboot
```

起動時にも時間が掛かります。が、自動マウントできました！

```console:ラズパイ5
zpool list
ls /tank
```

(R7.2025.06.17. ここから)
もう一回やり直してみたら、うまくいかなくなりました。自動マウントされません。なぜでしょう。
異なる点と言えば下記2点ですかね…
- cachefile作成時にほんの10秒前後で作成されてしまいました
- マシン再起動も待たされずに起動してしまいます

手が空いた時に対応します。それまではマシン起動後に手動でマウントですな。
(R7.2025.06.17. ここまで)

### Samba

次にSambaを設定して、Windowsマシンからのアクセスを図ります。

#### インストール

何の変哲も無い、基本的なコマンドです。

```console:ラズパイ5
sudo apt update -y && sudo apt upgrade -y
```

```console:ラズパイ5
sudo apt install -y samba
```

Sambaサービスが起動した事を確認します。

```console:ラズパイ5
systemctl status smbd
```

#### ユーザー追加

Sambaで使用するユーザーはOSの一般ユーザーです。
新しく追加するなら、例えば`taro`を追加するなら下記のようにします。

通常はホームディレクトリ内に用意したサブディレクトリをSambaでそのユーザーだけに公開すると思いますが、今回はファイルサーバーのZFSフォーマットしたディレクトリを公開します。その都合で`taro`にはホームディレクトリを作りません。Samba用ユーザーという事でログインも禁止してみます。

```console:ラズパイ5
NEWUSER=taro
```

```console:ラズパイ5
sudo useradd -M -s /usr/sbin/nologin $NEWUSER
```

そしてSamba用パスワードは`smbpasswd`コマンドを管理者権限で実行して設定します。

```console:ラズパイ5
sudo smbpasswd -a $NEWUSER
```

#### 共有フォルダを作成

共有対象となるフォルダを作成します。何でもいいのですが、先程作成した`taro`ユーザー用にZFSのフォルダを用意してみます。

```console:ラズパイ5
cd /tank
sudo mkdir $NEWUSER
sudo chown $NEWUSER: $NEWUSER
sudo chmod 775 $NEWUSER
```

#### 公開設定

実験は[別記事](https://qiita.com/katz_engineer/items/d601ad8acfb90c8567f2#%E8%A8%AD%E5%AE%9A%E8%AA%AD%E3%81%BF%E5%87%BA%E3%81%97%E5%B0%82%E7%94%A8)に任せるとして、ここでは`taro`の読み書き設定をします。設定ファイルを書き換えた後はSambaを再起動します。

```console:ラズパイ5
cat <<___ | sudo tee -a /etc/samba/smb.conf >/dev/null

[$NEWUSER]
path = /tank/$NEWUSER
browsable = yes
guest ok = no
read only = no
___
sudo systemctl restart smbd
```

Windowsマシンからアクセスして読み書きを確認します。

最後に、これを真似て、既に作ってあった共有フォルダに対して共有設定をしました。

## 仕舞い

古いマシン(CPU:AMD)上で構築したZFSのNASを、ラズパイ5(CPU:ARM)に引き継ぎました。うまくいって良かったです。実はドキドキだったんですよ、バックアップも碌に取れない状況だったもので。
デバイスさえ無事ならこういう事が出来るのがZFSなんですよね。ZFSで良かった。ZFS最強です！