パーティションをshellで設定してRoot on ZFSにFreeBSD11インストール
FreeBSD10の入ったZPOOLから別のディスクにリストアしようとしましたがうまくいかず、FreeBSD11をクリーンインストールしました。FreeBSD11をインストールする時、ディスクを丸ごと使うなら自動モードで簡単にZFSとして使えます。細かくパーティションを分けて使おうとすると、shellから自分で設定する必要があります。かなりハマったので、メモとして残しておきます。
インストールしたホストは、i7、メモリ16GB、SSD 512GBを使用しています。
[amazonjs asin="B004FA8NOQ" locale="JP"] [amazonjs asin="B01EW6WLY0" locale="JP"]- インストールメディアの作成
- インストーラ起動
- GPTパーティション作成
- ZPOOL作成
- もろもろ設定
- 起動設定
- 再起動
1. インストールメディアの作成
まずは、FreeBSDのインストールメディアを作ります。USBメモリを使うのが便利です。次のウェブページからリンクをたどり、"…-amd64-memstick.img"をダウンロードします。例えば、"FreeBSD-11.0-RELEASE-amd64-memstick.img"です。
この後、ダウンロードしたイメージファイルをUSBメモリに書き込みます。ofで、USBメモリスティックを指定するのですが、これを間違うと既存のデータを破壊してしまいます。macOSの場合だと、diskutil listを、USBメモリを挿す前と挿した後で違いを見ればわかります。以下の例は、/dev/disk6だった場合です。
$ diskutil umountDisk /dev/disk6 $ sudo dd if=FreeBSD-11.0-RELEASE-amd64-memstick.img of=/dev/disk6 bs=512k $ diskutil eject /dev/disk6
インストールメディアを作る時、最初私は、USBメモリに書き込むイメージファイルとして、DVD用イメージを使っていて、USBメモリから起動できずに困りました。
2. インストーラ起動
起動すると次の画面になるので、Installを選びます。
次にキーボードを設定します。
次にホスト名を設定します。
追加でインストールするパッケージを選びます。
3. GPTパーティション作成
この記事のメインイベント、Shell起動です。Shell起動後、以下の手順で、GPTパーティション作成とZPOOL作成を進めます。
まずは、GPTパーティションの作成です。
# gpart destroy ada0 # gpart create -s gpt ada0 # gpart add -a 4k -t freebsd-boot -s 512k ada0 # gpart add -a 4k -t freebsd-zfs -s 128G -l zroot ada0 # gpart add -a 4k -t freebsd-zfs -s 8G -l zil ada0 # gpart add -a 4k -t freebsd-zfs -l l2arc ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
使用中のディスクだとgpart destroyでエラーになります。その場合はdestroyの後に-Fオプションをつけて、強制的にdestroyできます。
まず、gpart createでGPTディスクにします。
その後、gpart addで、起動領域、データ領域、キャッシュ領域の確保をします。-a 4kをつける事で、4kアラインのAFTディスクに対応できます。freebsd-bootは512kで、設定可能な最大サイズにします。zil(ログ)領域を確保しておきます。この大きさは、メインメモリの半分にします。使用しているホストは16GBのメモリを載せているので、8GBを指定しています。残りの領域をl2arc用(キャッシュ)に確保しておきます。
gpart bootcodeでブートローダーを書き込みます。
4. ZPOOL作成
次に、ZPOOLの設定です。
# zpool create -R /mnt rpool gpt/zroot # zfs create rpool/root cannot mount '/mnt/rpool/root': failed to create mountpoint filesystem successfully created, but not mounted # zfs set mountpoint=/ rpool/root # zpool export rpool # zpool import -R /mnt rpool # zfs create rpool/root/tmp # zfs create rpool/root/var # zfs create rpool/root/usr # zfs create rpool/root/usr/local
まず、zpoolでZFSのプールを作成します。-R /mntで、/mntにマウントされる様にするのが肝です。
zfs createでrootと言う名前のデータセットを作り、この下に各データセットを作ります。2段構成にするのは、snapshotをsend/recvでリストアする時に簡単に出来るようにする為です。
ただ、この時点で、/mnt/rpool/rootを作れないと言うエラーになります。この為、set mountpoint=/を設定します。設定後、正しくマウントさせる為に、一旦exportして、再度importします。この時も-R /mntが必要です。
この後、var, tmp, usr, usr/localを作ります。この辺りはお好みで。
この設定が終わったら、ctrl+dで抜ます。
5. もろもろ設定
インストーラに戻ると、インストール(ディスクへの書き込み)が始まります。
ディスクへの書き込み終了後、rootのパスワード設定になります。
ネットワークを設定します。
時間を設定します。必ず、UTCで設定してください。
起動サービスを選びます。
セキュリティ関係の設定みたいですが、よくわかりません。
root以外にユーザを追加する場合は、設定します。
心残りが無いか、聞かれます。
6. 起動設定
最後に、shellを起動するか聞かれます。
インストール終了後、再起動の前にもう一度shellを起動するか聞かれますので、Yesを選んで、shellを起動します。そして、次のコマンドを入力します。
# zpool set bootfs=rpool/root rpool # vi /mnt/etc/rc.conf
まず、起動システムとして、rpool/rootを使う設定をします。この設定をしないと、起動時に、"Can’t find /boot/zfsloader"と言うエラーになります。
そして、/mnt/etc/rc.confに次の行を追加します。
zfs_enable="YES"
これを追加しないと、zfs createで作ったデータセットをマウント出来なくて、例えば"can’t exec getty"と言うエラーになります。他のエラーも出ています。
この設定が終わったら、ctrl+dで抜けて、インストーラに戻ります。
7. 再起動
Rebootを選んで再起動が成功すれば完成です。
参考にさせていただいたウェブページ
- ひとりごと – 完全 ZFS Root への道
- FreeBSDでGPTを使う – Tamaのシステムメモ
- AFT(4k block) HDD を ZFS で使う場合の良い方法
- 最小限の設定でFreeBSDをZFSから起動する ( UNIX ) – アルファのブログ – Yahoo!ブログ
- Cloning a FreeBSD/ZFS Machine with ‘zfs send’ « blather.michaelwlucas.com
- RootOnZFS/GPTZFSBoot – FreeBSD Wiki
- Can’t exec getty error | The FreeBSD Forums
- How to mount zfs pool on boot? | The FreeBSD Forums
ディスカッション
コメント一覧
まだ、コメントがありません