Ubuntu 24.04のインストール時に「ZFS」を選択すると、スナップショット機能などが使えて便利ですが、ディスク容量が少ないとすぐに「空き容量不足」に陥ることがあります。
今回は、
OSを入れたNVMe(120GB)が満杯になり、手元に未使用のSSD(500GB)がある
という状況を想定し、再インストールなしで /home を丸ごと大容量ディスクへ引っ越す手順を解説します。
1. 現状の把握と原因の特定
まず、どのディスクがどれくらい使われているかを確認します。
# ディスクの物理的な接続確認
lsblk
# ZFSプールの状態確認
zpool list
zfs list
UbuntuのZFSデフォルト設定では、/ (ルート) や /home が同じプール(rpool)を共有しているため、どちらかが肥大化するとシステム全体が動かなくなります。
2. 新しいディスクの準備(ZFSプールの作成)
未使用のディスク(例:/dev/sda)を、新しいデータ保存用のプールとして初期化します。
# 新しいプール「tank」を作成(既存のNTFS等がある場合は -f で強制上書き)
sudo zpool create -f tank /dev/sda1
# 移動先となるデータセットを作成
sudo zfs create tank/home
# 一時的なコピー先としてマウント
sudo zfs set mountpoint=/home_new tank/home
3. データの同期(rsync)
既存のユーザーデータを、新しいディスクへ属性を保持したままコピーします。
# 権限やリンクを維持してコピー(スラッシュの有無に注意)
sudo rsync -avPX /home/ /home_new/
4. マウントポイントの切り替え(ここが肝!)
UbuntuのZFS管理(zsys)が干渉しないよう、慎重にマウントポイントの設定を書き換えます。
# 1. カレントディレクトリを /home 以外に移動
cd /
# 2. 新しいディスクを次回の起動で /home になるよう設定
sudo zfs unmount tank/home
sudo zfs set mountpoint=/home tank/home
# 3. 古いディスク(rpool側)の /home を退避させる
# 使用中のためエラーが出ることがありますが、-u を使って設定だけ書き換えます
sudo zfs set canmount=noauto rpool/USERDATA/username_xxxx
sudo zfs set mountpoint=/home_old -u rpool/USERDATA/username_xxxx
5. 再起動と後処理
設定を反映させるために再起動します。
sudo reboot
再起動後、容量を確認して大容量ディスクが割り当たっていれば成功です!
df -h /home
# 400G以上の空きが表示されればOK
最後に、システムディスク(120GB側)を圧迫していた古いデータを削除して、空き容量を完全に確保します。
# 動作確認後、古いデータセットを削除
sudo zfs destroy rpool/USERDATA/username_xxxx
まとめ
今回の手順のポイントは以下の通りです:
- OS(システム):高速なNVMe(120GB)で快適に動作
- データ(/home):大容量なSSD(500GB)で広々と使用
- ZFSの恩恵:パーティションのサイズ変更に悩まされることなく、マウントポイントの変更だけでディスクを差し替え可能
ディスクが溢れても、ZFSなら「後出し」で容量を拡張できます。ぜひ試してみてください!


コメント