余ったHDDをmergerfsで統合!Linuxで大容量NASを構築する方法

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

バラバラなHDD管理の悩み

ホームサーバー愛好家にとって、ストレージの「かき集め」はよくある光景です。ノートPCから取り出した古い2TB、セールで購入した4TB、そして新調した8TBなど。これらを通常通り /mnt/disk1/mnt/disk2 に個別にマウントしていると、すぐに管理の悪夢に直面することになります。

2TBのディスクが容量不足(赤色表示)になったら? 空き容量を作るために、わざわざデータを別のディスクへ「引っ越し」させなければなりません。伝統的なRAID(RAID 5や6)を使う方法もありますが、すべてのディスクを同じ容量で揃える必要があり、そうでない場合は容量が無駄になってしまうという厳しい制約があります。

自宅で5年間ラボを運用してきた私がたどり着いた「救世主」が、mergerfs です。これは強力なユニオンファイルシステム(union filesystem)で、既存のデータを書き換えることなく、すべてのディスクを一つのマウントポイント(例:/mnt/storage)に統合してくれます。

なぜ個人用途でmergerfsがRAIDより優れているのか?

複雑なRAIDアレイ構築に頭を悩ませる代わりに、mergerfsは圧倒的な自由度を提供します:

  • データは常に安全: mergerfsはあくまでオーバーレイ(重ね合わせ)です。万が一サーバーが故障しても、HDDを抜いて他のPCに接続すれば、すぐにファイルを読み取ることができます。
  • 自由にミックス&マッチ: 500GBのHDDと18TBのHDDを組み合わせても、1バイトも無駄にすることなく統合できます。
  • HDDを休ませることができる: すべてのドライブを同時に回転させるRAIDとは異なり、mergerfsは必要なファイルがあるドライブだけにアクセスします。他のドライブはスリープ(スピンダウン)させて電気代を節約し、寿命を延ばすことができます。
  • 一瞬で拡張可能: 新しいHDDを追加する作業は、設定ファイルを書き換えるだけのわずか30秒で完了します。

Linuxへのクイックインストール

ほとんどのLinuxディストリビューションの公式リポジトリで提供されています。安定性の面から、UbuntuまたはDebianでの使用をおすすめします。

Debian/Ubuntuの場合は、以下のコマンドを実行します:

sudo apt update && sudo apt install mergerfs

FedoraやRHEL系のディストリビューションの場合は:

sudo dnf install mergerfs

mergerfs -V を実行して、準備ができているか確認しましょう。

実際のディスク統合設定

システムにext4でフォーマット済みの3つのHDDがあり、すでに以下のようにマウントされていると仮定します:

  • /mnt/disk1 (2TB)
  • /mnt/disk2 (4TB)
  • /mnt/disk3 (8TB)

目標は、これらを /mnt/storage という一つの巨大な「ストレージプール」にすることです。

ステップ1:統合マウントポイントの作成

sudo mkdir -p /mnt/storage

ステップ2:/etc/fstabでの自動マウント設定

起動時に自動でディスクが統合されるよう、/etc/fstab ファイルの末尾に以下の設定行を追加します。

sudo nano /etc/fstab

以下の行を貼り付けます(パスはご自身の環境に合わせて変更してください):

# <ソース> <マウントポイント> <ファイルシステム> <オプション> <dump> <pass>
/mnt/disk* /mnt/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,category.create=mfs 0 0

私の経験に基づいた「黄金のパラメータ」の解説:

  • /mnt/disk*: ワイルドカードを使用することで、disk1, disk2…といったすべてのディレクトリを自動的に認識させることができ、非常に便利です。
  • allow_other: すべてのユーザーにアクセス権を付与します。これを忘れると、PlexやJellyfinなどのアプリで「Permission Denied(権限拒否)」エラーが発生します。
  • category.create=mfs: (Most Free Space) 新しいファイルを空き容量が最も多いディスクに優先的に書き込み、各ディスクの容量使用率をバランスよく保ちます。
  • moveonenospc=true: コピー中に一つのディスクがいっぱいになった場合、自動的に別の空きディスクを探して継続し、作業が中断されるのを防ぎます。

ステップ3:設定の有効化

再起動せずにマウントを実行するには、以下のコマンドを実行します:

sudo mount -a

df -h コマンドで結果を確認します。魔法のように14TB(2+4+8の合計)のパーティションが表示されるはずです:

Filesystem      Size  Used Avail Use% Mounted on
1:2:3            14T  7.2T  6.8T  51% /mnt/storage

賢い書き込みポリシーの選び方

category.create パラメータによって、ファイルがどこに保存されるかが決まります。実用的な2つの選択肢を紹介します:

  1. mfs: 最も空き容量が多いディスクを優先します。映画や写真の保存など、一般的な用途に最適な選択肢です。
  2. epmfs: 同じディレクトリ内のファイル(例:あるドラマの全エピソード)を同じ物理ディスクにまとめたい場合は、このポリシーを使用します。これによりアクセス時間が短縮され、複数のHDDが同時にスピンアップするのを防げます。

データ安全に関する重要な注意点

肝に銘じておくべきことは、mergerfsはバックアップソリューションではないということです。物理ディスクが1台故障すれば、そのディスクに入っていたデータは失われます。

完璧なシステムを構築するために、私はよく mergerfsとSnapRAIDを組み合わせて 使用しています。mergerfsで利便性のためにディスクを統合し、SnapRAIDでディスク故障に備えた復旧ファイル(パリティ)を作成します。これは現在のホームサーバーにとって、柔軟性と安全性を両立させた最強のコンビと言えるでしょう。

実際、私の環境では1GbpsのLAN経由で常に110-115MB/sの安定した速度が出ており、FUSEレイヤーによる顕著な パフォーマンス低下 は感じられません。もし手元に余っている 古いHDD があるなら、今すぐmergerfsでストレージサーバーを構築してみましょう!

Share: