QNAPの構築も一段落したため、やりたいこと「LinuxサーバとQNAPをつなぎ、冗長化を持たせた大容量ストレージにする」を開始します。

そもそもNFS (Network File System) とは?

NFSは、主にUNIXやLinuxなどのOS間でファイルを共有するために開発されたプロトコルです。

一番の特徴は、リモート(NASなど)にあるフォルダを、自分のコンピュータのディレクトリツリー(/mnt/qnap など)の一部として組み込めることです。
一度マウントしてしまえば、ユーザーやアプリからはそれがネットワーク経由であるということを意識せず、通常のファイル操作と同じコマンド(ls, cp, mvなど)で扱えるようになります。

主な用途

  • Webサーバーのデータ共有: 複数台のサーバーで同じ画像データなどを参照する場合。
  • バックアップ: サーバーのログやDBのダンプファイルをNASに直接書き込む。
  • 仮想化環境: 仮想マシンのディスクイメージを保存する場所(ストレージ)として利用。

他の共有方式(SMB/CIFS)との違い

よく比較されるものに、Windowsで一般的に使われる SMB (Server Message Block) があります。QNAPはどちらも使えますが、以下のような違いがあります。

特徴NFSSMB (Windows共有)
主なOSLinux / UNIXWindows (Linuxでも可)
設定のしやすさ非常にシンプル(IPベース)ユーザー名/パスワードが基本
パフォーマンスLinux間なら非常に高速以前は遅かったが今は高速
権限管理LinuxのUID/GIDに依存WindowsのACLに依存

今回目指したこと。

sequenceDiagram autonumber participant U as ユーザー participant S as Linuxサーバ (OS) participant NC as Nextcloud (アプリ) participant Q as QNAP (NAS) Note over S, Q: 1. インフラ層のマウント設定 S->>Q: NFSマウント要求 (linuxserver:/NFS) Q-->>S: 接続許可・ディレクトリを /mnt/qnap に結合 Note over U, Q: 2. Nextcloudでの外部ストレージ利用 U->>NC: ファイル一覧を表示 NC->>S: 外部ストレージ設定に基づき /mnt/qnap を参照 S->>Q: NFSプロトコル経由で実データにアクセス Q-->>S: フォルダ・ファイル情報を返す S-->>NC: データを透過的に引き渡し NC-->>U: ブラウザ上にQNAP内のファイルを表示 Note over U, Q: 3. ファイルのアップロード時 U->>NC: ファイルをアップロード NC->>S: /mnt/qnap 配下に書き込み命令 S->>Q: ネットワーク経由でQNAPにデータを転送・保存 Q-->>U: 保存完了

手順

以下、作業メモです。

ステップ1:QNAP側でのサービス有効化

  1. コントロールパネル > ネットワークとファイルサービス > Win/Mac/NFS/WebDAV を開く。
  2. NFSサービス タブで「NFSサービスを有効にする(v2/v3, v4)」にチェックを入れ、「適用」。

ステップ2:共有フォルダの権限設定

  1. コントロールパネル > 権限 > 共有フォルダ で対象フォルダ(例:NFS)の「アクセス権の編集」を開く。
  2. 「権限タイプの選択」を NFSホストのアクセス に切り替える。
  3. 「追加」 を押し、ホスト名に *(またはLinuxのIP)を入力。
  4. 重要設定:
    • 権限: 「読み取り/書き込み」を選択。
    • Squashオプション: rootユーザーで操作する場合は「なし(NO_ROOT_SQUASH)」を推奨。
  5. 設定を保存し、表示されている ネットワークパス(今回なら /NFS)をメモする。

ステップ3:Linuxサーバー側でのマウント操作

  1. ツールのインストール(未導入の場合):
    • sudo apt install nfs-common (Ubuntu/Debian)
    • sudo yum install nfs-utils (RHEL/CentOS)
  2. マウントポイントの作成:
    • sudo mkdir -p /mnt/qnap
  3. 手動マウントの実行:
    • sudo mount -t nfs QNAPのIP、ホスト名:/NFS /mnt/qnap
  4. 確認:
    • df -h を実行し、ファイルシステム欄に QNAP のパスと容量が表示されれば成功。

ステップ4:自動マウントの設定(永続化)

サーバー再起動後も自動で接続されるよう設定します。

/etc/fstabは正直編集したくないファイル筆頭です。可能な限り先にやっておくことを強く勧めます。

  • /etc/fstabバックアップ

※バックアップと言ったところで、失敗した瞬間にサーバが立ち亜が楽なるは普通に発生します。慎重を期してください。

sudo cp -pi /etc/fstab /path/to/backup/fstab.$(date +%Y%m%d)
  • バックアップ確認
diff -u /path/to/backup/fstab.$(date +%Y%m%d) /etc/fstab

差分がないことを確認します。

  • /etc/fstab追記:
QNAPのIP、ホスト名:/NFS  /mnt/qnap  nfs  defaults,_netdev  0  0

※自分の環境に合わせます。

  • /etc/fstab追記確認:
diff -u /path/to/backup/fstab.$(date +%Y%m%d) /etc/fstab

以下の差分を確認します。

+ QNAPのIP、ホスト名:/NFS  /mnt/qnap  nfs  defaults,_netdev  0  0

テスト

  • NFSマウント解除
sudo umount /mnt/qnap
  • fstabマウント
sudo mount -a
  • マウント確認
df -h

は味気ないので

{
  echo "| デバイスパス | タイプ | 全サイズ | 使用率 | マウントポイント |"
  echo "| --- | --- | --- | --- | --- |"
  df -hPT | grep -vE 'tmpfs|shm|devtmpfs' | tail -n +2 | awk '{printf "| %s | %s | %s | %s | %s |\n", $1, $2, $3, $6, $7}'
}

のワンライナーを用います。

デバイスパスタイプ全サイズ使用率マウントポイント
/dev/sda2ext4233G6%/
efivarfsefivarfs256K12%/sys/firmware/efi/efivars
/dev/sda1vfat1.1G1%/boot/efi
QNAP:/NFSnfs44.2T30%/mnt/qnap

などが表示されればOKです。

サーバの再起動

この段階で

sudo reboot

をかけておきます。序盤でfstabの不具合に気づかないと、後のサーバ運用そのものが詰みます。