Ubuntuでmergerfsを使い、複数のストレージを仮想的に統合する
この記事では、複数のファイルシステムを仮想的に1つに統合するFUSE (Filesystem in Userspace) ベースのunionファイルシステム「mergerfs」の導入と基本的な設定方法をUbuntu環境で説明します。mergerfsを使うことで、物理的に異なる複数のディスクやパーティションを1つの大きなストレージ領域として扱えます。
mergerfsはストレージを統合しますが、RAIDのようなデータの冗長化(耐障害性)機能はありません。1台のディスクが故障すると、そのディスク上のデータは失われます。重要なデータは別途バックアップを取得してください。
前提条件
- Ubuntuがインストールされていること。
- 統合したい複数のファイルシステム(例: 別々のディスクやパーティション)がマウント済みであること。
sudoコマンドを利用できるユーザー権限があること。
事前準備: Ubuntu システムの最新化
mergerfsの導入前に、パッケージリストとインストール済みパッケージを更新します。以下のコマンドをターミナルで実行してください。
(参考: Ubuntuの基本的なセットアップ手順: 別ページ »)
# パッケージリストの情報を更新
sudo apt update
sudo apt -y upgrade
カーネルなどの更新が含まれた場合は、システムを再起動します。
sudo systemctl reboot
mergerfs のインストール
インストール方法は3通りあります。Ubuntuのリポジトリに含まれるmergerfsはリリースから時間が経ったバージョンであることが多く(例: Ubuntu 24.04 は 2.33.5、開発元の最新版は 2.42.0 系)、開発元は公式リリースのdebパッケージの利用を案内しています。
方法1: 公式リリースのdebパッケージをインストール
https://github.com/trapexit/mergerfs/releases から、使用中のUbuntuのコード名(lsb_release -cs で確認)とCPUアーキテクチャ(dpkg --print-architecture で確認)に合うファイルを選びます。
lsb_release -cs
dpkg --print-architecture
(バージョン、コード名、アーキテクチャは環境に合わせて置き換えます)
cd /tmp
wget https://github.com/trapexit/mergerfs/releases/download/2.42.0/mergerfs_2.42.0.ubuntu-noble_amd64.deb
sudo apt install -y ./mergerfs_2.42.0.ubuntu-noble_amd64.deb
mergerfs -V
方法2: Ubuntuリポジトリからインストール
手順が最も簡単な方法です。バージョンは開発元の最新版より古くなります。
sudo apt update
sudo apt install -y mergerfs
mergerfs -V
方法3: ソースコードからビルドしてインストール
buildtools/install-build-pkgs がビルドに必要なパッケージ(build-essential、dpkg-dev、debhelper、fakeroot など)を導入します。mergerfsはFUSEライブラリを同梱しているため、libfuse-dev は不要です。
(作業用ディレクトリへ移動し、ソースコードを取得)
cd /tmp
git clone https://github.com/trapexit/mergerfs.git
cd mergerfs
(タグ付きリリースを指定する。masterブランチは開発中のコードである)
git checkout 2.42.0
(ビルドに必要なパッケージを導入)
sudo buildtools/install-build-pkgs
(debパッケージを作成してインストール)
make deb
sudo apt install -y ../mergerfs_*.deb
(バージョン情報が表示されれば成功)
mergerfs -V
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 cache.files=off,category.create=mfs,func.getattr=newest,dropcacheonclose=false,minfreespace=10G,fsname=mergedStorage 0 0
主要なオプションの説明:
/mnt/hdd1:/mnt/hdd2: (ブランチ) 統合するソースディレクトリをコロン:で区切って指定します。3つ以上の指定や、ワイルドカード(例:/mnt/disk*)の指定もできます。/mnt/storage: 統合後のファイルシステムにアクセスするマウントポイントです。fuse.mergerfs: ファイルシステムタイプです。cache.files=off: ファイルのページキャッシュを無効にします。開発元が一般的な用途向けに案内している設定です。mmapを使うソフトウェアを扱う場合は、カーネル 6.5 以前ではcache.files=auto-fullとdropcacheonclose=trueの組み合わせが案内されています。category.create=POLICY: 新規ファイルやディレクトリを作成する際のブランチ選択ポリシーを指定します。mfs(most free space): 空き容量が最も多いブランチに作成します。ディスク使用量を分散させる用途に使います。pfrd(percentage free random distribution): 空き容量に比例した確率でブランチをランダムに選びます。mergerfs 2.40 以降のデフォルトです。epmfs(existing path, most free space): 同じ相対パス(ディレクトリ)が既に存在するブランチの中から、空き容量が最も多いものを選びます。該当するブランチがない場合はエラーになります。関連ファイルを同じディスクにまとめる用途に使います。- 他のポリシーは公式ドキュメントに一覧があります。
func.getattr=newest: 同じパスのファイルが複数のブランチにある場合、mtimeが最も新しいものの情報を返します。minfreespace=SIZE: 空き容量がこの値を下回るブランチを、ファイル作成の対象から除外します (例:10G,500M)。既定値は 4G です。fsname=NAME:dfやmountで表示されるファイルシステム名を設定します (例:mergedStorage)。moveonenospc: 書き込みが容量不足 (ENOSPC/EDQUOT) で失敗したとき、他のブランチへファイルを移動して書き込みを再試行します。mergerfs 2.40 以降は既定で有効 (pfrd) です。
allow_other と use_ino は、以前のバージョンで使われていたオプションです。allow_other は mergerfs 2.35.0 以降ではroot実行時に自動で設定され、use_ino は inodecalc に置き換えられました。新規の設定では指定しません。
設定の反映と確認:
/etc/fstab の編集後、以下のコマンドでマウントを実行します。エラーメッセージが表示されないことを確認してください。
sudo mount -a
エラーが発生した場合は /etc/fstab の記述を見直します。/etc/fstab の誤りは起動失敗の原因になるため、再起動の前にこのコマンドでマウントできることを確認します。
マウント結果と容量を確認します。df -h で、マウントポイント (例: /mnt/storage) のサイズがブランチの合計容量に近い値になります。なお、ext4のような予約ブロックを持つファイルシステムでは、mergerfsは非特権ユーザーが使える空き容量 (f_bavail) を、df は全体の空き容量 (f_bfree) を使うため、値が完全には一致しません。
df -h /mnt/storage
補足事項
アンマウント:
mergerfsでマウントしたファイルシステムを解除(アンマウント)するには、以下のコマンドを実行します。
sudo umount /mnt/storage
/etc/fstab の記述を削除またはコメントアウトしない限り、次回のシステム起動時には再度自動マウントされます。
冗長性について:
mergerfsは複数のストレージを束ねて1つの大きな領域として見せますが、RAIDのようなデータの冗長化(耐障害性)機能はありません。統合しているディスクが1台故障すると、そのディスクに保存されていたデータは失われます。重要なデータを保存する場合は、別途バックアップを取得するなどのデータ保護策を併用してください。冗長性が必要な場合は、SnapRAIDやRAID、ZFSなどと組み合わせる構成が使われます。
詳細情報:
mergerfsにはこの記事で説明した以外にも多くのオプションとポリシーがあります。設定やトラブルシューティングの詳細は公式ドキュメントを参照してください。
- 公式ドキュメント: https://trapexit.github.io/mergerfs/
- コマンドラインでマニュアルを参照:
man mergerfs - GitHubリポジトリ: https://github.com/trapexit/mergerfs