2018年12月14日金曜日

HP MicroServer の Disk 設定 Root On ZFS

event_note12月 14, 2018 editBy sbin forumNo comments
2T の HDD を4本入れて ZFSRoot を作ってみる。 以下の作業は何回もテストを繰り返す場合があるので、通常は1本のスクリプトに書いて USB からブート後に実行している。勿論ネットワークはブートした後は使える事が前提。 全てを書いてもディスクを作る部分にとどめる。 最初にいつものようにGPT情報を消す。
#
gpart delete -i 3 ada0
gpart delete -i 2 ada0
gpart delete -i 1 ada0
gpart destroy ada0

gpart delete -i 3 ada1
gpart delete -i 2 ada1
gpart delete -i 1 ada1
gpart destroy ada1

gpart delete -i 3 ada2
gpart delete -i 2 ada2
gpart delete -i 1 ada2
gpart destroy ada2

gpart delete -i 3 ada3
gpart delete -i 2 ada3
gpart delete -i 1 ada3
gpart destroy ada3

sysctl vfs.zfs.min_auto_ashift=12
続いてゴミを消す
dd if=/dev/zero of=/dev/ada0 bs=1m count=1
dd if=/dev/zero of=/dev/ada1 bs=1m count=1
dd if=/dev/zero of=/dev/ada2 bs=1m count=1
dd if=/dev/zero of=/dev/ada3 bs=1m count=1
GPTパーティションを作る。
gpart create -s gpt ada0
gpart create -s gpt ada1
gpart create -s gpt ada2
gpart create -s gpt ada3
BSDに合わせる。
gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap0 ada0
gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap1 ada1
gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap2 ada2
gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap3 ada3

gpart add -b 40 -s 512 -t freebsd-boot ada0
gpart add -b 40 -s 512 -t freebsd-boot ada1
gpart add -b 40 -s 512 -t freebsd-boot ada2
gpart add -b 40 -s 512 -t freebsd-boot ada3

# Last of all space to zfs pertition
#
gpart add -a 4k -t freebsd-zfs -l disk0 ada0
gpart add -a 4k -t freebsd-zfs -l disk1 ada1
gpart add -a 4k -t freebsd-zfs -l disk2 ada2
gpart add -a 4k -t freebsd-zfs -l disk3 ada3
sysctl kern.geom.debugflags=0x10
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3

これはやった事ないけど EFIブートはこん感じかな?
#newfs_msdos -F 32 -c 1 /dev/ada0p1
#mount -t msdosfs /dev/ada0p1 /mnt
#mkdir -p /mnt/EFI/BOOT
#cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi
#umount /mnt

#newfs_msdos -F 32 -c 1 /dev/ada1p1
#mount -t msdosfs /dev/ada1p1 /mnt
#mkdir -p /mnt/EFI/BOOT
#cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi
#umount /mnt

#newfs_msdos -F 32 -c 1 /dev/ada2p1
#mount -t msdosfs /dev/ada2p1 /mnt
#mkdir -p /mnt/EFI/BOOT
#cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi
#umount /mnt

#newfs_msdos -F 32 -c 1 /dev/ada3p1
#mount -t msdosfs /dev/ada3p1 /mnt
#mkdir -p /mnt/EFI/BOOT
#cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi
#umount /mnt
続いて ZFS をセットアップ
echo "Load ZFS modules"
kldload /boot/kernel/opensolaris.ko
kldload /boot/kernel/zfs.ko

mkdir /boot/zfs

zpool create -f zroot raidz /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gp
t/disk3
ZFSのマウントポイント書く。 ZFSは本来は自動マウントされる仕組みが基本になってるが、障害の時困るので明示的に指定する。
echo " create ZFS filesystem"
mkdir /tt

