Wat doe je als je voor een grafisch bedrijf een Apple Xserve fileserver moet vervangen? De nieuwe fileserver moet naadloos aansluiten op Macs, die op de prepress afdeling gebruikt worden, maar tegelijkertijd moeten ook de PC’s op andere afdelingen ermee kunnen werken. De server moet snel zijn, grote hoeveelheden data op kunnen slaan en bitrot bestendig zijn. Hij moet ook betrouwbaar zijn, aangezien deze server de spil van het bedrijf vormt. Tenslotte moet het allemaal zo goedkoop mogelijk, vanwege de crisis en de moordende concurrentie van de internetdrukkers. Kortom, een hele uitdaging.

 

 

De huidige Xserve simpelweg vervangen door een nieuwe is geen optie, aangezien Apple deze niet meer maakt. Windows op de server draaien is ook geen optie, want de licenties zijn duur en in het verleden is al gebleken dat NTFS niet echt het meest geschikte filesystem is…

 

 Met name de integriteit van de data is een belangrijk punt. Om dit tegen te gaan, is er tegenwoordig ZFS en BtrFS. BtrFS is echter nog relatief jong en was in 2013 (inderdaad, het is al weer een paar jaar geleden) niet geschikt voor een bedrijfsnetwerk. De keuze voor ZFS is dan ook snel gemaakt. En als je open source wilt gebruiken, dan kom je al snel uit bij FreeBSD.

 

 Er werd een nieuwe server met 12 schijven aangeschaft. De root werd geïnstalleerd op een Gmirror van 2 schijven. ZFS-on-root was destijds namelijk teveel gedoe. De overige 10 schijven werden aan een zpool toegewezen: 3 vdevs van elk 3 schijven en 1 SSD, voor L2ARC en ZIL. De discussies over welke setup hier het beste is, kunnen behoorlijk hoog oplopen als je de forums erop naslaat. Maar na twee jaar is gebleken dat dit een goede balans tussen performance, redundantie en bruikbare opslagcapaciteit oplevert.

 

 

ZFS

 

FreeBSD staat dus op de eerste 2 schijven. De overige 10 schijven worden samengevoegd in een zpool. Onder Linux kun je hier /dev/disk/by-uuid voor gebruiken, zodat je bij een eventuele storing gemakkelijk kunt achterhalen om welke schijf het gaat. Onder FreeBSD werkt dat echter niet zo. Om een schijf toch te kunnen identificeren, is het aan te raden om ze te labelen met Glabel. Je kunt de schijven dan toevoegen aan de hand van het label. Het is daarbij raadzaam om eventueel aanwezige metadata te wissen, dat een enkele keer door de fabrikant wordt achtergelaten. Dat kan namelijk soms voor rare problemen zorgen. Voorkomen is immers beter dan genezen.

 

 

 

*** LISTING ***

 

Gpart destroy -F da0

 

glabel label schijf00 /dev/da0

 

*** EINDE LISTING ***

 

 

Bij het aanmaken van een zpool kan vrijwel elke naam gekozen worden. In dit voorbeeld kiezen we voor de naam Opslag. Let hierbij op de optie raidz. Geef je dat niet expliciet mee, dan zal ZFS er een striped vdev van maken, die niet redundant is. Als er dan een schijf knalt, dan raak je data kwijt!

 

 

 

*** LISTING ***

 

zpool create Opslag raidz /dev/label/schijf00 /dev/label/schijf01 /dev/label/schijf02

 

*** EINDE LISTING ***

 

 

Daarmee is de zpool gecreëerd. Deze bevat nu nog 1 vdev van 3 schijven. Voeg ook de overige vdevs toe. Let hierbij weer op de optie raidz. Als je per ongeluk een striped vdev toevoegt, dan is dit niet meer terug te draaien. Je moet de zpool dan volledig destroyen en opnieuw aanmaken. Dat is geen ramp, als je die net hebt aangemaakt, maar een nachtmerrie als je in een later stadium een vdev toevoegd aan een zpool waar al data opstaat.

 

 

