Greyhole: eenvoudig alternatief voor RAID en LVM?

 

RAID en LVM zijn prima tools om je te wapenen tegen schijfdefecten en om opslagruimte flexibel in te delen. Vond je de workshops uit deze serie in de vorige nummers tóch wat te ingewikkeld? Dan is Greyhole misschien iets voor jou.

Zowel RAID als LVM hebben hun eigen toepassingsgebied, al worden ze vaak gecombineerd. RAID gebruik je om belangrijke data te beschermen tegen schijfdefecten. Zo hoef je niet meteen terug te vallen op een (misschien niet erg recente) backup als er een schijf stuk gaat. LVM staat je toe om verschillende schijven te combineren in één groot bestandssysteem of om één grote schijf in meerdere kleine bestandssystemen op te splitsen. Bovendien kan je bestandssystemen achteraf nog altijd vergroten of verkleinen, schijven toevoegen of verwijderen, enzovoorts. Maar al die features zorgen wel voor een zekere complexiteit. Bij elke wijziging aan je RAID- of LVM-setup moet je dus goed je hoofd erbij houden. Het is immers niet ondenkbaar dat je data verliest door een verkeerd commando uit te voeren!

Greyhole
Heb je geen zin om je te verdiepen in RAID en LVM, dan is Greyhole een interessant alternatief. Greyhole kan je nog het best vergelijken met Microsoft’s Drive Extender-technologie in de eerste versie van Windows Home Server. Drive Extender voegt alle beschikbare schijven samen tot één zogenaamde ‘storage pool’. Vervolgens definieer je één of meerdere gedeelde mappen en per map stel je in of Drive Extender de data moet dupliceren (kopiëren naar een tweede schijf) of niet. De schijven in de storage pool hoeven ook niet even groot te zijn (zoals bij RAID).

Uiteraard kan Greyhole niet tippen aan de mogelijkheden van RAID en LVM. Maar de meest bruikbare features voor thuisgebruik zijn wél aanwezig:

– schijven van verschillende groottes combineren tot één bestandssysteem (LVM)

– schijven toevoegen en verwijderen zonder dat de gebruiker daar iets van merkt (LVM / RAID)

– bescherming tegen schijfdefecten door belangrijke data te kopiëren naar een tweede schijf (RAID)

Bovendien is Greyhole veel eenvoudiger opgebouwd dan RAID of LVM. Greyhole werkt niet met virtuele devices (zoals /dev/md0 of /dev/vg_users/lv_filip), maar met gewone partities. Je mag je schijven dus partitioneren en formatteren alsof je ze zonder Greyhole zou gebruiken. De greyhole daemon zorgt er vervolgens voor dat alle bestanden naar één of meerdere schijven gekopieerd worden. Koppel je die schijven aan een ander systeem, dan kan je meteen bij je data. Bij RAID en LVM is dat wel iets ingewikkelder.

Landing zones
Greyhole verspreidt de data dus over verschillende schijven, maar als gebruiker heb je gewoon één locatie nodig waarin je al jouw bestanden terugvindt. Dit wordt de ‘landing zone’ genoemd. Aangezien Greyhole vooral interessant is voor homeservers, hebben de ontwikkelaars gekozen voor Samba om die landing zones te implementeren. In een Greyhole-setup dient Samba dus niet enkel om mappen te delen via je netwerk, maar ook om de data in die mappen naar één of meerdere schijven weg te schrijven. Voor de gebruikers is dat volledig transparant. Zij zien enkel een gedeelde map, maar de onderliggende datastructuur (met meerdere schijven en één of meerdere kopieën van alle bestanden) blijft verborgen. Dat betekent ook dat je de verschillende partities van een Greyhole storage pool niet rechtstreeks mag benaderen. Wijzigingen moeten steeds via de Samba shares doorgevoerd worden, anders werkt het duplicatiemechanisme niet. Wil je de data tóch lokaal benaderen? Volg dan de instructies op http://bit.ly/1hwkKVz.

Een landing zone is dus niet meer dan een locatie in het bestandssysteem van je homeserver die gedeeld wordt via Samba. Het verschil met een gewone Samba share is dat die landing zone slechts als tijdelijke opslagruimte gebruikt wordt. De greyhole daemon zal nieuwe bestanden in de landing zone zo snel mogelijk kopiëren naar één of meerdere schijven in de storage pool. Zodra die kopie voltooid is, wordt het originele bestand in de landing zone vervangen door een link naar de kopie in de storage pool.

Installatie
Greyhole is nog niet aanwezig in de repositories van elke distributie. Op www.greyhole.net/download vind je gelukkig instructies om een extra repository toe te voegen aan apt (Debian, Ubuntu) of yum (Fedora, CentOS). In andere distributies zal je Greyhole manueel moeten installeren. De instructies hiervan vind je op http://bit.ly/1i18iyG. Na de installatie van het greyhole-pakket moet je nog enkele commando’s uitvoeren om de installatie te voltooien. Zo moet je de greyhole-database initialiseren en een aantal opties voor Samba toevoegen aan het bestand /etc/samba/smb.conf. De precieze instructies vind je in het bestand /usr/share/greyhole/USAGE of op http://bit.ly/1h2i15m.

