FreeBSD > Install FreeBSD 9.0-Release on UFS + ZFS

Top > FreeBSD > Install FreeBSD 9.0-Release on UFS + ZFS

Install FreeBSD 9.0-Release on UFS + ZFS



FreeBSD 8.2インストール以降作業が進展していません
FreeBSD 9.0-RELEASEがでましたので、あらためて仕切りなおしです
また、USB Flashメモリでのpure ZFSだと起動が遅いため、"/"のみ UFS 、他をZFSにインストールします
pure ZFSなら"FreeBSD/Install FreeBSD 8.2-RC2 on pure ZFS"も参考にしてください
ZFSについては"ZFSTuningGuide"を参考にしています


インストール準備


The FreeBSD Projectから必要なイメージをダウンロードします
atom 330は64bitCPUなので、amd64のものを探します

USB Flashメモリからインストール

USB Flashメモリからインストールする場合は、FreeBSD-9.0-RELEASE-amd64-memstick.imgをダウンロードし、
次のコマンドでインストールします

# dd if=FreeBSD-9.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=10240 conv=sync

of=/dev/da0 は適切に設定してください
Windowsの場合は DD for windowsを使用してください

USB Flashメモリから起動するとインストール画面になりますので環境に合わせて設定します

  • KeyMap Selection
    non-default key mapping か 聞かれているので、
    Yes と選択した後
    Japanese 106 を選択
    
  • Set Host name
    Host 名を入力します
    後で変更できるのでいったん適当に入力してもかまいません
    
  • Distribution Select
    何も選択せずに OK で抜けます
    
  • Partitioning
    Shell を選択
    

ディスク・gptブート領域 [gpart]

  • インストールするディスクを検索します
    # dmesg | grep "[ad][ad][0-9]"
    ada0: <WDC WD15EARS-00MVWB0 50.0AB50> ATA-8 SATA 2.x device
    ...
    ada1: <Hitachi HDT721010SLA360 ST6OA3AA> ATA-8 SATA 2.x device
    ...
    ada2: <WDC WD20 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    ...
    ada3: <Hitachi HDT721010SLA360 ST6OA3AA> ATA-8 SATA 2.x device
    ...
    da0: <WDC WD15 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    ...
    da1: <BUFFALO USB Flash Disk 3.10> Removable Direct Accesss SCSI-0 device
    ...
    da2: <WDC WD20 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    ...
    da3: < Patriot Memory PMAP> Removable Direct Access SCSI-0 device 
    ...
    

    今回のインストール先はda3になります

  • パーティションテーブルを削除します
    # gpart destroy -F da3
    
  • gptパーティションを作成します
    # gpart create -s gpt /dev/da3
    
  • ブート用パーティションを作成します
    # gpart add -s 64k -t freebsd-boot da3
    
  • ルート用UFSパーティション(450M)を作成します
    # gpart add -s 450m -t freebsd-ufs -l flash0ufs da3
    # newfs -i 4096 -j /dev/gpt/flash0ufs
    
  • ZFSパーティション(7G)を作成します
    # gpart add -s 7g -t freebsd-zfs -l flash0zfs da3
    
  • Protected MBR と gpt用UFSブートローダを書き込みます
    # gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da3
    bootcode written to da3
    
  • gptパーティションを確認します
    # gpart show da3
    =>      34  15646653 da3  GPT  (7.5G)
            34       128   1  freebsd-boot  (64k)
           162    921600   2  freebsd-ufs  (450M) 
        921762  14680064   3  freebsd-zfs  (7.0G)
      15601826     44861      - free -  (21M)
    

    USB Flashメモリをmirrorする場合はブート領域部分は上記の方法でそれぞれに設定*1する必要があります
    8G USB Flashメモリでもサイズが微妙に違うので、mirrorやバックアップのことも考えて後ろを若干残しています

ディスク・ZFSプール [zpool]

  • 起動時に参照するzpool.cacheの為、/boot/zfsを作成します
    # mdmfs -s 1m md2 /boot/zfs
    
  • ZFSストレージプールを作成します
    # zpool create tank0 gpt/flash0zfs
    

