====== 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の日記]]