カテゴリー
FreeBSD

過去記事: Remove UFS!: FreeBSDをGPTを使ってpure ZFS環境にする

(この記事は2009年4月24日現在の記事です。転載するにあたり編集していないので、最新の情報を得るようにしてください)

FreeBSDのルートパーティションをZFSにする方法は,How to install FreeBSD 7.0 under ZFSにある方法が知られている.この方法では,カーネルを置くUFSパーティションは必要だった.ところが最近では,カーネル,スワップもZFSパーティションに置くことが可能になった.以下,方法を記述する.8-currentが入っていて,新しいディスクを2本買ってきた状態からスタート.(7から8に上げる際の注意点は以前の記述を参照).

ZFS対応のローダを作成:

/etc/make.confに「LOADER_ZFS_SUPPORT=YES」を追加してbuildworld & installworld.

gpartを使って新しいpoolのための領域を作る:

理論的なことはnorkさんの記事を参照.「GPT(PMBR)の場合」というのが今回の方法.

以下,新しく作るpoolの名前をboottankとし,ad4とad6に新しいディスクが刺さっているとする.


# gpart create -s GPT ad4
# gpart add -b 34 -s 128 -t freebsd-boot ad4
# gpart show ad4 (空きセクタ数をメモっておく)
# gpart add -b 162 -s さっきメモした空きセクタ数 -t freebsd-zfs ad4
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad4
(同じ処理をad6にも行う)

新しいpoolを作ってデータをコピーする:


# zpool create boottank mirror /dev/ad4p2 /dev/ad6p2
# zfs set mountpoint=none boottank
# zfs create boottank/root
# zfs create boottank/usr
# zfs create boottank/usr/home
# zfs create boottank/var
# zfs set mountpoint=/boottank boottank/root
# zfs set mountpoint=/boottank/usr boottank/usr
# zfs set mountpoint=/boottank/usr/home boottank/usr/home
# zfs set mountpoint=/boottank/var boottank/var
# cd /
# find -x . | cpio -pmd /boottank
# find -x /boot | cpio -pmd /boottank/boot
# find -x /usr | cpio -pmd /boottank/usr
(以下,元のZFSプールにあるファイルシステムごとにfind&cpioを繰り返す)

こまごまとした設定:


(スワップ領域確保&設定)
# zfs create -V 4g boottank/swap
# zfs set org.freebsd:swap=on boottank/swap

(起動設定)
# zpool set bootfs=boottank/root
# vi /boottank/boot/loader.conf
----
vfs.root.mountfrom="zfs:boottank/root"
----
# vi /boottank/etc/fstab
----
(/bootとswapの設定を削除)
----
# cp /boot/zfs/zpool.cache /boottank/boot/zfs

(マウントポイントの設定)
# zfs set mountpoint=/usr/home boottank/usr/home
# zfs set mountpoint=/usr boottank/usr
# zfs set mountpoint=/var boottank/var
# cd /
# zfs set mountpoint=legacy boottank/root

勝負の再起動:

ここで電源を切り,古いディスクを外す.新しいディスクのみで起動したら成功だ.おめでとう!

Share this...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Comments links could be nofollow free.