*** LISTING ***

 

zpool add -f Opslag raidz /dev/label/schijf03 /dev/label/schijf04 /dev/label/schijf05

 

zpool add -f Opslag raidz /dev/label/schijf06 /dev/label/schijf07 /dev/label/schijf08

 

*** EINDE LISTING ***

 

 Tenslotte voegen we een SSD toe, die we gebruiken voor L2ARC en ZIL.

 

 Om performance zo hoog mogelijk te houden, maakt ZFS zwaar gebruik van caching, zodat de meest gebruikte bestanden snel toegankelijk zijn. Dit heet Adaptive Replacement Cache, of ARC. ZFS gebruikt hiervoor al het vrije geheugen. Hoe meer geheugen, hoe meer cache en hoe meer performance. Vandaar dat van ZFS vaak gezegd wordt, dat het ontzettend veel geheugen vereist. Niet helemaal waar, maar veel geheugen kan zeker geen kwaad. Geheugen is echter duur, zeker wanneer het om servergeheugen gaat. Om dat op te lossen, kan ZFS ook een snelle SSD als tweede cache gebruiken: de L2ARC.

 

 ZFS gebruikt ook de ZFS Intent Log (ZIL), waar metadata van weg te schrijven bestanden gelogd wordt. Dit is te vergelijken met het journal van bijvoorbeeld ext4. Normaal gesproken staat de ZIL op de zpool zelf, maar door deze op een snelle SSD te zetten, kan ook dit proces een stuk vlotter afgehandeld worden. Dat komt de performance dan natuurlijk weer ten goede.

 

 

 

Allereerst moet de SSD opgedeeld worden in 2 partities. De SSD is 512GB groot. Daarvan gebruiken we 12GB voor de ZIL en de rest voor L2ARC.

 

 

 

*** LISTING ***

 

gpart create -s gpt da11

 

gpart add -t freebsd-zfs -b 2048 -a 4k -l log0 -s 12GB da11

 

gpart add -t freebsd-zfs -a 4k -l cache0 da11

 

*** EINDE LISTING ***

 

 

Voeg ze daarna toe aan de zpool:

 

 

 

*** LISTING ***

 

zpool add Opslag log /dev/gpt/log0

 

zpool add Opslag cache /dev/gpt/cache0

 

*** EINDE LISTING ***

 

 Bekijk de status van je nieuwe zpool met:

 

 

 

*** LISTING ***

 

zpool status -v

 

*** EINDE LISTING ***

 

 

 

In dit voorbeeld wordt 1 SSD gebruikt. Het is echter beter om de ZIL in een mirror te plaatsen, waardoor je het risico op dataverlies zo klein mogelijk maakt. Dit kan echter alleen gebeuren als de ZIL crasht én tegelijkertijd de server uitvalt. Die kans is dus gelukkig niet zo heel groot. Normaal gesproken schakelt ZFS bij een crash weer terug naar een ZIL op de zpool zelf. Dan kost het je dus alleen performance. Voor het verlies van de L2ARC geldt simpelweg dat je je cache kwijt bent. Dat kost je dus ook alleen performance.

 

 

 

Nu is het tijd om partities toe te voegen, die je vervolgens weer kunt sharen. Het is raadzaam om voor elke share een aparte ZFS-partitie aan te maken, want je kunt dan namelijk eenvoudig per share andere ZFS-opties instellen. Het aanmaken van partities onder ZFS is erg flexibel. Het is eigenlijk net zo eenvoudig als het aanmaken van een directory.

 

 

 

*** LISTING ***

 

zfs create Opslag/Logos

 

*** EINDE LISTING ***

 

  

 

Verder is het belangrijk om ZFS regelmatig te scrubben, waarbij de integriteit van alle data gecontroleerd wordt. De ZFS-versie van fscheck, zeg maar. Dit is echter een tijdrovend proces, dat een behoorlijke wissel op het systeem trekt. Doe dit dan ook in de weekenden.

 

 

 

*** LISTING ***

 

zpool scrub Opslag

 

