ZFSで/usr/localを引っ越す

2013年12月31日NAS

FreeBSD 9.1をフルZFSで利用しています。

ソフトをインストールしまくっていたら、システム用のプール(rpool)をあふれさせてしまいました。

さらには、インストールされているPHPのバージョンを変更しようとして、逆に他にインストールされていたソフトを消してしまいました…。

こんなこともあろうかと、数日前に取ってあったスナップショットから、データを復旧できました。ZFS、すごすぎます…。

でも、/usr/local領域不足は否めません。そこで、/usr/localを容量の少ないrpoolからupoolに引っ越すことを検討しました。また、upoolはミラー構成になっているので、耐障害性が高いです。

ZFSファイルシステム

次の方法です。

  1. シングルユーザモードで起動
  2. rpool/root/usr/localのスナップショット作成
  3. upool/usr/local作成
  4. データコピー
  5. マウントポイント再設定

1. シングルユーザモードで起動

システム起動時のオプションで、シングルユーザモードを選んでください。

2. rpool/root/usr/localのスナップショット作成

システムが立ち上がったら、次の方法でスナップショットを作成します。

# zfs snapshot rpool/root/usr/local@snap20131227

3. upool/usr/local作成

新しくデータセットを作ります。"-o mountpoint=none"で自動マウントされない様にします。

# zfs create -o mountpoint=none upool/usr
# zfs create -o mountpoint=none upool/usr/local

4. データコピー

作ったスナップショットを、新しく作ったデータセットにコピーします。ZFSのストリームを使えば、楽チンです。

“-F"オプションを指定しないと、うまく行きませんでした。

# zsend rpool/usr/local@snap20131227 | zrecv -F upool/usr/local

5. マウントポイント再設定

データコピーが終わったら、マウントポイントを再設定します。

今までの、rpoolにあった/usr/localのマウントをしないようにし、新しく作ったupool/usr/localを、/usr/localにマウントするように設定します。

# zfs set mountpoint=none rpool/usr/local
# zfs set mountpoint=/usr/local upool/usr/local

zfs listコマンドで、確認しておいた方が良いと思います。

以上の設定が終わったら、通常通り、リブートします。

これで、upool/usr/localが、/usr/localとしてマウントされていれば、引っ越し完了です。

Posted by お市のかた