Ubuntuでmergerfsを使い、複数のストレージを仮想的に統合する

【概要】

この記事では、複数のファイルシステムを仮想的に1つに統合するFUSE (Filesystem in Userspace) ベースのunionファイルシステムmergerfs」の導入と基本的な設定方法をUbuntu環境で説明します。mergerfsを使うことで、物理的に異なる複数のディスクやパーティションを1つの大きなストレージ領域として扱えます。

mergerfsはストレージを統合しますが、RAIDのようなデータの冗長化(耐障害性)機能はありません。1台のディスクが故障すると、そのディスク上のデータは失われます。重要なデータは別途バックアップを取得してください。

前提条件

事前準備: 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 の設定と自動マウント

複数のファイルシステムを統合し、システム起動時に自動マウントされるように設定します。

設定前の準備:

  1. 統合元ディレクトリの確認: 統合したいファイルシステム(ブランチと呼びます)がマウントされていることを確認します。ここでは例として、別々のディスクが /mnt/hdd1/mnt/hdd2 にマウントされているとします。
    ls /mnt/hdd1
    ls /mnt/hdd2
    
  2. 統合先マウントポイントの作成: 統合後のファイルシステムにアクセスするための空のディレクトリを作成します。ここでは例として /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

主要なオプションの説明:

allow_otheruse_ino は、以前のバージョンで使われていたオプションです。allow_other は mergerfs 2.35.0 以降ではroot実行時に自動で設定され、use_inoinodecalc に置き換えられました。新規の設定では指定しません。

設定の反映と確認:

/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にはこの記事で説明した以外にも多くのオプションとポリシーがあります。設定やトラブルシューティングの詳細は公式ドキュメントを参照してください。