*** EINDE LISTING ***

 

 AFP

 

Het zal bekend zijn dat Apple een eigenzinnig bedrijf is, die overal een eigen oplossing voor bedenkt. Op zich prima natuurlijk, ware het niet dat ze deze oplossingen zelden delen. Het werkt allemaal prima, mits je alleen producten van Apple gebruikt en dat uitsluitend doet op de manier, zoals Apple dat voorschrijft.

 

 

 

Dat is natuurlijk niet de mentaliteit waar open source groot mee is geworden. Gelukkig zijn er ontwikkelaars, die de moeite nemen om deze oplossingen te reverse-engineeren. Eén van deze Apple-oplossingen is het AFP-protocol. Dit protocol is wat SMB is voor Windows. Het wordt gebruikt voor het delen van bestanden tussen Macs. Voor SMB hebben we Samba en voor AFP is er Netatalk. Dat is wat we gebruiken voor het delen van bestanden, zodat we FreeBSD naadloos in kunnen zetten als fileserver voor de Macs.

 

 

 

Netatalk

 

De installatie van Netatalk kan eenvoudig via Ports (de packagemanager van FreeBSD) gedaan worden. Het gaat hierbij om het oudere Netatalk2 gaat. Netatalk3 was destijds nog niet ver genoeg om in een productieomgeving in te zetten.

 

 

 

*** LISTING ***

 

cd /usr/ports/net/netatalk

 

make install clean

 

*** EINDE LISTING ***

 

 

 

Als Netatalk is geïnstalleerd, kunnen de shares ingesteld worden. Dat gaat verrassend eenvoudig. Open het bestand /usr/local/etc/AppleVolumes.default met je favoriete editor. Helemaal onderin vind je de optie :DEFAULT:. Direct daaronder staat een tilde (~). Deze tilde geeft aan dat de home-directories gedeeld worden. Direct daaronder kunnen de shares ingesteld worden. Dat gebeurt met deze syntax:

 

 

 

*** LISTING ***

 

/pad/naar/directory “Een omschrijving” allow:@groepnaam

 

*** EINDE LISTING ***

 

 

 

Bijvoorbeeld:

 

 

 

*** LISTING ***

 

/Opslag/Logos “Bedrijfs Logo’s” allow:@prepress

 

*** EINDE LISTING ***

 

 

Het spreekt natuurlijk voor zich dat de gebruikers dan wel lid moeten zijn van de groep prepress.

 

 

Verder voeg je aan de optie :DEFAULT: de volgende parameters toe:

 

 

 

*** LISTING ***

 

:DEFAULT: ea:ad options:upriv,usedots,invisibledots umask:002 fperm:0775 dperm:0775 veto:TheVolumeSettingsFolder/TheFindByContentFolder/”Temporary Items”/”Network Trash Folder”/Icon/desktop.ini/RECYCLER/

 

*** EINDE LISTING ***

 

  

 

Dit zorgt er onder andere voor dat verborgen systeembestanden van Windows niet worden weergegeven. De exacte functie van deze parameters wordt uitvoerig beschreven in het commentaar van het configuratiebestand zelf.

 

 Edit tenslotte /etc/rc.conf en voeg daar de volgende regels aan toe.

 

 

 

*** LISTING ***

 

netatalk_enable=”YES”

 

cnid_metad_enable=”YES”

 

afpd_enable=”YES”

 

*** EINDE LISTING ***

 

 Start daarna Netatalk.

 

 

 

*** LISTING ***

 

/usr/local/etc/rc.d/netatalk start

 

*** EINDE LISTING ***

 

 Samba

 

