FreeBSD > Install FreeBSD 8.2-RC3 on pure ZFS

Top > FreeBSD > Install FreeBSD 8.2-RC3 on pure ZFS

Install FreeBSD 8.2-RC3 on pure ZFS



FreeBSD 8.2-RC3がリリースされたので
Install FreeBSD 8.2-RC2 on pure ZFSから変更点があるか確認します
今回はVirtual Boxを利用しました


インストール準備


The FreeBSD Projectから必要なイメージをダウンロードします
Virtual Boxを利用するのでi386を選択します

DVDインストール

DVDからインストールする場合は、FreeBSD-8.2-RC3-i386-dvd1.iso.xzを解凍し".iso"をファイルを取り出してからISOファイルから起動します
"Fixit"を使用しますので、bootonlydisk1は使えません

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

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

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

  • インストールするディスクを検索します
    # dmesg | grep "[ad][ad][0-9]"
    acpi_acad0: <AC Adapter> on acpi0
    ad4: 8192MB <VBOX HARDDISK 1.0> at ata2-master UDMA100 SATA 3Gb/s
    

    インストール先はad4になります

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

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

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

  • ZFSモジュールをロード
    # kldload /mnt2/boot/kernel/opensolaris.ko
    # kldload /mnt2/boot/kernel/zfs.ko
    
  • 起動時に参照するzpool.cacheの為、/boot/zfsを作成します
    # mkdir /boot/zfs
    
  • ZFSストレージプールを作成します
    mirror/raidz[2]の例も挙げておきます
    # zpool create tank0 gpt/disk0
    # zpool create tank0 mirror gpt/disk0 gpt/disk1
    # zpool create tank0 raidz  gpt/disk0 gpt/disk1 gpt/disk2 ...
    # zpool create tank0 raidz2 gpt/disk0 gpt/disk1 gpt/disk2 ...
    

ファイルシステム構成 [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/sysroot
    # 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/ports/distfiles
    # zfs create tank0/ports/packages
    # zfs create tank0/home
    
  • 圧縮設定
    圧縮率の上がりやすいボリュームに圧縮設定をします 今回はVirtualBoxなので"lzjb"を指定します
    # zfs set compression=lzjb tank0/system/var/crash
    # zfs set compression=lzjb tank0/system/var/db/pkg
    # zfs set compression=lzjb tank0/system/var/log
    # zfs set compression=lzjb tank0/system/var/mail
    # zfs set compression=lzjb tank0/system/var/tmp
    # zfs set compression=lzjb tank0/src
    # zfs set compression=lzjb 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
    # zfs set exec=off tank0/ports/distfiles
    # zfs set exec=off tank0/ports/packages
    
  • "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 set setuid=off tank0/ports/distfiles
    # zfs set setuid=off tank0/ports/packages
    
  • 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
    # mkdir /t/usr
    # mount -t zfs tank0/system/usr /t/usr
    # mkdir /t/usr/home
    # mount -t zfs tank0/home /t/usr/home
    # ln -s /usr/home /t/home
    # mkdir /t/usr/ports
    # mount -t zfs tank0/ports /t/usr/ports
    # mkdir /t/usr/ports/distfiles
    # mount -t zfs tank0/ports/distfiles /t/usr/ports/distfiles
    # mkdir /t/usr/ports/packages
    # mount -t zfs tank0/ports/packages /t/usr/ports/packages
    # 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にします
    baseをインストールする前に行うとbaseがインストールにできないため、このタイミングで行います
    # zfs set readonly=on tank0/system/var/empty
    
  • インストール先に"chroot"します
    # chroot /t
    
  • /etc/fstabをテキストエディタを使用して作成します
    ここでは ee を使用します
    # ee /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
    tmpfs                   /tmp       tmpfs rw,mode=1777,size=1073741824 0 0
    tmpfs                   /ports/tmp tmpfs rw,size=1073741824     0       0
    tank0/ports             /usr/ports              zfs     rw      0       0
    tank0/ports/distfiles   /usr/ports/distfiles    zfs     rw      0       0
    tank0/ports/packages    /usr/ports/packages     zfs     rw      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_em0="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
    echo 'vfs.root.mountfrom="zfs:tank0/system/sysroot"' >> /boot/loader.conf
    AHCIの場合
    echo 'ahci_load="YES"' >> /boot/loader.conf
    
  • 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
    
  • インストーラを終了し再起動します

再起動後の処理

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

資料

アーカイブ

関連ページ


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

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

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