FreeBSD > Install FreeBSD 8.2-Release on pure ZFS (i386+512M)

Top > FreeBSD > Install FreeBSD 8.2-Release on pure ZFS (i386+512M)

Install FreeBSD 8.2 Release on pure ZFS(i386+512Mb)



celeron D 2.53Ghz + 512Mb のPCをサーバーにした時のまとめです

Install FreeBSD 8.2-RC3 on pure ZFSにほぼあるとおりですが

FreeBSD で ZFS を使う為の調整: uyota 匠の一手

以上のサイトを参考にさせていただいております



インストール準備


The FreeBSD Projectから必要なイメージをダウンロードします
celeron D 2.53Ghz なのでi386を選択

DVDインストール

DVDからインストールするので、FreeBSD-8.2-RELEASE-i386-dvd1.iso.xzを解凍し".iso"をファイルを取り出してからDVDに書き込みます

".xz"の解凍は7z を使用します

インストール


DVDから起動すると通常のインストール画面になりますので環境に合わせて設定します

  • Country Selection
    110 Japan を選択
    
  • System Console Keymap
    Japanese 106 を選択
    
  • sysinstall Main Menu
    Fixit を選択
    
  • Plesae choose a fixit option
    起動したメディアに合わせて、CDROM/DVDかUSBを選択
    

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

  • インストールするディスクを検索します
    # dmesg | grep "[ad][ad][0-9]"
    ad0: 76319MB <WDC WD800BB-60JKC0 05.01C05> at ata0-master UDMA100
    da0: <JetFlash Transcend 8G 1100> Removable Direct Access SCSI-0 device 
    

    インストール先はUSB FlashのTranscend JetFlash 530 8Gですので、da0になります

  • パーティションテーブルを初期化します
    # dd if=/dev/zero of=/dev/da0 count=1 bs=1m
    
  • gptパーティションを作成します
    # gpart create -s gpt /dev/da0
    
  • ブート用パーティションを作成します
    # gpart add -s 64k -t freebsd-boot da0
    
  • ZFSパーティション(残り全領域)を作成します
    # gpart add -t freebsd-zfs -l usb0 da0
    
  • Protected MBR と gpt用ZFSブートローダを書き込みます
    # gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 da0
    
  • gptパーティションを確認します
    # gpart show da0
    =>      34   15826877  da0  GPT (7.5G)
            34        128    1  freebsd-boot  (64K)
           162   15826749    2  freebsd-zfs  (7.5G)
    

    ZFSで起動ディスクをmirror/raidz[2]にする場合はブート領域部分は上記の方法でそれぞれに設定*1する必要があります

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

  • ZFSモジュールをロード
    # kldload /mnt2/boot/kernel/opensolaris.ko
    # kldload /mnt2/boot/kernel/zfs.ko
    
  • 起動時に参照するzpool.cacheの為、/boot/zfsを作成します
    # mkdir /boot/zfs
    
  • ZFSストレージプールを作成します
    # zpool create tank0 gpt/usb0
    

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

  • チェックサムの設定
    Bug ID:6740597 zfs fletcher-2 is losing its carries (opensolalis)では"fletcher2"に脆弱性があるとあがっているので、今回は"fletcher4"にします
    # zfs set checksum=fletcher4 tank0
    
  • atime(access time)の設定
    # zfs set atime=off tank0
    
  • mountpointの設定
    ZFSの自動マウントは便利ですが、融通が利かないので無効化します
    # zfs set mountpoint=legacy tank0
    
  • ファイルシステム生成
    起動後、umountできないボリュームは"tank0/system"上に生成し、それ以外を"tank0"直下に生成します
    # zfs create tank0/system
    # zfs create tank0/system/sysroot
    # zfs create tank0/system/tmp
    # 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/ports
    # zfs create tank0/home
    
  • 圧縮設定
    圧縮率の上がりやすいボリュームに圧縮設定をします
    メモリが少ないので負荷がかかった場合の検証もしたいので、あえて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 compression=gzip tank0/ports
    
  • プロセス実行制御設定
    ボリューム内でプロセスを実行できないように設定します
    # 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
    # zfs set setuid=off tank0/ports
    
  • zfsブートでのルート(/root)を設定します
    # zpool set bootfs=tank0/system/sysroot tank0
    

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

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