Natuurlijk zitten er ook Windows PC’s in een bedrijfsnetwerk. Natuurlijk is het nodig dat die ook toegang hebben tot de bestanden, die op de prepress afdeling gebruikt worden. Daar is uiteraard Samba voor nodig. Nu is de installatie van Samba al meerdere keren aan bod gekomen in Linux Magazine, dus het is dan ook niet nodig om daar dieper op in te gaan. Een aantal zaken zijn echter belangrijk in een gemengde Mac-Windows omgeving.

 

 Een probleem waar je tegenaan loopt, is dat Windows en OS X verschillende systeembestanden en mappen gebruiken. Onder het betreffende OS zijn die verborgen, zodat niemand er last van heeft, maar in een gemengd netwerk zien de Windowsgebruikers de systeembestanden van de Mac en vice versa. Onder Samba moeten we dan natuurlijk de systeembestanden van OS X verbergen voor de Windowsgebruikers.

 

 Voeg deze regels toe aan /usr/local/etc/smb.conf

 

 *** LISTING ***

 

veto files = /:2eFBCLockFolder/.FBCLockFolder/:2eFBCIndex/.FBCIndex/TheVolumeSettingsFolder/TheFindByContentFolder/Temporary Items/Network Trash Folder/.AppleDB/:2eVolumeIcon.icns/.VolumeIcon.icns/Icon/.AppleDouble/.AppleDesktop/desktop.ini/RECYCLER/

 

 

 

hide dot files = yes

 

*** EINDE LISTING ***

 

 ACL’s

 

ZFS maakt gebruik van uitgebreide Access Control Lists, om de rechten van mappen en bestanden te bepalen. De bekende Posix rechten worden natuurlijk ook ondersteund, maar die worden echter berekend aan de hand van de ACL’s. Het voordeel van deze ACL’s is dat er uitgebreide mogelijkheden zijn om te bepalen wie wat mag doen. Bovendien sluit NFSv4, dat ZFS gebruikt voor zijn ACL’s, bijna naadloos aan op het rechtenbeheer van Windows. Dat maakt het gelukkig weer stukken eenvoudiger om Samba op te nemen in een Windowsdomein.

 

 Om Samba gebruik te laten maken van ACL’s, moet Samba met de optie ACL gecompiled zijn. Daarna moet in de configuratie van Samba aangegeven worden, dat de ACL’s van ZFS gebruikt moeten worden.

 

 *** LISTING ***

 

unix extensions           = no

 

ea support                  = yes

 

inherit acls      = no

 

map acl inherit           = yes

 

*** EINDE LISTING ***

 

 

 

En deze opties per share:

 

 

 

*** LISTING ***

 

vfs objects     = zfsacl

 

nfs4:mode       = special

 

nfs4:acedup     = merge

 

nfs4:chown      = yes

 

*** EINDE LISTING ***

 

 

 

Dat heeft echter weer tot gevolg, dat de groepsrechten voor de PC’s niet meer werken. Hoewel deze op rwx staan, zullen er door de uitgebreidere ALC’s toch onvoldoende rechten zijn. Gelukkig is dat snel op te lossen door die aan te passen.

 

 

 

*** LISTING ***

 

setfacl -b -m group@:rwxp—aARWcCos:fd—-:allow /pad/naar/share

 

*** EINDE LISTING ***

 

 

 

De -b optie zorgt ervoor, dat eventuele extra ACL’s gestript worden, behalve die voor owner, group en everyone. De f en de d aan het einde geven aan, dat deze rechten overgenomen moeten worden door nieuwe bestanden en mappen in de betreffende directory.

 

 

 

Setfacl werkt helaas (nog) niet recursive. Om dat op te lossen, kan de volgende workaround toegepast worden.

 

 

 

*** LISTING ***

 

find /pad/naar/share -type d -exec setfacl -b -m group@:rwxp–aARWcCos:fd—-:allow {} \;

 

find /pad/naar/share -type f -exec setfacl -b -m group@:rwxp–aARWcCos:——:allow {} \;

 

*** EINDE LISTING ***

 

 

 

Waarbij type d natuurlijk voor directories staat en type f voor files.

 

 

 

De ZFS-partities moeten ook aangepast worden om ACL’s goed te laten werken met Samba.

 

 

 

*** LISTING ***

 

zfs set aclmode=passthrough Opslag/Logos

 

zfs set aclinherit=passthrough Opslag/Logos

 

