pure ZFS 環境の構築 (前編)
せっかくの夏休み中なので夏休みの自由研究と称して、自宅のNAS(Network Attached Storage)を作ろうと思い、大学時代に使っていた FreeBSD の 8.0-RELEASE をインストールしてみました。
通常ならば、ファイルシステムはUFSになりますが、8.0-RELEASEでZFSはプロダクションレベルに達したそうで、なんとなく作ってみたくなったので、UFS+ZFSではなくファイルシステムを統一して、pure ZFS 環境を構築してみました。
ものすごく長い記事になってしまったので、前後編に分けました。
前編は、パーティショニングまで行い、後編はOSのインストールを行います。
この構築に際して、フリーランス時代に購入し、現在余っていたIBMのxSeries 206(8482-25X)を使いました。
インストール用DVDの作成
適当なミラーサイトから FreeBSD 8.0-RELEASE の DVD イメージをダウンロードします。
DVD イメージは gzip で圧縮されているので、適当なツールで解凍してから、DVDに焼いてください。
適当なミラーサイトはこちらから探してください。
インストール前の準備
BIOSの設定で、CD/DVDブートになっているか確認してください。
CD/DVDブートの設定については、ここでは割愛します。
DVDイメージから移動
DVDから起動すると、いつものインストール画面がでてきます。
- Country Selection
- System Console Keymap
- sysinstall Main Menu
- Please choose a fixit option
「110 Japan」を選択
「Japanese 106」を選択
「Fixit」を選択
「CDROM/DVD」を選択
Fixit# のコマンドぷろんぷと画面に変わります。
パーティションの設定
- デバイスのマウント後、chrootする
- 接続ドライブの確認
- テーブルの初期化
- カーネル zfs.ko の読み込み
- カーネルの確認
- GPTスキームの作成
- ブートストラップコードを保護されたMBRに埋め込み
- FreeBSD をブートできる専用の freebsd-boot パーティションを作成
- ブートストラップコードのインストール
- パーティション情報の確認
- ZFSパーティションの作成
- chroot 環境から出ます
- ZFS ストレージプールの作成
- ZFS ファイルシステムの作成
- スワップデバイスの設定
- 使用容量制限の設定
- ファイルシステムの確認
- 圧縮の設定
Fixit# mount -t devfs devfs /dist/dev Fixit# chroot /dist tcsh
マシンに接続されたドライブの確認をします。
# dmesg | grep "MB <" ad1: 78167MB <Maxtor 6Y080P0 YAR41BW0> at ata0-slave UDMA100 ad2: 152627MB <Seagate ST3160815AS 4.AAA> at ata1-master SATA150 ad3: 152627MB <Seagate ST3160815AS 4.AAA> at ata1-slave SATA150
x206に80GBのATA(Maxter)と160GBのSATA(Seagate)が接続しています。
今回、Maxterのディスクにシステムをインストールし、SeagateのディスクをSambaでの共有エリアとします。
ZFSをbootさせるには、今までのMBRのパーティション形式ではダメらしく、GPT(GUIDパーティションテープル)というのを使ってパーティショニングします。
# dd if=/dev/zero of=/dev/ad1 bs=1m count=1
# kldload zfs.ko
# kldstat Id Refs Address Size Name 1 16 0x80400000 8ef888 kernel 2 1 0x80cf0000 13b0e4 zfs.ko 3 2 0x80e2c000 3cec opensolaris.ko
zfs.ko と opensolaris.ko があればOK
# gpart create -s GPT ad1 ad1 created
ad1 created と出ればOK
# gpart bootcode -b /boot/pmbr ad1 ad1 has bootcode
ad1 has bootcodeと出ればOK
# gpart add -b 34 -s 128 -t freebsd-boot ad1 ad1p1 added
ad1p1 added と出ればOK
# gpart bootcode -p /boot/gptzfsboot -i 1 ad1
# gpart show ad1 => 34 160086461 ad1 GPT (76G) 34 128 1 freebsd-boot (64K) 162 160086333 - free - (76G)
boot用に 64K 使い、そのほかは未利用な状態
残りの全領域をZFSパーティションとして利用します。
# gpart add -b 162 -t freebsd-zfs ad1 ad1p2 added
ad1p2 added と出ればOK
このときのパーティション情報はこのようになっています。
# gpart show ad1 => 34 160086461 ad1 GPT (76G) 34 128 1 freebsd-boot (64K) 162 160086333 2 freebsd-zfs (76G)
# exit
/dist 内は readonly なので、この後の mountpoint 作成時に失敗するため chroot 環境から出ます。
Fixit# zpool create pzkw /dev/ad1p2
Fixit# zfs create pzkw/system Fixit# zfs create pzkw/system/home Fixit# zfs create pzkw/system/usr Fixit# zfs create pzkw/system/usr/src Fixit# zfs create pzkw/system/var
Fixit# zfs create -V 4gb pzkw/swap Fixit# zfs set org.freebsd:swap=on pzkw/swap
スワップデバイスのサイズは、 -V オプションで指定します。
この場合は、実メモリが2GBなので、倍の 4GB をスワップとして利用しています。
Fixit# zfs set quota=10g pzkw/system/home
/home を10GBに制限しています。
Fixit# zfs list NAME USED AVAIL REFER MOUNTPOINT pzkw 4.00G 70.8G 19K /pzkw pzkw/swap 4G 74.8G 16K - pzkw/system 95K 70.8G 305M /pzkw/system pzkw/system/home 18K 10.0G 117K /pzkw/system/home pzkw/system/usr 37K 70.8G 2.32G /pzkw/system/usr pzkw/system/usr/src 18K 70.8G 449M /pzkw/system/usr/src pzkw/system/var 18K 70.8G 44.5M /pzkw/system/var
Fixit# zfs set compression=gzip-1 pzkw/system/usr/src
/usr/src はgzip で圧縮するように設定。
圧縮の設定の確認は以下のようにします。
Fixit# zfs list -o name,used,available,compress,compressratio NAME USED AVAIL COMPRESS RATIO pzkw 4.00G 70.8G off 1.00x pzkw/swap 4G 74.8G off 1.00x pzkw/system 95K 70.8G off 1.00x pzkw/system/home 18K 10.0G off 1.00x pzkw/system/usr 37K 70.8G off 1.00x pzkw/system/usr/src 18K 70.8G gzip-1 1.00x pzkw/system/var 18K 70.8G off 1.00x
ちなみに、利用していくと以下のように圧縮レートが変わります。
% zfs list -o name,used,available,compress,compressratio NAME USED AVAIL COMPRESS RATIO pzkw 7.10G 67.7G off 1.23x pzkw/swap 4G 71.7G off 1.00x pzkw/system 3.10G 67.7G off 1.23x pzkw/system/home 117K 10.0G off 1.00x pzkw/system/usr 2.76G 67.7G off 1.25x pzkw/system/usr/src 449M 67.7G gzip-1 2.63x pzkw/system/var 44.5M 67.7G off 1.00x
以上で、インストール前のパーティショニング作業になります。
後編では、OSのインストールを行います。