====== ProLiant MicroServer高機能NAS化計画(OSインストール編) ======
===== 環境 =====
* HP ProLiant MicroServer
* FreeBSD 9.0-BETA3
詳細は[[pc:freebsd:001_010_proliant_microserver高機能nas化計画_構想編|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でアクセスする必要はないらしい。
詳しくは[[http://www.allbsd.org/%7Ehrs/diary/201109.html#d0301|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
* Configure
* Root Password : rootパスワードの設定
* User Management
* User : ユーザーの追加
* Time Zone
* Select local or UTC (Greenwich Mean Time) clock : Yes (UTCで運用。JSTを使う場合はNo)
* Asia → Japan → Yes
* Networking
* Intarfaces
* bge0
* IPv6 configuration : No
* DFCP configuration : No
* 設定
* Bring up : No
=== /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から抜ける
====== 参考サイト ======
* [[http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot|RootOnZFS/GPTZFSBoot - FreeBSD Wiki]]
* [[http://wirednoize.net/freebsd/index.php?FreeBSD%208.2%20Release%20amd64%20pure%20ZFS%20install|FreeBSD 8.2 Release amd64 pure ZFS install]]
* [[http://wirednoize.net/freebsd/index.php?FreeBSD%208.0%20STABLE%20amd64|FreeBSD 8.0 STABLE amd64]]
* [[http://blog.livedoor.jp/dankogai/archives/51697097.html|404 Blog Not Found:備忘録 - HP ProLiant MicroServer + FreeBSD + ZFS]]
* [[http://d.akinori.org/2010/04/15/wd15ears%E3%81%AE%E6%80%A7%E8%83%BD%E3%82%92%E8%A8%88%E6%B8%AC/|工夫と趣向と分別と。 – WD15EARSの性能を計測]]
* [[http://tyuu.com/wordpress/?p=274|FreeBSD 8.1 on ZFS | tyuu's WordPress]]
* [[http://www.freebsd.org/cgi/man.cgi?query=hier&sektion=7|HIER(7) FreeBSD Miscellaneous Information Manual]]
* [[http://d.hatena.ne.jp/murank/20110123/1295777623|FreeBSD 8.1 on ZFS-boot - murankの日記]]
* [[http://www.aisecure.net/2011/05/01/root-on-zfs-freebsd-current/|Root On ZFS @ FreeBSD 9 Current | aisecure.net]]
* [[http://d.hatena.ne.jp/mteramoto/20101219/1292733916|FreeBSD 8.1-RELEASEでGPTなHDDにZFSでRootを確保してそこからbootする - mteramotoの日記]]