目次

ProLiant MicroServer高機能NAS化計画(OSインストール編)

環境

詳細はProLiant MicroServer高機能NAS化計画(構想編)参照。

sshで入れるFixit環境の作成

RAMディスクを作ってシステムをコピー

# umount /dev/md1
# mdmfs -s 2048m md1 /tmp
# mkdir /tmp/dist
# find . ! -regex '\./tmp' | cpio -pd /tmp/dist

コピーした環境へ入る

# mount -t devfs devfs /tmp/dist/dev
# chroot /tmp/dist

ネットワークの設定

# ifconfig bge0 192.168.65.1 netmask 255.255.255.0

sshdの起動

# echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
# echo 'sshd_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/sshd start

rootパスワードの設定

# passwd
Changing local password for root
New Password: ********
Retype New Password: ********

ZFSファイルシステムの作成

パーティションテーブル初期化

本来はgpart destroyで消すべきだが、面倒なので…

# dd if=/dev/zero of=/dev/ada0 bs=1m count=1
# dd if=/dev/zero of=/dev/ada1 bs=1m count=1

GPTを作成

# gpart create -s gpt ada0
# gpart create -s gpt ada1

パーティション追加

freebsd-zfs領域をHDD目一杯まで使ってしまうと、HDD交換時に微妙な容量の差でRAIDが組めない事態が起こりうるので、保険として末尾100M(こんなに要らないだろうけど念のため)を未使用領域にする。

# gpart add -a 4k -s 64k -t freebsd-boot ada0      # AFT対策で-aで4kにアライメント
# gpart add -a 4k -s 64k -t freebsd-boot ada1
# gpart add -a 4k -s 10g -t freebsd-swap -l swap0 ada0
# gpart add -a 4k -s 10g -t freebsd-swap -l swap1 ada1
# gpart add -a 4k -s 1443972647 -t freebsd-zfs ada0
# gpart add -a 4k -s 1443972647 -t freebsd-zfs ada1
# gpart show
=>     34  1339253  da0  GPT  (3.7G) [CORRUPT]
       34      128    1  freebsd-boot  (64k)
      162  1339125    2  freebsd-ufs  (653M)

=>        34  1465149101  ada0  GPT  (698G)
          34           6        - free -  (3.0k)
          40         128     1  freebsd-boot  (64k)
         168    20971520     2  freebsd-swap  (10G)
    20971688  1443972640     3  freebsd-zfs  (688G)
  1464944328      204807        - free -  (100M)

=>        34  1465149101  ada1  GPT  (698G)
          34           6        - free -  (3.0k)
          40         128     1  freebsd-boot  (64k)
         168    20971520     2  freebsd-swap  (10G)
    20971688  1443972640     3  freebsd-zfs  (688G)
  1464944328      204807        - free -  (100M)

ブートコード書き込み

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1

ZFSプールの作成

ZFSを4kセクタに最適化するため、nopデバイス経由でプールを作成する。

プール生成時に決定されるZFSの内部パラメータashiftが12になっていればよく、値決定後はnopでアクセスする必要はないらしい。 詳しくは4KiB セクタの HDD と FreeBSDを参照されたし。

# gnop create -S 4096 /dev/ada0p3
# gnop create -S 4096 /dev/ada1p3
# zpool create zroot mirror /dev/ada0p3.nop /dev/ada1p3.nop
# zdb
zroot:
    version: 28
    name: 'zroot'
    state: 0
    txg: 4
    pool_guid: 3928702653704672869
    hostname: ''
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 3928702653704672869
        create_txg: 4
        children[0]:
            type: 'mirror'
            id: 0
            guid: 10151570094065059124
            metaslab_array: 30
            metaslab_shift: 32
            ashift: 12    ← '12'になっていればOK
            asize: 739309256704
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 4580562153177664810
                path: '/dev/gpt/boot0a.nop'
                phys_path: '/dev/gpt/boot0a.nop'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 4968329952742307772
                path: '/dev/gpt/boot0b.nop'
                phys_path: '/dev/gpt/boot0b.nop'
                whole_disk: 1
                create_txg: 4
# zpool export zroot
# gnop destroy /dev/ada0p3.nop
# gnop destroy /dev/ada1p3.nop
# zpool import zroot

