Podział dysków na partycje
Obecnie w instalowanym serwerze są co najmniej dwa dyski, które można wykorzystać jako mirror (zazwyczaj z wykorzystaniem gmirror). Historycznie mirror był budowany z całych dysków. Obecnie dzieli się każdy z dysków na identyczne partycje i wykonuje gmirror dla poszczegónych partycji.
Można skorzystać również z zfsroot, dzięki czemu zyskujemy wiele, wiele możliwości działania. Przykładowe linki:
http://ximalas.info/2012/05/04/when-to-create-a-zfs-filesystem/
http://dan.langille.org/2013/02/07/zfsroot-guides-which-one-to-use/
http://blogs.freebsdish.org/pjd/2010/08/06/from-sysinstall-to-zfs-only-configuration/ - ten wydaje się być najbardziej dopieszczonym i sensownym.
http://savagedlight.me/2012/08/30/freebsd-9-file-server-wiggum-version-2-0/
http://daemon-notes.com/articles/system/ -> Wybierz FreeBSD and 4k sector drives
http://daemon-notes.com/articles/system/ -> Wybierz Install FreeBSD 10 on ZFS mirror (GPT or MBR)
https://calomel.org/zfs_raid_speed_capacity.html - "kalkulator" dla każdego z RAIDZ - dodatkowo sporo informacji odnośnie do używania kompresji. Warte lektury.
Fizyczny podział
Pierwsza rzecz, to należy zidentyfikować dyski twarde w systemie. FreeBSD 9.x przyjęło zasadę, aby dyski nazywać ada0, ada1 itd. Tak więc podziału można dokonać za pomocą shella i dzięki temu wykonać tę operację szybko. Dokładny przepis instalacji jest podany tutaj (chodzi o kolejność przechodzenia przez menu instalatora).
Ważne: od jakiegoś casu dyski wspierają bloki 4kb, zamiast 512b. Warto o tym pamiętać (odpowiednie parametry dla poleceń tworzących partycje oraz same systemu plików) przy podziale dysków.
Skrypty
Dzięki możliwości dzielenia na partycje za pomocą Shell w menu instalacyjnym możemy zrobić następujące rzeczy:
### stary spos/ob; obecnie backup/ restore wymaga, aby dysk ada1 by/l pusty
###
###for i in 0 1; do gpart create -s gpt ada$i; gpart add -a 4k -t freebsd-boot -s 64k -l boot$i ada$i; gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada$i; done
###
# utworzenie sposobu partycjonowania
gpart create -s gpt ada0
# utworzenie poartycji boot oraz wgranie kodu do bootowania
gpart add -a 4k -t freebsd-boot -s 64k -l boot0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
# pokazanie listy partycji
gpart show ada0
# dodanie partycji boot dla zfs
gpart add -a 4k -b 34 -s 128k -t freebsd-boot ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
Oraz podział na dalsze partycje (swap, ufs, zfs, etc)
Komentarz 1:
gpart add -a 4k -t freebsd-ufs -s 1G -l root0 ada0
gpart add -a 4k -t freebsd-swap -s <_POL_ILOSC_RAM_> -l swap0 ada0
gpart add -a 4k -t freebsd-ufs -s 512M -l tmp0 ada0
gpart add -a 4k -t freebsd-ufs -s 8G -l usr0 ada0
gpart add -a 4k -t freebsd-ufs -s 8G -l var0 ada0
Wykonanie partycji ZFS
# wykonanie partycji an potrzeby zlog oraz zacache
gpart add -a 4k -t freebsd-zfs -s <_POL_ILOSC_RAM_> -l zlog0 ada0
gpart add -a 4k -t freebsd-zfs -s <_1%_ILOSC_ZFS_STORAGE_> -l zcache0 ada0
# pozostała część dysku na partycję ZFS
gpart add -a 4k -t freebsd-zfs -l zfs0 ada0
Tworzenie systemów plików UFS
Dalsza część instalacji: zdublowanie partycji na kolejny dysk, wykonanie partycji ufs, etc.:
# wykonanie konfiguracji na dysku lustrzanym
#
gpart backup ada0 | sed -E 's/([a-z])0/\11/' | gpart restore -l ada1
# w przypadku większej liczny dysków
#
for i in 1 2 3; do gpart backup ada0 | sed -E "([a-z])0/\1$i/" | gpart restore -l ada$i; done
# konieczne wykonanie bootcode: gpart restore tego nie robi
#
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
# wgranie modu/l/ow potrzebnych do zbudowania mirrorow, stripes, etc.
#
kldload geom_mirror
kldload geom_stripe
kldload opensolaris
kldload zfs
# wykonanie mirror-ów
for d in root usr var tmp; do gmirror label $d /dev/gpt/${d}0 /dev/gpt/${d}1 ; done
# jeżeli nadal chcemy, aby tmp był w stripe. Chociaż w przypadku padu dysku, są problemy, bo w /tmp nie można nic utworzyć.
#
gstripe label tmp /dev/gpt/tmp0 /dev/gpt/tmp1
# wykonanie systemu plik/ow
newfs -L root -S 4k /dev/mirror/root
newfs -L usr -U -S 4k /dev/mirror/usr
newfs -L var -U -S 4k /dev/mirror/var
newfs -L tmp -U -S 4k /dev/stripe/tmp
# tuning
tunefs -l enable -a enable /dev/mirror/root
tunefs -l enable -a enable /dev/mirror/usr
tunefs -l enable -a enable /dev/mirror/var
tunefs -l enable -a enable /dev/stripe/tmp
# montowanie
mount /dev/mirror/root /mnt
mkdir -p /mnt/opt /mnt/usr /mnt/tmp /mnt/var
mount /dev/stripe/tmp /mnt/tmp
mount /dev/mirror/usr /mnt/usr
mount /dev/mirror/var /mnt/var
Można zamontować za pomocą jednolinijkowca:
for d in tmp usr var; do mkdir -p /mnt/$d ; done
for d in tmp usr var; do mount /dev/mirror/$d /mnt/$d ; done
Wykonanie puli ZFS
Bez oddzielnych partycji zlog/zcache
# zak/ladaj/ac, /ze ostatnia partycja jest ju/z ZFSowa
gnop create -S 4096 /dev/ada0p7
gnop create -S 4096 /dev/ada1p7
# dla większej liczby dysków
#
for i in 0 1 2 3; do gnop create -S 4096 /dev/ada${i}p7; done
zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache -O mountpoint=/opt -O atime=off -O setuid=off tank mirror /dev/ada0p7.nop /dev/ada1p7.nop
Z oddzielnymi partycjami zlog/zcache
# trzeba przejść na sh z tcsh
for n in 0 1; do for i in 7 8 9; do gnop create -S 4096 /dev/ada${n}p$i; done ; done
zpool create -o altroot=/mnt -O mountpoint=/opt -O atime=off -O setuid=off -O exec=off tank mirror /dev/ada0p9.nop /dev/ada1p9.nop log mirror /dev/ada0p7.nop /dev/ada1p7.nop cache /dev/ada0p8.nop /dev/ada1p8.nop
Końcowe porządki tworzenia ZFS pool
zpool export tank
gnop destroy /dev/ada*.nop
zpool import -d /dev/gpt -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache tank
Komentarz 2:
Wykonanie potrzebnych katalog/ow w ZFS
Komentarz 3 - włącz komentarze przed podziałem na partycje:
# Jeżeli partycje tworzone po pierwszym uruchomieniu po instalacji, to:
#
rmdir /usr/local /usr/obj /usr/src /usr/home /usr/ports
# --- dla partycji /usr -----------------------------------------------
#
zfs create -o canmount=off -o exec=on -o setuid=on tank/u
zfs create -o mountpoint=/usr/home tank/u/home
zfs create -o mountpoint=/usr/local tank/u/local
zfs create -o compress=lz4 -o mountpoint=/usr/obj tank/u/obj
zfs create -o compress=lz4 -o exec=off -o setuid=off -o mountpoint=/usr/ports tank/u/ports
zfs create -o mountpoint=/usr/ports/distfiles tank/u/ports/distfiles
zfs create -o mountpoint=/usr/ports/packages tank/u/ports/packages
zfs create -o compress=lz4 -o exec=off -o setuid=off -o mountpoint=/usr/src tank/u/src
# Jeżeli partycje tworzone po pierwszym uruchomieniu po instalacji, to:
#
rmdir /var/empty /var/backups /var/db/pkg /var/mail /var/tmp/vi.recover /var/tmp
# zmiana nazwy wybranych katalogów
for d in audit crash db spool run log; do mv /var/$d /var/${d}.old ; done
# --- dla partycji /var -----------------------------------------------
#
zfs create -o canmount=off -o compress=lz4 -o exec=off tank/v
zfs create -o mountpoint=/var/audit tank/v/audit
zfs create -o mountpoint=/var/backups tank/v/backups
zfs create -o mountpoint=/var/crash tank/v/crash
zfs create -o mountpoint=/var/db tank/v/db
zfs create -o mountpoint=/var/empty tank/v/empty
zfs create -o mountpoint=/var/log tank/v/log
zfs create -o mountpoint=/var/mail tank/v/mail
zfs create -o mountpoint=/var/run tank/v/run
zfs create -o mountpoint=/var/spool tank/v/spool
zfs create -o mountpoint=/var/www tank/v/www
# albo puścić wszystko w pętli
#
for d in audit backups crash db empty log mail run spool www; do zfs create -o mountpoint=/var/$d tank/v/$d; done
# wykonanie katalogów na potrzeby backupów
#
zfs create -o mountpoint=/opt/backups tank/b
zfs create tank/b/bsdbackup
zfs create tank/b/dumps
# wykonanie katalogów na potrzeby SQUIDa (opcjonalnie)
#
zfs create -o mountpoint=/opt/squid tank/s
zfs create tank/s/cache
zfs create tank/s/logs
zfs create -o mountpoint=/var/squid tank/v/squid
### Ustawienie exec wymagane przez domy/sln/a konfiguracj/e portupgrade
### Ew. zmieni/c ustawienia TMPDIR w pkgtools.conf
###
zfs create -o exec=on -o mountpoint=/var/tmp tank/v/tmp
# przypadku migrowania katalogów - ich wcześniejszego usuwania:
#
mkdir -p /var/tmp/vi.recover/
chmod -R 1777 /var/tmp
for d in audit crash db spool run log; do cp -pR /var/${d}.old/ /var/$d/ ; done
Kroki do wykonania po instalacji
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

UWAGA! W przypadku instalacji usługi w OVH/SYS nie można wykonywać instalacji partycji zfs. Jest gdzieś błąd w całej konfiguracji, tak że zfs nie wstaje po pierwszym reboocie. Dlatego też pomijamy krok z partycją zfs. Można wykonać później - szczególnie łatwo dla tank/u. Partycje tank/v najwyżej wykonane zostaną w "single user mode / rescue-bsd