Ubuntu で mhddfs を使う

Ubuntu 環境で、複数のディスクを仮想的に1つにまとめ、大きな容量として扱うmhddfsの設定手順を説明します。

mhddfsの上流開発は 2012 年の 0.1.39 で止まっており、Debian および Ubuntu のパッケージも 0.1.39 を基にしたものです。同等の機能を持ち、開発が継続しているmergerfsがあるため、新規に導入する場合はmergerfsを使う方法があります。

設定項目

この手順で使用する項目を以下に定義します。ご自身の環境に合わせて読み替えてください。

前準備

Ubuntu のシステム更新

作業前に、パッケージの依存関係の問題を防ぐため、システム更新を実行します。 Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行.

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを更新 (依存関係の変更も含む)
sudo apt full-upgrade
# 更新をシステム全体に反映させるために再起動
sudo shutdown -r now

操作手順

mhddfs のインストール

標準リポジトリの mhddfs (0.1.39) には、セグメンテーションフォルトにより「Transport endpoint is not connected」が発生する不具合が報告されています。ここでは、この不具合を修正した派生版 (mhddfs-nosegfault) をビルドして導入します。

次のコマンドを実行して、ビルドに必要なパッケージを導入し、mhddfs をビルドしてインストールします。

sudo apt install -y build-essential libfuse-dev libattr1-dev uthash-dev pkg-config
cd /tmp
git clone https://github.com/vdudouyt/mhddfs-nosegfault
cd mhddfs-nosegfault
make
sudo cp mhddfs /usr/bin
ls -la /usr/bin/mhddfs

使用するハードディスクのフォーマット (警告:データ消失)

以下の mkfs.ext4 コマンドは、指定したドライブ上のすべてのデータを消去します。実行前に lsblk でデバイス名と容量を確認し、対象ドライブ(この例では /dev/sdb, /dev/sdc)が目的のものであること、必要なデータが残っていないことを確認してください。

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

以下のコマンドで、対象のハードディスク(ここでは /dev/sdb/dev/sdc)を ext4 ファイルシステムでフォーマットします。

sudo mkfs.ext4 /dev/sdb
sudo mkfs.ext4 /dev/sdc

マウント

各ドライブをマウントするディレクトリを作成します。

sudo mkdir /mnt1
sudo mkdir /mnt2

/etc/fstab にはデバイス名ではなく UUID を書きます。デバイス名 (/dev/sdb など) は接続順やハードウェア構成の変更で入れ替わることがあり、UUIDはフォーマット時にファイルシステムごとに割り当てられて変わらないためです。次のコマンドでUUIDを確認します。

sudo blkid /dev/sdb /dev/sdc

確認したUUIDを使って、/etc/fstab に各ドライブのマウント設定を追記します。UUIDの値は環境に合わせて置き換えてください。

echo "UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt1 ext4 defaults 0 2" | sudo tee -a /etc/fstab
echo "UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy /mnt2 ext4 defaults 0 2" | sudo tee -a /etc/fstab
sudo mount /mnt1
sudo mount /mnt2
ls /mnt1
ls /mnt2

次に、マウントポイント (/mnt1, /mnt2) を束ねて /mnt にマウントするための mhddfs 設定を /etc/fstab に追記します。

echo "mhddfs#/mnt1,/mnt2 /mnt fuse defaults,allow_other 0 0" | sudo tee -a /etc/fstab

allow_other オプションは、マウント操作を行ったユーザー以外も /mnt ディレクトリにアクセスできるようにします。単一ユーザーで使う場合は、このオプションを外すとアクセスをマウントしたユーザーに限定できます。

/etc/fstab の変更を反映させるため、以下のコマンドを実行します。/etc/fstab の誤りは起動失敗の原因になるため、再起動の前にこのコマンドでマウントできることを確認します。

sudo mount -a

最後に、mhddfs のマウントポイント (/mnt) がマウントされ、アクセスできることを確認します。フォーマット直後は空です。

df -h /mnt
ls /mnt

mhddfsは複数のディスクを1つの領域として見せますが、RAIDのようなデータの冗長化(耐障害性)機能はありません。ディスクが1台故障すると、そのディスクに保存されていたデータは失われます。重要なデータは別途バックアップを取得してください。