ファイルシステムの作成と色々設定

# zfs set checksum=fletcher4 zroot
# zfs set compression=on zroot

Macからのアクセスを考慮してNFCにする。

# zfs create -o normalization=formC zroot/ROOT
# zfs create -o exec=on -o setuid=off zroot/ROOT/tmp
# chmod 1777 /zroot/ROOT/tmp

# zfs create zroot/ROOT/usr
# zfs create -o compression=gzip-9 zroot/ROOT/usr/include
# zfs create -o compression=gzip-9 zroot/ROOT/usr/src
# zfs create zroot/ROOT/usr/home

# cd /zroot/ROOT; ln -s /usr/home home
# zfs create -o compression=gzip-9 -o setuid=off zroot/ROOT/usr/ports
# zfs create -o compression=off -o exec=off -o setuid=off zroot/ROOT/usr/ports/distfiles
# zfs create -o compression=off -o exec=off -o setuid=off zroot/ROOT/usr/ports/packages

# zfs create zroot/ROOT/var
# zfs create -o exec=off -o setuid=off -o compression=gzip-9 zroot/ROOT/var/crash
# zfs create -o exec=off -o setuid=off zroot/ROOT/var/db
# zfs create -o exec=on -o setuid=off -o compression=gzip-9 zroot/ROOT/var/db/pkg
# zfs create -o exec=off -o setuid=off zroot/ROOT/var/empty
# zfs create -o exec=off -o setuid=off -o compression=gzip-9 zroot/ROOT/var/log
# zfs create -o exec=off -o setuid=off -o compression=gzip-9 zroot/ROOT/var/mail
# zfs create -o exec=off -o setuid=off zroot/ROOT/var/run
# zfs create -o exec=on -o setuid=off -o compression=gzip-9 zroot/ROOT/var/tmp
# chmod 1777 /zroot/ROOT/var/tmp

# zpool set bootfs=zroot/ROOT zroot

OSのインストール

# sh
# cd /usr/freebsd-dist/
# export DESTDIR=/zroot/ROOT
# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz games.txz ;
> do (cat $file | tar --unlink -xpvJf - -C ${DESTDIR:-/}); done
# zfs set readonly=on zroot/ROOT/var/empty

chrootしてOSの初期設定

# mount -t devfs devfs /zroot/ROOT/dev
# chroot /zroot/ROOT
# /usr/sbin/sysinstall

/boot/loader.confの設定

# cat << EOF > /boot/loader.conf
opensolaris_load="YES"
zfs_load="YES"
vfs.root.mountfrom="zfs:zroot/ROOT"
cpufreq_load="YES"
vfs.zfs.txg.timeout="3"

kern.maxusers=512
vm.kmem_size="4G"
vm.kmem_size_max="6G"
vfs.zfs.arc_min="512M"
vfs.zfs.arc_max="4G"
EOF

/etc/rc.confの設定

# cat << EOF >> /etc/rc.conf
zfs_enable="YES"
powerd_enable="YES"
powerd_flags="-a adp -n adp"
cpufreq_load="YES"

sshd_enable="YES"
EOF

swapの設定

# cat << EOF > /etc/fstab
#Device                       Mountpoint              FStype  Options         Dump    Pass#
/dev/gpt/swap0                 none                    swap    sw              0       0
/dev/gpt/swap1                 none                    swap    sw              0       0
EOF

メールのエイリアスの生成

# cd /etc/mail
# make aliases

chroot環境から抜ける

# exit
# umount /zroot/ROOT/dev

zpool.cacheの更新

# cd /
# zpool export zroot && zpool import zroot
# cp /boot/zfs/zpool.cache /zroot/ROOT/boot/zfs/

マウントポイントの設定

# export LD_LIBRARY_PATH=/lib
# zfs unmount -a
# zfs set mountpoint=legacy zroot/ROOT
# zfs set mountpoint=/tmp zroot/ROOT/tmp
# zfs set mountpoint=/usr zroot/ROOT/usr
# zfs set mountpoint=/var zroot/ROOT/var

後始末

# exit # shから抜ける
# exit # sshから抜ける

参考サイト