pure ZFS 環境の構築 (前編)

 iTunes Store(Japan)
この記事の所要時間: 949

せっかくの夏休み中なので夏休みの自由研究と称して、自宅の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
  • 「110 Japan」を選択

  • System Console Keymap
  • 「Japanese 106」を選択

  • sysinstall Main Menu
  • 「Fixit」を選択

  • Please choose a fixit option
  • 「CDROM/DVD」を選択
    Fixit# のコマンドぷろんぷと画面に変わります。

パーティションの設定
  1. デバイスのマウント後、chrootする
  2. Fixit# mount -t devfs devfs /dist/dev
    Fixit# chroot /dist tcsh
    
  3. 接続ドライブの確認
  4. マシンに接続されたドライブの確認をします。

    # 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パーティションテープル)というのを使ってパーティショニングします。

  5. テーブルの初期化
  6. # dd if=/dev/zero of=/dev/ad1 bs=1m count=1
    
  7. カーネル zfs.ko の読み込み
  8. # kldload zfs.ko
    
  9. カーネルの確認
  10. # 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

  11. GPTスキームの作成
  12. # gpart create -s GPT ad1
    ad1 created
    

    ad1 created と出ればOK

  13. ブートストラップコードを保護されたMBRに埋め込み
  14. # gpart bootcode -b /boot/pmbr ad1
    ad1 has bootcode
    

    ad1 has bootcodeと出ればOK

  15. FreeBSD をブートできる専用の freebsd-boot パーティションを作成
  16. # gpart add -b 34 -s 128 -t freebsd-boot ad1
    ad1p1 added
    

    ad1p1 added と出ればOK

  17. ブートストラップコードのインストール
  18. # gpart bootcode -p /boot/gptzfsboot -i 1 ad1
    
  19. パーティション情報の確認
  20. # gpart show ad1
    =>       34  160086461  ad1  GPT  (76G)
             34        128    1  freebsd-boot  (64K)
            162  160086333       - free - (76G)
    

    boot用に 64K 使い、そのほかは未利用な状態

  21. ZFSパーティションの作成
  22. 残りの全領域を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)
    
  23. chroot 環境から出ます
  24. # exit
    

    /dist 内は readonly なので、この後の mountpoint 作成時に失敗するため chroot 環境から出ます。

  25. ZFS ストレージプールの作成
  26. Fixit# zpool create pzkw /dev/ad1p2
    
  27. ZFS ファイルシステムの作成
  28. 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
    
  29. スワップデバイスの設定
  30. Fixit# zfs create -V 4gb pzkw/swap
    Fixit# zfs set org.freebsd:swap=on pzkw/swap
    

    スワップデバイスのサイズは、 -V オプションで指定します。
    この場合は、実メモリが2GBなので、倍の 4GB をスワップとして利用しています。

  31. 使用容量制限の設定
  32. Fixit# zfs set quota=10g pzkw/system/home
    

    /home を10GBに制限しています。

  33. ファイルシステムの確認
  34. 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
    
  35. 圧縮の設定
  36. 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のインストールを行います。