Ikeda's Blog

USB接続の外付けHDDを、ラズパイ使ってNAS化した

構築に用いたもの

  • 外付けHDD(BUFFALO製品x1、I-O DATA製品x1) > 家に転がってたやつ
    • 途中で初期化するので、中身のデータは退避させておく
  • サンワサプライ カテゴリ8メッシュフラットLANケーブル
    • 構築途中で有線LANは必須と痛感
      • 初期設定だと、ラズパイのWi-Fiは一定時間でスリープする
      • それ以前に、めちゃくちゃ遅いので大きいデータのやり取りに向いてない
  • Raspberry Pi 4 スターターキット
    • 必要なもの全部揃ってるので、ラズパイ初めてだから選択
  • microSDアダプタ > 家に転がってたやつ
    • WindowsPCから、microSDカードにデータの書き込みを行うために使用した

構築手順

1. microSDにOSを再インストール(自PC)

スターターキットのmicroSDには、最初からNOOBSがインストールされているのですが、このNOOBSがどうやら非推奨になったらしく。
Raspberry Pi Imagerが公式から配布されているので、こちらを利用しました。

インストーラを使ってインストールし、起動。
microSDカードをPCにつないで、初期化。
※ストレージは各環境に合わせてください

初期化完了後、OSを「Raspberry Pi OS (Other) > Raspberry Pi OS Lite (64-bit)」の順で選択。
※GUI環境でも動くらしいが必要ないので、CUI環境にしたい

2. ラズパイ組み立て(物理)

ラズパイは、スターターキットに説明書があるので、その通りに組み立てる。
上記1でOSをインストールしたmicroSDカードをセットするのを忘れずに(一敗)
諸々の設定を行うために、モニタとキーボードを繋いで、ひとまずデスクにでも置いておく。

3. SSH接続できるようにする(Raspberry Pi)

/etc/dhcpcd.conf に以下を記載してIPアドレスを固定。
※IPアドレスはそれぞれの環境にあわせて調整

interface eth0
static ip_address=192.168.10.111/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

4. OpenMediaVaultをインストール(自PCからSSH接続)

インストール完了後、私の環境ではSSH接続できなくなりました。
後述する設定で解消できますが、念の為、SSH以外でもアクセスできる環境でこの作業はした方が面倒がなくてよろしいかと思います。(一敗)

インストール自体は、以下のコマンドで楽々。

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

5. 初期化や設定を行ってNAS化(自PC)

手順3で指定したIPに、ブラウザからアクセスします。(例ではhttp://192.168.10.111/
アカウントの初期設定は、

  • ID
    • admin
  • PASS
    • openmediavault

となっています。

5-1. パスワードの変更

初期パスワードから変更するのであれば、右上の人アイコンから可能です。

5-2. SSH接続設定

ユーザーの管理メニューから、ユーザーを作り、グループに「_ssh」を追加しておく。

5-3. 初期化

左メニューでストレージ > ディスクの順に選択。
HDDを選択して、ワイプをクリック。初期化します。

5-4. マウント

左メニューでストレージ > ファイルシステムの順に選択。
「+」アイコンをクリックして、「EXT4」を選択。
デバイスを指定し、保存ボタンを押す。
※完了まで時間がかかる場合があるので、小休止ポイント。

5-5. 共有フォルダ設定

左メニューでストレージ > 共有フォルダの順に選択。
「+」アイコンをクリックする。

各項目を入力/指定して保存する。

5-6. ユーザ作成

NASにアクセスしてファイルの読み書きをするユーザーを作成する。
左メニューで、ユーザー > ユーザーの順に選択。
「+」アイコンをクリックし、「作成」を選択。

ここで指定する名前とパスワードは、接続する際に求められるので、わかりやすくしておく方が良い。

5-7. 接続確認(自PC)

エクスプローラ等から、NASのIPを指定してアクセスする。
認証情報を入力してアクセスできれば成功。

6. 設置(物理)

部屋の隅に設置してHDD、LAN、電源を接続する。

ex. その他設定

Wi-Fiを無効化する

SSH接続し、以下のコマンドを実行する。

iwconfig wlan0 txpower off

定期リセット

OpenMediaVaultの管理画面にアクセスする。
左メニューで、システム > 電源管理 > スケジュールされたタスクの順に選択。
「+」アイコンをクリックし、スケジュールを登録する。

Webサーバも兼ねる

php8.2もあるので、例えば「動画を保存してあるディレクトリの中身を精査して、一覧表示するWEB画面」とか作れる。

1. OpenMediaVaultの管理画面を、別ポートで動かす

/etc/nginx/sites-enabled/openmediavault-webguiを開き、ポート部分を変更する

    listen *:80 default_server;
    listen [::]:80 default_server;

 ↓

    listen *:8000 default_server;
    listen [::]:8000 default_server;
2. NASの特定ディレクトリをWEBディレクトリとした設定ファイルを作成

/etc/nginx/sites-enabled/nas-serverを新規作成し、以下の内容で保存する
内容は、/etc/nginx/sites-enabled/openmediavault-webguiをコピーし、必要な部分だけ修正する。
※変更した箇所にコメントを追記しています。

server {
    # server_nameはもちろん変更
    server_name nas-server;
    # rootはNASの特定フォルダを指定。OpenMediaVaultの管理画面で、「ストレージ > 共有フォルダ」でアクセスすると、絶対パスが確認できる
    root /srv/dev-disk-by-uuid-4517deb2-270a-4da7-8cbb-a750d0acb5bd/NAS01/workspace/;
    index index.html;
    autoindex off;
    server_tokens off;
    sendfile on;
    large_client_header_buffers 4 32k;
    client_max_body_size 25M;
    # ログファイルは別になるよう変更
    error_log /var/log/nginx/nas-server_error.log error;
    access_log /var/log/nginx/nas-server_access.log combined;
    error_page 404 = $scheme://$host:$server_port/#/404;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~* /index.html|\.json$ {
        add_header Cache-Control "no-cache, must-revalidate";
        add_header Pragma "no-cache";
        expires 0;
    }
    location ~* \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.2-fpm-openmediavault-webgui.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 60s;
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    # OpenMediaVaultの管理画面から貰い受けたポートを使う
    listen *:80 default_server;
    listen [::]:80 default_server;
}
3. nginx再起動

systemctl reload nginx

4. 動作確認

設定したrootディレクトリに合わせた場所にindex.htmlを作成して、アクセスしてみる。
(私の環境ではhttp://192.168.10.111/
OpenMediaVaultの管理画面ではなく、index.htmlの内容が表示されれば成功。