*** EINDE LISTING ***

 

 

 

Netatalk2 heeft nog geen support voor ACL’s en gebruikt gewoon de oude POSIX permissies. Netatalk3 heeft die support wel.

 

 

 Migratie

 

Nu alles draait, is het tijd om de data over te zetten van de oude Xserve naar de nieuwe server. Dit kun je natuurlijk doen met rsync, aangezien OS X gewoon SSH kan draaien. Onder de motorkap blijft het natuurlijk UNIX. Helaas blijkt dat voor problemen te zorgen. Apple slaat namelijk metadata op in het eigen filesystem, HFS. Onlangs heeft Linus Torvalds zich erover uitgelaten, dat hij HSF het verschrikkelijkste filesystem ooit vindt en dat vooral niemand het moet gebruiken. Ik denk dat hij gelijk heeft.

 

 

Bij ieder ander filesystem zal OS X de metadata in verborgen directories opslaan, iets dat probleemloos met rsync is over te zetten. Maar aangezien de data op een HFS filesystem staat, is dat niet het geval. Dus zal de metadata niet worden meegenomen. De enige manier om dit probleem op te lossen, is alle data met Finder naar de nieuwe server te kopiëren. Finder zal dan de metadata wel meenemen en netjes in de eerdergenoemde, verborgen directories opbergen.

 

 

 Snapshots

 

Er is één aspect van ZFS, dat werkelijk briljant is: namelijk het maken van snapshots. Iedere systeembeheerder kent het wel. Iemand belt, omdat hij/zij per ongeluk een bestand heeft verwijderd. Om die reden maken veel bedrijven incremental backups, gedurende de week. Een dure oplossing, dat veel beter kan. Met ZFS kun je de server snapshots laten maken. Bijvoorbeeld elke nacht of om de zoveel uur. Deze oplossing is veel sneller, flexibeler, efficiënter en goedkoper. Het maken van snapshots werkt als volgt:

 

 

 

*** LISTING ***

 

zfs destroy Opslag/Logos@Maandag

 

zfs snapshot Opslag/Logos@Maandag

 

zfs destroy Opslag/Logos@1200

 

zfs snapshot Opslag/Logos@1200

 

*** EINDE LISTING ***

 

 Hiermee verwijder je eerst een oude snapshot, om vervolgens een nieuwe te maken. In de map /Opslag/Logos/.zfs/snapshot/ vind je de gemaakte snapshots. Daar kun je dan moeiteloos het verwijderde bestand van terughalen. Daarbij wil ik opmerken dat .zfs onzichtbaar is. Hij is er echter wel degelijk!

 

 Het financiële plaatje

 

Uiteindelijk is er een dure Xserve vervangen door een server, die volledig op open source software draait. Met het gebruik van open source is een behoorlijke kostenbesparing te realiseren. De software zelf is gratis, maar het geeft je ook meer vrijheid om precies de hardware te kiezen, die nodig is. Een dure, kant-en-klare merkserver is vaak helemaal niet nodig, dus je kunt de kosten flink naar beneden drukken. Open source is dus zeker iets wat de overweging waard is, in deze magere tijden. Magere tijden, die extra zwaar drukken op de grafische sector.

 

 

Conclusie

 

Het gebruik van open source in het bedrijf is dus zeker een realistische optie, ook in de grafische sector. Onze server draait nu al twee jaar naar tevredenheid. Natuurlijk hebben we in die twee jaar wel problemen gehad, maar je zult hoe dan ook te maken krijgen met problemen, ongeacht voor welke oplossing je kiest. Bovendien waren die problemen in de meeste gevallen meer aan de systeembeheerder, dan aan de software te wijten… 😉

 

 We hebben nu een krachtige en flexibele fileserver, met de kracht van ZFS. De snapshots noemde ik al en de waarborging van de data integriteit is een ander punt. Dit zijn zaken, die een dure Xserve,Windows-server of RAID-controllers je niet zomaar zullen bieden.

 

 Wie er de moeite voor wilt nemen, kan met open source dus veel winst behalen!