ファイルシステム構成 [zfs]

  • チェックサムの設定
    Bug ID:6740597 zfs fletcher-2 is losing its carries (opensolalis)では"fletcher2"に脆弱性があるとあがっているので、念の為"fletcher4""sha256"に変更します
    今回は"fletcher4"に設定します
    # zfs set checksum=fletcher4 tank0
    
  • atime(access time)の設定
    # zfs set atime=off tank0
    
  • mountpointの設定
    ZFSの自動マウントは便利ですが、融通が利かないので無効化します
    以降"tank0"ではファイルシステムを生成しても "mountpoint=legacy"の状態になります
    # zfs set mountpoint=legacy tank0
    
  • ファイルシステム生成
    起動後、umountできないものは"tank0/system"上に生成し、それ以外を"tank0"直下に生成します
    # zfs create tank0/system/
    # zfs create tank0/system/usr
    # zfs create tank0/system/var
    # zfs create tank0/system/var/crash
    # zfs create tank0/system/var/db
    # zfs create tank0/system/var/db/pkg
    # zfs create tank0/system/var/empty
    # zfs create tank0/system/var/log
    # zfs create tank0/system/var/mail
    # zfs create tank0/system/var/run
    # zfs create tank0/system/var/tmp
    # zfs create tank0/src
    # zfs create tank0/home
    
  • 圧縮設定
    圧縮率の上がりやすいボリュームに圧縮設定をします
    USB Flashメモリは書込みが速くないので、圧縮で書き込み量が減ることで速度が上がることを期待してgzipを指定します
    # zfs set compression=gzip tank0/system/var/crash
    # zfs set compression=gzip tank0/system/var/db/pkg
    # zfs set compression=gzip tank0/system/var/log
    # zfs set compression=gzip tank0/system/var/mail
    # zfs set compression=gzip tank0/system/var/tmp
    # zfs set compression=gzip tank0/src
    
  • プロセス実行制御設定
    ボリューム内でプロセスを実行できないように設定します
    # zfs set exec=off tank0/system/var/crash
    # zfs set exec=off tank0/system/var/db
    # zfs set exec=off tank0/system/var/empty
    # zfs set exec=off tank0/system/var/log
    # zfs set exec=off tank0/system/var/mail
    # zfs set exec=off tank0/src
    
  • "setuid"利用設定
    ボリューム内でのsetuidビットを無視するよう設定します
    # zfs set setuid=off tank0/system/var/crash
    # zfs set setuid=off tank0/system/var/db
    # zfs set setuid=off tank0/system/var/db/pkg
    # zfs set setuid=off tank0/system/var/empty
    # zfs set setuid=off tank0/system/var/log
    # zfs set setuid=off tank0/system/var/mail
    # zfs set setuid=off tank0/system/var/tmp
    # zfs set setuid=off tank0/src
    

インストール用ファイルシステムの構築

  • インストールする為のファイルシステムを構築します
    ここでは仮に"/mnt"をインストール用ファイルシステムのルートとします
    # mount -t ufs /dev/gpt/flash0ufs /mnt
    # mkdir /mnt/tmp
    # chmod 1777 /mnt/tmp
    # mkdir /mnt/usr
    # mount -t zfs tank0/system/usr /mnt/usr
    # mkdir /mnt/usr/home
    # mount -t zfs tank0/home /mnt/usr/home
    # ln -s /usr/home /mnt/home
    # mkdir /mnt/usr/src
    # mount -t zfs tank0/src /mnt/usr/src
    # mkdir /mnt/var
    # mount -t zfs tank0/system/var /mnt/var
    # mkdir /mnt/var/crash
    # mount -t zfs tank0/system/var/crash /mnt/var/crash
    # mkdir /mnt/var/db
    # mount -t zfs tank0/system/var/db /mnt/var/db
    # mkdir /mnt/var/db/pkg
    # mount -t zfs tank0/system/var/db/pkg /mnt/var/db/pkg
    # mkdir /mnt/var/empty
    # mount -t zfs tank0/system/var/empty /mnt/var/empty
    # mkdir /mnt/var/log
    # mount -t zfs tank0/system/var/log /mnt/var/log
    # mkdir /mnt/var/mail
    # mount -t zfs tank0/system/var/mail /mnt/var/mail
    # mkdir /mnt/var/run
    # mount -t zfs tank0/system/var/run /mnt/var/run
    # mkdir /mnt/var/tmp
    # mount -t zfs tank0/system/var/tmp /mnt/var/tmp
    # chmod 1777 /mnt/var/tmp
    

