ラズパイでファイルサーバを構築

はじめに

複数機器間でデータのやり取りを行う際や、共有目的でファイルサーバを用いるケースは多い。業務や家庭内用途でもクラウドサービスや市販のNASを活用している人も多く居ると思われる。今回はRaspberry Piを用いてファイルサーバを構築する方法を記載する。今回記載する構成(Raspberry Pi4+OpenMediaVault6)を用いたファイルサーバをこれまで1年以上可動させてきたが、先日、自宅のブレーカーが落ちたタイミングでSDカードが破損したため再構築と、電源断によるSDカード破損対策を実施した際の手順メモしておく。

使用する機器

・Raspberry Pi4(RAM 8GB)
Raspberry Pi3(RAM 1GB)でも動作は可能だがややRAM容量が不足するかもしれない。写真の例ではケースと放熱のためのファンを取り付けている。長期稼働していると埃が結構たまる。

・USB HDD
Buffalo 3TBモデルを使用。かなり昔のモデルだが、デスクトップPCで使用している外付けHDDをリプレースした際に余剰になったもの。余剰HDDが出てきたらファイルサーバにするのは有効な活用方法に思える。

使用するソフトウェア

OpenMediaValt6を用いる(以下OMV6と記載)。USBストレージを接続し、SMB/CIFSやNFS、Rsync対応のNASを構築することが出来る。Linux上にSMB等の必要なソフトウェアを入れてもファイルサーバを構築することは出来るが、OMV6ではNASに必要なものが一式揃っており、管理画面が充実しているため環境構築が非常に楽。

Raspberry Pi設定

使用OSはLegacyのLite版。Full版はそもそもOMV6サポート外。また、OMV6がDebian11(Bullseye)ベースであり、Raspberry Pi OS最新バージョン(bookworm)ではインストール中に失敗するため、Bullseyeを用いる。今回はRaspberry pi 4(8GB)を用いたため、64bit版のRaspberry Pi OS(Legacy) Lite(2023.12.13時点)を使用。

・SDカードへのOSイメージの書き込み
公式のRaspberry Pi Imagerを用いるのが楽。同時にユーザーアカウントやSSH設定を実施しておくことでその後の操作をSSH接続して実施できる。詳細は以前紹介した手順と同様。

Raspberry Piを起動しアップデートを実施しておく。

$ sudo apt update
$ sudo apt upgrade

USB HDDはOMV6の設定をするときまでは接続しなくて良い。

OpenMediaVault設定

【インストール】
コンソールから下記を実行。インストール後Raspberry Piが再起動する。

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

【アカウント作成】
Raspberry Piが再起動したらブラウザよりOMV6管理画面にアクセス。IPアドレスまたはホスト名.localでアクセス。

http://IPアドレス(またはホスト名.local)

初期パスワードはadmin/openmediavault。デフォルトパスワードはすぐに変更しておく。ついでに言語設定も日本語にしておく。

管理者のadminの他、使用するユーザーを作成

【IP設定】
IPが変わると扱いづらいのでスタティック(固定)にしておく。

【USB HDD接続・設定】
USB HDDを「ファイルシステム」から追加。すでにフォーマットされている場合はファイルシステムを選択するだけでOK。未フォーマットの場合はファイルシステムを指定してフォーマット。

共有フォルダを作成し、パーミッションを設定する。

SMBサービスを有効にする。

SDカード破損対策のための追加設定

Raspberry Piを長期稼働させるため、考えられる対策を講じる。SDカードの破損が懸念されるため、書き込み回数を軽減すること、電源断対策が重要になる。

【swap無効化】
ラズパイ常時稼働の際の定番設定。今回使用したのはラズパイ4でRAMが潤沢にあるのであまり効果はないと思われるが無効化しておくのが良さそう。

$ sudo swapoff --all
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile

swapファイルが0になっていることを確認。

$ free
              total        used        free      shared  buff/cache   available
Mem:        7999808      163588     7285360      167044      550860     7544516
Swap:             0           0           0

【BootパーティションのROM化】
Raspberry Pi OSでは公式の設定ツールであるraspi-configで簡単に実施できる。

$ sudo raspi-config

[4 Performance Options]→[P3 Overlay File System]と遷移

Would you like the overlay file system to be enabled?
<Yes> <No>

→Yes

The boot partition is currently read-only. This cannot
changed while an overlay file system is enabled.
<Ok>

→Ok

と選択するだけ。その後再起動($sudo reboot)。
これによりBootパーティションがRAM上で動作するため、電源断による破損に強くなる。

$ mount
overlay on / type overlay (rw,noatime,nodiratime,lowerdir=/lower,upperdir=/upper/data,workdir=/upper/work)

/dev/mmcblk0p1 on /boot type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)

/bootがro(read only)になっていることがわかる。これで結構電源断による破損リスクを軽減出来るはず。OSアップデート等、変更を加える際にはROM化を解除し、アップデートしてから再度ROM化することになる。

再度ReadWrite可能にする場合は、同じくraspi-configからoverlayを無効にしてから、/bootをrwでマウントする。raspi-configで設定変更するところはコマンドでも可。

$ sudo raspi-config nonint enable_overlayfs
$ sudo reboot

これだけだと/bootがroのままなので、rwで再マウント。

$ sudo mount -o remount,rw /boot

今後の展望

OSやライブラリのアップデートのたびにこの設定変更を行うのを手間と見るか、SDカードは壊れるものと考えて定期的にバックアップを取るか。しばらく使ってみて様子見してみる。