FreeBSDをインストール

構成は "minimal" + ports + src にしています

  • インストール先の設定
    # cd /dist/8.2-*
    # export DESTDIR=/t
    
  • "base" のインストール
    # cd base
    # ./install.sh
    
  • "src" のインストール
    # cd ../src
    # ./install.sh all
    
  • "ports" のインストール
    # cd ../ports
    # ./install.sh
    
  • "kernel" のインストール
    # cd ../kernels
    # ./install.sh generic
    # cd /t/boot ; cp -Rlp GENERIC/* /t/boot/kernel/
    

後処理

  • /var/emptyをreadonlyにします
    # zfs set readonly=on tank0/system/var/empty
    
  • インストール先に"chroot"します
    # chroot /t
    
  • /etc/fstabを作成します
    # Device                Mountpoint              FStype  Options Dump    Pass #
    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
    tank0/system/tmp        /tmp                    zfs     rw      0       0
    tank0/src               /usr/src                zfs     rw      0       0
    
  • /etc/rc.confを設定します
    "hostname""ifconfig"はシステムに応じて変更します
    tmpfsが使えないため/tmpを自動で消去するようにしています
    echo 'zfs_enable="YES"' >> /etc/rc.conf
    echo 'hostname="zfsroot.localdomain"' >> /etc/rc.conf
    echo 'ifconfig_bge0="DHCP"' >> /etc/rc.conf
    echo 'keymap="jp.106"' >> /etc/rc.conf
    echo 'clear_tmp_enable="YES"' >> /etc/rc.conf
    
  • /boot/loader.conf を設定します
    USBデバイスの認識がマウントのタイミングより遅いためkern.cam.boot_delayを設定します
    echo 'kern.cam.boot_delay=10000' >> /boot/loader.conf
    echo 'zfs_load="YES"' >> /boot/loader.conf
    echo 'vfs.root.mountfrom="zfs:tank0/system/sysroot"' >> /boot/loader.conf
    
  • /boot/loader.conf に メモリ食いのzfsに対する設定をします
    i386ではzfs の prefetchを無効化するよう警告が出ますので無効化します
    (2012/08/20修正)
    echo 'vfs.zfs.prefetch_disable=1' >> /boot/loader.conf
    echo 'vm.kmem_size="256M"' >> /boot/loader.conf
    echo 'vm.kmem_size_max="256M"' >> /boot/loader.conf
    echo 'vfs.zfs.arc_max="30M"' >> /boot/loader.conf
    echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf
    
  • タイムゾーンを設定します
    # tzsetup
    Asiaを選択
    Japanを選択
    
  • aliases を再作成
    # cd /etc/mail
    # make aliases
    
  • chroot環境から元の環境に戻ります
    # exit
    
  • ZFS の情報をブートローダ用にコピーします
    /boot/zfsを作成していないとコピーできない為、その場合は改めて作成します
    再作成
    # mkdir /boot/zfs; zfs export tank0; zfs import tank0
    コピー
    # cp /boot/zfs/zpool.cache /t/boot/zfs/zpool.cache
    
  • Fixit 環境からインストーラに戻ります
    # exit
    
  • インストーラを終了し再起動します

再起動後の処理

  • シングルユーザーでログインし、/homeへZFS自動マウントを設定します
    # zfs set mountpoint=/home tank0/home
    

資料

アーカイブ

関連ページ


名前:
コメント:
最終更新:2012年08月20日 16:19

*1 当然、ZFSパーティションのみmirror/raidz[2]するので、gptパーティション部分は対象外になります