Storage pool
De storage pool en landing zones vereisen een beetje extra uitleg. Alle schijven voor de storage pool voorzie je van één partitie met daarop een ext4-bestandssysteem. Vervolgens mount je de schijven op een locatie die duidelijk aangeeft dat ze voor Greyhole bedoeld zijn, bijvoorbeeld /mnt/greyhole/disk1, /mnt/greyhole/disk2, enzovoorts. Onder elk mountpoint maak je dan een nieuwe directory aan, bijvoorbeeld ‘gh’. Tot slot voeg je die directories toe aan Greyhole’s storage pool in het bestand /etc/greyhole.conf (zie afbeelding 1).

 


1 Greyhole’s storage pool bevat 4 gepartitioneerde schijven

Merk op dat we aan de storage pool mountpoints toevoegen en geen device files, zoals bijvoorbeeld /dev/sdb1 in een RAID-setup. Die mountpoints hoeven zelfs geen lokale schijven te zijn. Ook een gedeelde map van een NAS in je lokale netwerk is perfect mogelijk.

Greyhole groepeert de beschikbare schijven verder in Drive Selection Groups. Zo kan je (indien nodig) nog kiezen op welke schijven de data van een bepaalde gedeelde map terecht moeten komen. Dat is vooral nuttig als je lokale schijven combineert met remote storage, bijvoorbeeld op een NAS. Hoewel we in ons voorbeeld met vier lokale schijven werken, zullen we ter illustratie één van die vier beschouwen als een gedeelde map van een NAS. We maken dus twee groepen aan: LOCAL en REMOTE. Standaard willen we alleen de schijven uit de eerste groep gebruiken. Daarom voegen we enkel die groep toe aan de drive_selection_algorithm-optie. In afbeelding 2 zie je de benodigde wijzigingen aan /etc/greyhole.conf.


2 We groeperen de schijven in Drive Selection Groups 

Gedeelde mappen
Naast de storage pool hebben we ook een locatie nodig voor de landing zones. Die mag je op dezelfde schijven bewaren als de storage pool, zolang het maar niet onder de ‘gh’-directory is. Plaats je alle landing zones op één schijf, dan kan je het best de min_free-parameter voor die schijf verhogen in de configuratie van de storage pool. Op een schijf van 1TB houdt Greyhole dan bijvoorbeeld 50GB vrij als tijdelijke opslagruimte voor nieuwe bestanden. Op de andere schijven is dat natuurlijk niet nodig. Daar volstaat een lagere waarde voor min_free, bijvoorbeeld 5GB. Heb je een SSD als bootschijf met nog wat vrije ruimte? Gebruik die dan zeker voor de landing zones. Zo behaal je maximale snelheden bij het wegschrijven van nieuwe data.

De landing zones definieer je net zoals gewone Samba shares in /etc/samba/smb.conf. We gaan ervan uit dat je vertrouwd ben met Samba: de enige aanpassingen voor Greyhole zijn de ‘dfree command’- en ‘vfs objects’-opties bij elke share. In afbeelding 3 zie je een minimale Samba-configuratie met twee shares: Media en Documents. De eerste share is toegankelijk voor twee gebruikers (koen en filip), terwijl de tweede enkel voor filip bruikbaar is. Zorg er wel voor dat deze gebruikers bestaan op het systeem én dat de bestandspermissies toegang geven tot de ‘force user’-gebruiker uit smb.conf (in dit geval filip). Vergeet ook niet het Samba-wachtwoord voor beide gebruikers in te stellen met ‘smbpasswd -a <gebruiker>’.


3 Een voorbeeldconfiguratie om Samba met Greyhole te gebruiken 

Nu hoef je enkel nog aan te geven op hoeveel schijven Greyhole de data van die shares moet bewaren. Dat doe je in /etc/greyhole.conf, bijvoorbeeld:

num_copies[Media] = 1

num_copies[Documents] = 2

 

De Media-share in ons voorbeeld bevat enkel geripte dvd’s, die we in principe opnieuw kunnen rippen. Een extra kopie is dus niet nodig. Van onze documenten daarentegen willen we wél een veiligheidskopie op een tweede schijf.

Een eerste test
Heb je Greyhole en Samba correct geconfigureerd? Dan is het tijd om beide services te herstarten:

$ service samba restart

$ service greyhole restart

Controleer ook het logbestand /var/log/greyhole.log op eventuele foutmeldingen. Probeer nu beide shares te mounten op een machine in je netwerk. Om te testen of Greyhole correct werkt, maken we een bestand vol nullen aan van 100MB. Dat bestand kopiëren we vervolgens naar de Media-share en de Documents-share. Na de eerste kopie zou de beschikbare ruimte in Greyhole met 100MB moeten afnemen, terwijl de tweede kopie in totaal 200MB vereist (100MB op twee verschillende schijven). In afbeelding 4 zie je dit inderdaad gebeuren (de tweede kolom met getallen bevat de gebruikte schijfruimte in megabytes).