FreeBSDをインストール

構成は最小設定がいいので base + src + kernel のみにします
portsはJail fulltree FreeBSD 9.0-Releaseで導入しますので、ここでは見送ります

  • インストール先の設定
    # cd /usr/freebsd-dist
    # export DESTDIR=/mnt
    
  • インストール
    # for file in base.txz src.txz kernel.txz;
    # do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
    # cd /mnt/boot; mkdir GENERIC; cp -Rlp kernel/* GENERIC/
    

後処理

  • /var/emptyをreadonlyにします
    baseをインストールする前に行うとbaseがインストールにできないため、このタイミングで行います
    # zfs set readonly=on tank0/system/var/empty
    
  • インストール先に"chroot"します
    # chroot /mnt
    
  • /etc/fstabをテキストエディタを使用して作成します
    ここでは ee を使用します
    # ee /etc/fstab
    
    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /gpt/flash0ufs          /               ufs     rw,noatime      0       0
    tank0/system/usr        /usr            zfs     rw              0       0
    tank0/system/var        /var            zfs     rw              0       0
    tank0/system/var/crash  /var/crash      zfs     rw              0       0
    tank0/system/var/db     /var/db         zfs     rw              0       0
    tank0/system/var/db/pkg /var/db/pkg     zfs     rw              0       0
    tank0/system/var/empty  /var/empty      zfs     ro              0       0
    tank0/system/var/log    /var/log        zfs     rw              0       0
    tank0/system/var/mail   /var/mail       zfs     rw              0       0
    tank0/system/var/run    /var/run        zfs     rw              0       0
    tank0/system/var/tmp    /var/tmp        zfs     rw              0       0
    tmpfs                   /tmp       tmpfs rw,mode=1777,size=1073741824 0 0
    tank0/src               /usr/src                zfs     rw      0       0
    
  • /etc/rc.confを設定します
    "hostname""ifconfig"はシステムに応じて変更します
    もちろん"echo"でなく、テキストエディタを使用してもかまいません
    echo 'zfs_enable="YES"' >> /etc/rc.conf
    echo 'hostname="zfsroot.localdomain"' >> /etc/rc.conf
    echo 'ifconfig_nfe0="DHCP"' >> /etc/rc.conf
    echo 'keymap="jp.106"' >> /etc/rc.conf
    
  • /boot/loader.conf を設定します
    biosの設定が"AHCI"であれば、"ahci.ko"もロードする必要があります
    echo 'zfs_load="YES"' >> /boot/loader.conf
    AHCIの場合
    echo 'ahci_load="YES"' >> /boot/loader.conf
    ZFS の設定
    echo 'vfs.zfs.prefetch_disable=1' >> /boot/loader.conf
    echo 'vfs.zfs.txg.timeout="5"' >> /boot/loader.conf
    
  • タイムゾーンを設定します
    # tzsetup
    Asiaを選択
    Japanを選択
    
  • aliases を再作成します
    # cd /etc/mail
    # make aliases
    
  • chroot環境から元の環境に戻ります
    # exit
    
  • ZFS の情報をブートローダ用にコピーします
    /boot/zfsを作成していないとコピーできない為、改めて作成します
    再作成
    # cd /
    # mdmfs -s 1m md2 /boot/zfs; zpool export tank0; zpool import tank0
    コピー
    # cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache
    
  • 再起動します
    # reboot
    
  • インストーラを終了し再起動します

再起動後の処理

  • シングルユーザーでログインします
  • /usr/home へZFS自動マウント*2を設定します
    userを増やす度にZFSファイルシステムを作成する場合、その都度"/etc/fstab"に追加しなければならないので自動マウントにします
    # zfs set mountpoint=/usr/home tank0/home
    

資料

アーカイブ

関連ページ


名前:
コメント:

タグ:

FreeBSD ZFS usb
最終更新:2012年08月28日 14:21

*1 UFSパーティションはgmirrorで、ZFSパーティションはzfsでmirrorするので、bootパーティション部分は対象外になります

*2 先に"mountpoint=legacy"としていた為、改めて設定する必要があります