FreeBSD > Install FreeBSD 8.2-RC2 on pure ZFS

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

Install FreeBSD 8.2-RC2 on pure ZFS



FreeBSD 8.1 Release amd64 pure ZFS install
FreeBSD/ZFS/ZFSboot

以上のサイトを参考にさせていただいた上での自分なりのまとめです



インストール準備


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

USBインストール

USBからインストールする場合は、FreeBSD-8.2-RC2-amd64-memstick.imgを"dd"や"DDforWindows"を使って書き込みます

DVDインストール

DVDからインストールする場合は、FreeBSD-8.2-RC2-amd64-dvd1.iso.xzを解凍し".iso"をファイルを取り出してからDVDに書き込みます
"Fixit"を使用しますので、bootonlydisk1は使えません

手持ちに空きUSBがなかったのでDVDを使ってインストールします
稼動しているPCがWindowsのみの為、7z 9.20をインストールし、".xz"で圧縮されているISOファイルを解凍後、DVDに書き込みました

インストール


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

  • 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]"
    ad4: <Hitachi HDT721010SLA360 ST6OA3AA> ATA-8 SATA 2.x device
    ad6: <WDC WD15EARS-00MVWB0 50.0AB50> ATA-8 SATA 2.x device
    ad8: <SAMSUNG HD501LJ CR100-10> ATA-8 SATA 2.x device
    ad10: <Hitachi HDT721010SLA360 ST6OA3AA> ATA-8 SATA 2.x device
    da0: < Patriot Memory PMAP> Removable Direct Access SCSI-0 device 
    da1: <WDC WD15 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    da2: < Patriot Memory PMAP> Removable Direct Access SCSI-0 device 
    da3: <WDC WD20 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    da4: <JetFlash Transcend 8GB 8.07> Removable Direct Access SCSI-2 device 
    da5: <Hitachi HDP725050GLA360 > Fixed Direct Access SCSI-2 device 
    da6: <WDC WD50 00AAKS-00YGA0 > Fixed Direct Access SCSI-2 device 
    

    インストール先はUSB FlashのPatriot Memory Xporter XT Rage 8.0Gですので、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   15646708  da0  GPT (7.5G)
            34        128    1  freebsd-boot  (64K)
           162   15646580    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ストレージプールを作成します
    mirror/raidz[2]の例も挙げておきます
    # zpool create tank0 gpt/usb0
    # zpool create tank0 mirror gpt/usb0 gpt/usb1
    # zpool create tank0 raidz  gpt/usb0 gpt/usb1 gpt/usb2 ...
    # zpool create tank0 raidz2 gpt/usb0 gpt/usb1 gpt/usb2 ...
    

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

  • チェックサムの設定
    Bug ID:6740597 zfs fletcher-2 is losing its carries (opensolalis)では"fletcher2"に脆弱性があるとあがっているので、念の為"fletcher4""sha256"に変更します
    今回はcpuがatom330なのもあり、"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
    
  • 圧縮設定
    圧縮率の上がりやすいボリュームに圧縮設定をします~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 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
    # 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_nfe0="DHCP"' >> /etc/rc.conf
    echo 'keymap="jp.106"' >> /etc/rc.conf
    
  • /boot/loader.conf を設定します
    今回はUSBにインストールしたので関係ありませんが、HDDにインストールする場合、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
    
  • タイムゾーンを設定します
    # 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
    
  • インストーラを終了し再起動します

再起動後の処理

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

資料

アーカイブ

関連ページ


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

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

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