Chtěl jsem si po čase vyzkoušet ZFSku, protože posledně jsem si ji rozběhal někdy v roce 2013 a to to běhalo ještě na hardwarovém raidu jen kvůli konzistenci dat.
Rozběh mi připadal velmi snadný. Preventivně uvádím informaci, že pokud si vytvoříte ZFS a ztratíte v ní data, tak za to neberu zodpovědnost, ani záruku. Každý si musí rozhodnout sám, jestli data bude držet jen na jednom místě, nebo na více místech a jestli je pro něj ZFS ta pravá volba.
V mém případě má po 7 letech, kdy jsem naposledy ZFS implementoval tyto důvody:
1) Úspora místa pomocí komprese a deduplikace
2) Otestování výkonnosti na obyčejných discích (lze možnost rozběhat i caching, do toho se časem taky vrhnu). (momentálně to zkouším na stařičkem AMD A6 2 jádrovém a na to domácí žvýkání to stačí. Určitě bych ZFSku nestavěl na nějakém starém intel atomu a už teď mi dochází, že byla chyba tam cpát jen 6GB RAM, ale že by to chtělo minimálně 8, ideálně i 12 nebo 16GB RAM, ať mám rezervu)
3) Otestování spolehlivosti
4) Ověřit, co se stane až a) dojdou RAMky b) až dojde místo na poli, jestli rapidně klesne i výkon pole či nikoliv.
5) Otestovat jak funguje v domácím prostředí snapshoting, jak rychle by na tom běhala virtualizace apod…Možnosti hraní jsou zkrátka neomezené
echo "deb http://deb.debian.org/debian buster-backports main contrib deb-src http://deb.debian.org/debian buster-backports main contrib" > /etc/apt/sources.list.d/buster-backports.list echo "Package: libnvpair1linux libuutil1linux libzfs2linux libzpool2linux spl-dkms zfs-dkms zfs-test zfsutils-linux zfsutils-linux-dev zfs-zed Pin: release n=buster-backports Pin-Priority: 990" > /etc/apt/preferences.d/90_zfs
apt update -y && apt-upgrade -y && apt install --yes dpkg-dev linux-headers-$(uname -r) linux-image-amd64 && apt-get install zfs-dkms zfsutils-linux -y
export PATH=$PATH:/usr/sbin/
Máme nainstalováno.
Rozběh ZFS raidz2 pole
Pomocí fdisk -l si ověřte, které disky do ZFSky chcete vložit, v mém případě jsem si uložil tyto příkazy:
zpool create zfs raidz2 /dev/sda /dev/sdb /dev/sdc /dev/sde /dev/sdf /dev/sdg -f zfs set xattr=sa zfs zfs set acltype=posixacl zfs zfs set compression=lz4 zfs zfs set atime=off zfs zfs set relatime=off zfs zfs set dedup=on zfs
-f v příkazu zpool create umožní vytvořit raidz2 pole i z disků, které mají jinačí kapacitu. Doma jsem vyhrabal ještě jeden 3TB disk a ostatní jsou velikosti 2TB a já chtěl zkusit, jak se to bude chovat. No a platí to staré známé pravidlo „přizpůsobí se to velikosti nejmenšího z nich“.
Co který příkaz znamená zjistíte ve zdroji2.
Pro mě nejdůležitější příkazy:
dedup=on (pokud máte nějaký soubor na ZFS poli více než 1x…tak se tam uloží jedenkrát a podruhé se tam uloží jen pointer na ty stejná data, takže jste schopni šetřit místo)
compression=lz4 souborový systém je komprimovaný, z pouček vidím, že co 1TB diskové kapacity, to 1GB RAM, takže počítejte, že vaše diskové pole musí mít nějakou rezervu. Momentálně zkouším na 6GB RAM 7,1TB pole, takže uvidím, co to udělá, až tam všechno nasypu. (pozor, v mém případě tam posílám kopie náhodně vygenerovaných dat, takže počítám s tím, že v té zfs mohu data ztratit).
Současně přitom testuji bonding na switchi zyxel gs1200-8. Momentálně to ladím, jedná se defakto o nejlevnější 8 portový switch, který umožňuje na 2 zařízení bonding na 2 portech. Zázrak to sice není, protože to neumí plnohodnotný LACP 802.3ad, ale říkám tomu socka varianta „na takové to domácí žvýkání“. Samozřejmě switch je v kovovém pouzdře, takže by dobře sloužil i v malé firemní síti. když se s tímto switchem dostanu na 2Gbps rychlosti mezi 2 zařízeními, tak budu nad míru spokojen. 😉
Zde už ukázka statusu, jak to vypadá, když to máte složené:
# df -Th && zfs get all|grep compressratio;
Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 2.8G 0 2.8G 0% /dev tmpfs tmpfs 570M 8.0M 562M 2% /run /dev/sdd2 ext4 109G 1.4G 107G 2% / tmpfs tmpfs 2.8G 0 2.8G 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 2.8G 0 2.8G 0% /sys/fs/cgroup /dev/sdd1 ext4 922M 48M 850M 6% /boot zfs zfs 7.2T 662G 6.6T 10% /zfs tmpfs tmpfs 570M 0 570M 0% /run/user/0 //server/data cifs 7.3T 6.9T 373G 95% /mnt tmpfs tmpfs 570M 0 570M 0% /run/user/1000 zfs compressratio 1.19x - zfs refcompressratio 1.19x -
# zpool status pool: zfs state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zfs ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 sda ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 sde ONLINE 0 0 0 sdf ONLINE 0 0 0 sdg ONLINE 0 0 0 errors: No known data errors zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zfs 10.9T 782G 10.1T - - 1% 7% 1.28x ONLINE -