zfs set checksum=fletcher4 zroot
zfs set mountpoint=legacy zroot
zfs set atime=off zroot
zfs create zroot/system
zfs create zroot/system/sysroot
zfs create zroot/system/usr
zfs create zroot/system/src
zfs create zroot/system/var
zfs create zroot/system/tmp
zfs create zroot/system/home
zfs create zroot/system/home1
zfs create zroot/system/home2
zfs create zroot/system/home3
zfs create zroot/system/VBOX
zfs create zroot/system/jails
#zfs create zroot/jails/nano
zfs set compression=lzjb zroot/system/src

zpool set bootfs=zroot/system/sysroot zroot
zpool export zroot
zpool import -o cachefile=/tmp/zpool.cache zroot

echo "mount ZFS filesystem"
mount -t zfs zroot/system/sysroot /tt
mkdir /tt/tmp
mount -t zfs zroot/system/tmp /tt/tmp
chmod 1777 /tt/tmp
mkdir /tt/usr
mount -t zfs zroot/system/usr /tt/usr
mkdir /tt/usr/home
mount -t zfs zroot/system/home /tt/usr/home
ln -s /usr/home /tt/home
mkdir /tt/usr/src
mount -t zfs zroot/system/src /tt/usr/src
mkdir /tt/var
mount -t zfs zroot/system/var /tt/var
mkdir -p /tt/usr/ports/packages
mkdir -p /tt/usr/local/etc
mkdir /tt/home1
mount -t zfs zroot/system/home1 /tt/home1
mkdir /tt/home2
mount -t zfs zroot/system/home2 /tt/home2
mkdir /tt/home3
mkdir /tt/VBOX
mkdir /tt/jails
mount -t zfs zroot/system/jails /tt/jails
mkdir /tt/jails/ponta
mkdir -p /tt/home1/www/data/kn

本体を展開する。
cd /tt

tar xvfzp /usr/freebsd-dist/base.txz
tar xvfzp /usr/freebsd-dist/kernel.txz
tar xvfzp /usr/freebsd-dist/lib32.txz
tar xvfzp /usr/freebsd-dist/src.txz
#tar xvfzp /usr/freebsd-dist/ports.txz

cd /tt/jails/ponta
tar xvfzp /usr/freebsd-dist/base.txz
tar xvfzp /usr/freebsd-dist/kernel.txz
tar xvfzp /usr/freebsd-dist/lib32.txz


mkdir /tt/dev
mount -t devfs dev /tt/dev

cp /tmp/zpool.cache /tt/boot/zfs/
#mkdir /tt/usreebsd-dist
cp -R /usr/freebsd-dist /tt/usr

あとは、好きなように実行するスクリプトを組めば良い。
cat <<CHROOTSCRIPT_EOT >/tt/zfssinglechroot.sh
#!/bin/sh

CHROOTSCRIPT_EOTが来るまでいくつもスクリプトを生成できる。 通常は、
CHROOTSCRIPT_EOT

chmod +x /tt/zfssinglechroot.sh
chroot /tt /zfssinglechroot.sh

とやって実体環境を動かしながら設定を続けていく。勿論 pkg install -y xxx なんかもできる。 ここまで出来ていると、 Jail もスクリプトに追加できたりする。VImageが動いていると、bridgeやepairを 好きなJail に持っていけるし、物理インターフェイスの bgeとかも移動できる。移動出来れば、
jexec ホスト名 route add default 192.168.168.254
のように Jail に設定できる。更に
pkg -j ホスト名 install -y bind 
なんて事もできる。 因みに /etc/jail.conf は
xec.start="/bin/sh /etc/rc";
exec.stop="/bin/sh /etc/rc.shutdown";

ponpon
{
        jid=1;
        name=ponpon;
        path=/jails/ponpon;
        host.hostname=ponpon.mydomain;
        allow.chflags;
        allow.raw_sockets;
        mount.devfs;
        devfs_ruleset=5;
  vnet;
}
jail が有効になっていれば上記の設定で Jail が動く。後はゆっくり設定すれば良い。 IPも振れるし、起動するスクリプトも自由にコントロールできる。

0 comments:

コメントを投稿