tips
- Use zfs destroy or rollback instaed of pkg_
delete -af Ports Collectionを使って頻繁にアプリケーションを更新している場合、
ビッグコミットのタイミングでほぼすべてのアプリケーションをビルドし直すといった状況になることがあります。またPorts Collectionは常に開発段階にあるため、 更新するタイミングによっては誤った依存関係が入り込むこともあります。 そうなった場合、
一旦すべてのアプリケーションを削除し、 もう一度入れ直した方がいい場合があります。典型的にはpkg_ delete -afですべてのアプリケーションを削除して、 もう一度Ports Collection経由ですべてをインストールします。 FreeBSDをワークステーションとして利用しているケースでは、
GnomeやKDEと代表的なアプリケーションを使っているだけで800ほどのアプリケーションやライブラリ、 ツールがインストールされます。必要なものに絞っても600を越えてきます。H/ Wの性能にも左右されますが、 pkg_ delete -afの実行が完了するまで30分から1時間といった時間がかかります。 こうした場合、
アプリケーションやライブラリがインストールされる/usr/ localと/var/ db/ pkgをファイルシステムごとクリアしてpkg_ delete -afの代わりにする方法があります。数十分というレベルから数十秒というレベルまで時間の短縮が可能です。/usr/ localに以下に作成した設定ファイルやデータもすべてクリアされますので、 必要なデータがある場合にはバックアップをとっておく必要がありますが、 動作が把握できているならファイルシステムごとのクリアはなかなか魅力的な方法です。 たとえば次のようにZFSでファイルシステムを割り当て運用します。
/usr/ localと/var/ db/ pkgをZFS上に作成 # zfs create tank/
usr # zfs create tank/ usr/ usr # zfs create tank/ var # zfs create tank/ var/ db # zfs create tank/ var/ db/ pkg # zfs set mountpoint=none tank/ usr # zfs set mountpoint=/usr/ local tank/ usr/ local # zfs set mountpoint=none tank/ var # zfs set mountpoint=none tank/ var/ db # zfs set mountpoint=/var/ db/ pkg tank/ var/ db/ pkg /usr/ localと/var/ db/ pkgの利用状況 % zfs list | grep -E "(var/
db/ pkg)|(usr/ local)" tank/ usr/ local 3. 55G 66. 3G 3. 55G /usr/ local tank/ var/ db/ pkg 51. 5M 66. 3G 51. 5M /var/ db/ pkg % pkg_
delete -afを実行するかわりに、 次のように一旦ファイルシステムをデストロイしてから、 ふたたび作成してクリアします。クリア後にアプリケーションのインストールを開始します。 一旦削除してからもう一度作成 # zfs destroy -f tank/
usr/ local # zfs destroy -f tank/ var/ db/ pkg # zfs create tank/ usr/ local # zfs create tank/ var/ db/ pkg # zfs set mountpoint=/usr/ local tank/ usr/ local # zfs set mountpoint=/var/ db/ pkg tank/ var/ db/ pkg destroyからcreateという作業の代わりに、
最初にtank/ usr/ localとtank/ var/ db/ pkgを作成した段階でスナップショットを作成し、 このスナップショットへロールバックするという方法もあります。 作成段階でスナップショットをとっておく # zfs snapshot tank/
usr/ local@initial # zfs snapshot tank/ var/ db/ pkg@initial # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT tank/ usr/ local@initial 17K - 18K - tank/ var/ db/ pkg@initial 17K - 18K - # destroyするかわりにスナップショットへロールバック # zfs rollback tank/
usr/ local@initial # zfs rollback tank/ var/ db/ pkg@initial destroyする方法もrollbackする方法も、
処理時間にはそれほど大きな違いはありません。ZFSを利用するとこうした作業を実現することができます。ファイルシステムレベルでの柔軟な運用が可能になるため、 これまでUFS+GEOMで実施してきた管理とはまったく違った視点からのアプローチが可能です。