Ubuntuでmergerfsを使い、複数のストレージを仮想的に統合する
【概要】
この記事では、複数のファイルシステムを仮想的に1つに統合するためのFUSE (Filesystem in Userspace) ベースのunionファイルシステム「mergerfs」の導入と基本的な設定方法をUbuntu環境で解説します。mergerfsを使うことで、物理的に異なる複数のディスクやパーティションをあたかも1つの大きなストレージ領域のように扱え、データ管理と保存を簡素化できます。
注意: mergerfsはストレージを統合しますが、RAIDのようなデータの冗長化(耐障害性)機能は提供しません。
前提条件
- Ubuntuがインストールされ、基本的なネットワーク設定が完了していること。
- 統合したい複数のファイルシステム(例: 別々のディスクやパーティション)がシステムに認識され、マウント可能な状態であること。
sudo
コマンドを利用できるユーザー権限があること。
事前準備: Ubuntu システムの最新化
mergerfsの導入に先立ち、システムのパッケージリストとインストール済みパッケージを最新の状態に更新することを推奨します。これにより、セキュリティの向上や依存関係の問題発生を防ぎます。 以下のコマンドをターミナルで実行してください。
(参考: Ubuntuの基本的なセットアップについては、別ページ » を参照してください。)
sudo apt -y update
sudo apt -y upgrade
(任意) カーネルなどシステムの中核に関わるアップデートが含まれた場合は、システムを再起動すると安全です。
# 必要に応じて実行
sudo systemctl reboot
mergerfs のインストール
mergerfsは、Ubuntuの標準リポジトリからインストールする方法と、GitHubからソースコードを取得してビルドする方法があります。通常はリポジトリからのインストールが手軽で推奨されます。最新機能を利用したい場合はソースコードからビルドします。
方法1: Ubuntuリポジトリからインストール (推奨)
(注記: まずはこちらの方法を試してください。)
sudo apt update
sudo apt install mergerfs
# インストール確認
mergerfs -V
方法2: ソースコードからビルドしてインストール (最新版を利用したい場合)
リポジトリ版が存在しない、または最新版が必要な場合は、以下の手順でソースコードからビルドします。
1. ビルドに必要な依存パッケージをインストール
(ビルドツール、git、FUSE開発ライブラリ、拡張属性ライブラリ、パッケージ設定ツールなど)
(注: パッケージ名はUbuntuのバージョンによって異なる場合があります)
sudo apt -y install build-essential git libfuse-dev libattr1-dev pkg-config xattr
2. ソースコードの取得とビルド
(作業用の一時ディレクトリに移動)
cd /tmp
(GitHubから最新のソースコードをクローン)
git clone https://github.com/trapexit/mergerfs.git
(ソースコードディレクトリに移動)
cd mergerfs
(ソースコードをコンパイル)
make
(コンパイルしたプログラムをシステムにインストール)
sudo make install
3. インストールの確認 (任意)
(バージョン情報が表示されれば成功)
mergerfs -V
mergerfs の設定と自動マウント
mergerfsを利用して複数のファイルシステムを統合し、システム起動時に自動的にマウントされるように設定します。
設定前の準備:
- 統合元ディレクトリの確認/マウント: 統合したいファイルシステム(ブランチと呼びます)がマウントされていることを確認します。ここでは例として、別々のディスクが
/mnt/hdd1
と/mnt/hdd2
にマウントされているとします。これらのディレクトリが存在し、アクセス可能であることを確認してください。ls /mnt/hdd1 ls /mnt/hdd2
- 統合先マウントポイントの作成: 統合後のファイルシステムとしてアクセスするための空のディレクトリを作成します。ここでは例として
/mnt/storage
を作成します。sudo mkdir -p /mnt/storage
fstabへの追記:
システム起動時に mergerfs を自動マウントさせるため、/etc/fstab
ファイルに設定を追記します。/etc/fstab
はシステムの重要な設定ファイルのため、編集前にバックアップを取得することを強く推奨します。
バックアップ作成 (日付付き)
sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
エディタでfstabを開く (例: nano)
sudo nano /etc/fstab
以下の行を /etc/fstab
の末尾に追加します。ご自身の環境に合わせて、統合元パス(ブランチ)と統合先マウントポイントを修正してください。
# <統合元パス(コロン区切り)> <統合先マウントポイント> <タイプ> <オプション>
/mnt/hdd1:/mnt/hdd2 /mnt/storage fuse.mergerfs defaults,allow_other,use_ino,category.create=epmfs,minfreespace=10G,fsname=mergedStorage 0 0
主要なオプションの説明:
/mnt/hdd1:/mnt/hdd2
: (ブランチ) 統合したいソースディレクトリ(マウントポイント)をコロン:
で区切って指定します。3つ以上指定することも可能です。ワイルドカード(例: `/mnt/disk*`)も利用できます。/mnt/storage
: 統合後のファイルシステムとしてアクセスするマウントポイントです。fuse.mergerfs
: ファイルシステムタイプとしてfuse.mergerfs
を指定します。defaults
: 標準的なマウントオプション (rw
,auto
など) を適用します。allow_other
: マウントを実行したユーザー(通常root)以外からもファイルシステムにアクセスできるようにします。複数ユーザーで利用する場合や、特定のアプリケーション(例: Samba, NFS)から利用する場合に通常必要です。use_ino
: mergerfsがinode番号を管理するようにします。ハードリンクの互換性など、POSIX準拠の動作のために推奨されます。category.create=POLICY
: 新規ファイルやディレクトリを作成する際のディスク選択ポリシーを指定します。epmfs
(Existing Path, Most Free Space - デフォルト): 既存のパス(ディレクトリ)が見つかればそのパスが存在するディスクの中で最も空き容量が多いものに作成。見つからなければブランチ全体で最も空き容量が多いディスクに作成します。関連ファイルを同じディスクにまとめたい場合に適しています。mfs
(Most Free Space): ブランチ全体で最も空き容量が多いディスクに作成します。パスの場所は考慮せず、ディスク使用量を均等に分散させたい場合に有効です。- 他にも多くのポリシーがあります(詳細は `man mergerfs` を参照)。
minfreespace=SIZE
: ファイル作成時に、この値を下回る空き容量しかないディスクは書き込み対象から除外します。ディスクフルの防止に役立ちます (例: `10G`, `500M`)。fsname=NAME
: `df` コマンドなどで表示される際のファイルシステム名を設定します。分かりやすい名前を付けておくと管理しやすくなります (例: `mergedStorage`, `mediaPool`)。
便利な追加オプションの例:
moveonenospc=true
: 書き込み中にディスク容量が不足した場合、他のディスクへ自動的にファイルを移動して書き込みを試みます。ディスクスペース不足による書き込みエラーを減らせます。dropcacheonclose=true
: ファイルを閉じる際に、関連するカーネルキャッシュを破棄するように指示します。メモリ使用量を抑えたい場合に有効な場合があります。
設定の反映と確認:
/etc/fstab
の編集後、以下のコマンドでマウントを実行し、設定が正しいか確認します。エラーメッセージが表示されないか注意してください。
sudo mount -a
(もしエラーが発生した場合は、/etc/fstab
の記述を見直してください。再起動する前にこのコマンドで正しくマウントできるか確認することが重要です。)
正しくマウントされたか、統合後の容量を確認します。df -h
コマンドで、指定したマウントポイント (例: /mnt/storage
) のサイズが、統合元ブランチの合計容量に近い値になっていることを確認します。個々のディスク使用率ではなく、統合された全体の容量が表示されます。
df -h /mnt/storage
補足事項
アンマウント:
mergerfsでマウントしたファイルシステムを一時的に解除(アンマウント)したい場合は、以下のコマンドを実行します。
sudo umount /mnt/storage
(/etc/fstab
の記述を削除またはコメントアウトしない限り、次回のシステム起動時には再度自動マウントされます。)
重要な注意点: 冗長性について
繰り返しになりますが、mergerfsは複数のストレージを束ねて大容量に見せる機能を提供しますが、RAIDのようなデータの冗長化(耐障害性)機能はありません。 統合しているディスクのうち1つでも物理的に故障した場合、そのディスクに保存されていたデータは失われる可能性があります。
重要なデータを保存する場合は、mergerfsを利用する場合でも、必ず別途バックアップを取得するなどのデータ保護策を講じてください。
詳細情報:
mergerfsにはこの記事で紹介したもの以外にも多くのオプションや書き込みポリシーが存在します。より詳細な設定やトラブルシューティングについては、公式のドキュメントを参照してください。
- コマンドラインでマニュアルを参照:
man mergerfs
- GitHubリポジトリのREADMEを確認する: https://github.com/trapexit/mergerfs