ZFS

From A-Eskwiki
Jump to: navigation, search


ZFS is het file system dat gebruikt wordt om alle actieve data in op te slaan op Haskell. Oorspronkelijk is het ontwikkeld door Sun Microsystems voor Solaris. Vervolgens is het geport naar onder andere FreeBSD en Linux. Omdat het ontwikkeld is onder de CDDL license en daarom is ZFS on Linux geen onderdeel van de kernel, maar een losse module die via dkms apart ingeladen moet worden. Op Haskell draait ZFS dus ook niet voor zijn root partitie, maar alleen voor data partities. Het zou anders kunnen dat bij een kernel of zfs update de kernel modules niet goed gebouwd worden je uberhaupt niet kan booten en dit is vrij problematisch.

Volume Manager vs File System

ZFS is niet alleen een file system, het is ook een volume manager, zoals LVM. Het is belangrijk om dit verschil tussen deze 2 lagen in het achterhoofd te houden. De bovenste laag heet bij ZFS de pool. De pool bestaat uit een aantal disks. Deze kunnen dan gemirrored worden, of in een willekeurige raid gezet worden. Deze pool werkt ongeveer hetzelfde als bij LVM. Er is een pool met data beschikbaar en deze kan vervolgens weer gesplitst worden in datasets. Elke dataset heeft een aantal properties. Veel opties die bij andere dingen als mount opties in de fstab staan zijn in ZFS properties (mountpoint/extended attributes/atime/compressie). Er is ook een ZFS service en die regelt bij het opstarten alles zelf met betrekking tot mounten en sharen van file systems, dus er is niets van zfs te zien in /etc/fstab.

Raid Configuratie

ZFS draait in een zogehete raidz2. Dit is in feite een raid 6 met wat extra voordelen, vanwege de integratie. Raidz's hebben geen last van het zogeheten Write Hole probleem. Bij een raidz2/raid6 kunnen er 2 disks uitvallen voordat dataverlies optreed.

Versies

ZFSonLinux is een aparte kernel module en er komen geregeld nieuwe versies uit. De updates zijn tamelijk grondig, dus het is verstandig niet direct te upgraden zodra er een nieuwe release uit is. Op moment van schrijven draait Haskell ZoL 0.6.3-1 en Max draait 0.6.3. Nieuwe versies zijn altijd backwards compatible. Ze bieden echter wel de optie aan om de pool te upgraden naar de nieuwe versies, zodat er gebruik gemaakt kan worden van nieuwe functionaliteit. Wees dus terughoudend met het upgraden van de pool. Het is ook handig om de github, te vinden op https://github.com/zfsonlinux/zfs/issues, in de gaten te houden om te kijken of er niet al te veel problemen zijn met de nieuwe versies.

Na het updaten van ZFS of de kernel kan het nog wel eens gebeuren dat de package manager de nieuwe modules niet goed build en dat dit handmatig gebeuren moet. Dit gebeurd met de volgende commandos. Na het builden moet de zpool nog handmatig geimporteerd worden, dus schrik niet als je geen pools ziet.

 dkms install spl/<VERSION>
dkms install zfs/<VERSION>

Waar <VERSION> de versie van zfs is, dus bv 0.6.5.

Blocksize problemen

Het aanmaken van de raidz6 pool is gebeurd met 4 sas schijven + 2 dummy's. De dummy's zijn later vervangen door 2 seagate's. De sas schijven hebben echter een blocksize van 512 en de pool heeft daardoor ook een blocksize van 512 gekregen. De seagates hebben echter een blocksize van 4096, waardoor write amplification optreed. Andersom zou dit geen probleem zijn. De write performance van de pool is hierdoor drastisch lager, potentieel 8x. Of de pool moet opnieuw gemaakt worden, of de seagate's moeten worden vervangen door schijven met een physical block size van 512 byte.

Caching

ZFS heeft eigen caching mechanismes die buiten de linux page cache om gaat. Er zijn 2 belangrijke caches die belangrijk zijn. De ram caching. Deze heet de ARC en is ingesteld op 4GB. Daarnaast wordt er aan write caching gedaan. Data wordt eerst naar SSD geschreven en dan pas naar HDD. Deze write cache heet de ZIL (ZFS Intent Log). Statistieken over o.a. deze caches kunnen gevonden worden in `/proc/spl/kstat/zfs`


Do's and Don't

Do's

  • De man pages van de commando's zfs en zpool zijn zeer uitgebreid. In het geval dat je niet helemaal weet hoe iets werkt, kijk eerst in de man page.
  • Er is een stuk over ZFS in de sysop inwerking, te vinden op https://home.a-eskwadraat.nl/~sysop/inwerking/inwerking.pdf, dit is een goede start om een beetje bekend te raken met ZFS.
 man zpool
man zfs

Dont's

  • Wees voorzichting met zfs destroy, dubbelcheck altijd als je iets wilt verwijderen.
  • Als je met disks bezig bent, werkt altijd met /dev/disk/by-id/.. en niet met kale /dev/sda e.d.
  • Doe nooit iets met zpool labelclear, dit doet enge dingen met je partities.
  • Wees voorzichtig met het upgraden van ZFS.