FreeBSD-13.0RELEASE on ZFS

投稿日:

Fedora Linuxを入れているPCをFreeBSDに変えたくなってごっそり入れ直してみた。そのときのメモ。

システム用のドライブ (ada0: SSD)とデータ用のドライブ (ada1: HDD) を別のzfsプールにする。

GPTパーティションとブートデバイスの設定

GPTとしてパーティションテーブル作成

元からGPTにはなっていたが念の為一度削除してから作成する。

gpart destroy -F ada0
gpart create -s gpt ada0

gpart destroy -F ada1
gpart create -s gpt ada1

ブート用パーティションの作成

UEFIとlegacy bootでやり方が違う。両方設定してもいいかもしれないが、今回はUEFIだけにした。

UEFIの場合

自動設定にするとサイトに書かれている内容と違う設定になっていたので、自動設定による設定に合わせる。

パーティションを作る。

gpart add -a 4k -s 260m -t efi -l efiboot0 ada0

FATでフォーマットし、ブートローダを配置する。
まずここに書いてあるとおりにする。

newfs_msdos -F 32 -c 1 /dev/ada0p1
mount -t msdosfs -o longnames /dev/ada0p1 /mnt
mkdir -p /mnt/EFI/BOOT
cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi

自動設定にすると以下のファイルが追加されていた。ものは同じ。

mkdir /mnt/EFI/freebsd
cp /boot/loader.efi /mnt/EFI/freebsd/

これだけだとUEFIがブートローダを見つけてくれなかったので下記を追加で設定。

 efibootmgr -a -c -l /mnt/EFI/freebsd/loader.efi -L 'FreeBSD UEFI'

アンマウントする (/mntはインストール用に後で使う)

umount /mnt

legacy bootの場合

MBR bootの場合はこちら。2つ目のコマンドはPMBRにアクティブフラグを立てる。これがないと起動しないシステムが過去にあったので念の為。

gpart add -a 4k -s 512k -t freebsd-boot -l boot0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart set -a active ada0

FreeBSDパーティションの作成

パーティション作成

1MBにそろえてパーティションを作成する。
SWAPは最初のディスク(ada0)にのみ作成

1台目

gpart add -a 1m -s 16G -t freebsd-swap -l swap0 ada0
gpart add -a 1m -t freebsd-zfs -l root0 ada0

2台目

gpart add -a 1m -t freebsd-zfs -l data1 ada1

zfsの事前準備

4kセクタ対応はgnopを作る方法ではなく、sysctlにashiftを設定する方法に変更。

kldload zfs
sysctl vfs.zfs.min_auto_ashift=12

システム用パーティション作成

システム用プール (rpool) の作成。1つめのpoolはcacheファイルはいらない。
※長いけど1行で入力する。

zpool create -o altroot=/mnt -O compression=lz4 -O checksum=fletcher4 -O atime=off -m none rpool /dev/gpt/root0

各ファイルシステムの作成

zfs create -o mountpoint=none rpool/ROOT
zfs create -o mountpoint=/ rpool/ROOT/default

zfs create -o exec=on -o setuid=off -o mountpoint=/tmp rpool/tmp

zfs create -o canmount=off -o mountpoint=/usr rpool/usr
zfs create rpool/usr/src
zfs create -o setuid=off rpool/usr/ports

zfs create -o canmount=off -o mountpoint=/var rpool/var
zfs create -o exec=off -o setuid=off rpool/var/audit
zfs create -o exec=off -o setuid=off rpool/var/crash
zfs create -o exec=off -o setuid=off rpool/var/log
zfs create -o atime=on -o exec=off -o setuid=off rpool/var/mail
zfs create -o exec=on -o setuid=off rpool/var/tmp

chmod 1777 /mnt/tmp 
chmod 1777 /mnt/var/tmp

zpool set bootfs=rpool/ROOT/default rpool

データ用パーティション作成

データ用プール (tank) の作成。cacheファイルが必要なのでこのタイミングで作成する。
※長いけど1行で入力する。

zpool create -o altroot=/mnt -o cachefile=/mnt/tmp/tank.cache -O compression=lz4 -O checksum=fletcher4 -O atime=off -m none tank /dev/gpt/data1

各ファイルシステムを作成。homeはユーザデータ用、exportはsamba等での共有用。

zfs create -o mountpoint=/home tank/home
zfs create -o exec=off -o setuid=off -o mountpoint=/export tank/export

インストール作業

exitでshellから抜けて、インストール (ファイルの展開) をする。

exit

最後の段階でインストール後の設定用shellに入るか聞かれるのでYESでshellに入る。
chroot で /mnt が / になっているので注意。

zfs周りの設定

echo 'zfs_enable="YES"' >> /etc/rc.conf
mv /tmp/tank.cache /boot/zfs/

/etc/fstabに以下を追加 (元が空なのですべて記載する。
fdescとprocはなくてもいいが、後で追加することになるので今のうちに入れておく。

# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/gpt/efiboot0	/boot/efi	msdosfs	rw	0	0
/dev/gpt/swap0	none	swap	sw	0	0
fdesc	/dev/fd	fdescfs	rw	0	0
proc	/proc	procfs	rw	0	0

最後に

終わったらexitで抜けるとインストーラ終了のダイアログが表示されるので再起動する。

なぜか、tank/home と tank/export がマウントされなかったので、再起動後にrootでログインし、以下のコマンドを実行し再起動。/home と /export がマウントされていることを確認する。

zpool import -f tank

コメントを残す

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