4 Hetzelfde bestand neemt tweemaal zoveel ruimte in op de Documents-share dan op de Media-share 

Enkele tweaks
Je zal trouwens merken dat de gebruikte schijfruimte niet opnieuw daalt wanneer je beide testbestanden verwijdert. Greyhole heeft immers een eigen prullenbak, die je op de server zelf leegmaakt met het commando ‘greyhole –empty-trash’. Met de optie ‘delete_moves_to_trash = no ‘ in /etc/greyhole.conf schakel je die prullenbak uit. Het is ook mogelijk om per share de prullenbak in- of uit te schakelen. Op http://bit.ly/O3NKfF lees je tenslotte hoe je de prullenbak via Samba vanaf je client kan leegmaken.

Standaard logt Greyhole behoorlijk wat informatie naar /var/log/greyhole.log. Ben je er zeker van dat Greyhole prima werkt, dan kan je de loglevel verlagen van DEBUG naar WARN met volgende regel in /etc/greyhole.conf:

log_level = WARN

De REMOTE drive selection group hadden we nog niet gebruikt. We maken daarom een derde share aan, Work, met volgende instellingen in /etc/greyhole.conf:

drive_selection_algorithm[Work] = forced (2xLOCAL, 1xREMOTE) most_available_space

num_copies[Work] = 3

Data van deze share wordt op twee lokale schijven bewaard en op één remote schijf.

In geval van fouten verstuurt Greyhole een statusrapport via e-mail. Je e-mailadres stel je in met de email_to-optie in /etc/greyhole.conf. Maar je hebt ook een werkende mailserver nodig op de Greyhole-machine. Onder Debian en Ubuntu los je dat snel op door het postfix-pakket te installeren en tijdens de configuratie de volgende instellingen te kiezen:

– Internet with smarthost

– System mail name: een geldig domein voor jouw IP-adres, bijvoorbeeld via DynDNS

– SMTP relay host: de SMTP-server van je provider, bijvoorbeeld smtp.telenet.be voor Telenet

De e-mailfunctionaliteit test je als volgt:

$ greyhole -f -e

Ontvang je geen e-mails? De foutmeldingen in /var/log/mail.log helpen je verder op weg.

Schijf defect?
Voorlopig werkt alles prima, maar wat gebeurt er als er een schijf stukgaat? Dat kunnen we eenvoudig simuleren door één van de schijven hardhandig uit de storage pool te verwijderen. In afbeelding 5 zie je dat Greyhole de symlink naar het bestand ‘test2’ op disk2 onmiddellijk vervangt door een symlink naar een kopie op disk4. Omdat het bestand nu nog maar op één schijf beschikbaar is, maakt Greyhole meteen een nieuwe kopie op een andere schijf (disk3 in dit geval, zie afbeelding 6). Zo blijft je data beschermd tegen verdere schijfdefecten. Dat is natuurlijk enkel mogelijk in een storage pool met drie schijven en voldoende vrije ruimte om de uitval van één schijf op te vangen. Heb je slechts twee schijven, dan zal Greyhole bovenstaande acties pas uitvoeren, zodra je een nieuwe schijf toevoegt aan de pool.


5 Bij een schijfdefect past Greyhole incorrecte symlinks meteen aan… 

 


6 …en kopieert Greyhole het bestand ook naar een nieuwe schijf

Greyhole bevat verschillende commando’s om schijven te vervangen of te verwijderen uit de storage pool. Een schijf die reeds verdwenen is uit de pool (zoals disk2 in het laatste voorbeeld) verwijder je definitief met:

$ greyhole —gone=/mnt/greyhole/disk2/gh

Is de schijf nog actief, maar wil je hem vervangen door bijvoorbeeld een groter exemplaar? Gebruik dan onderstaande listing voordat je de schijf unmount en verwijderd uit het systeem.

$ greyhole —going=/mnt/greyhole/disk2/gh

Greyhole verdeelt de data van die schijf dan over de resterende schijven in de storage pool. Afhankelijk van de gebruikte schijfruimte en de te kopiëren data kan dit proces even duren. Je ziet de voortgang ervan in Greyhole’s logfile met de loglevels INFO of DEBUG.

Voor verdere configuratie-opties verwijzen we je naar het (goed gedocumenteerde) bestand /etc/greyhole.conf en naar de greyhole-manpage.

Eenvoudig in gebruik
De installatie en initiële configuratie van Greyhole vragen wat tijd, maar daarna heb je er weinig omkijken naar. Hoewel de features beperkter zijn dan die van RAID en LVM, volstaan ze ruimschoots voor de meeste thuisgebruikers. Vergeet zeker niet te controleren of je de e-mailrapporten ontvangt. We raden je ook aan om minstens drie schijven aan de storage pool toe te voegen en voldoende schijfruimte vrij te houden. Zo kan Greyhole de duplicatie meteen herstellen als er een schijf stuk gaat.