Loading...
11-08-2021

Ondanks er vanuit het veld opgeroepen, om geen ZFS te gebruiken als filesystem, maar om het 'standaard' BTRFS in te zetten, kies ik er toch nog voor om ZFS in te zetten. Ubuntu 20.04 levert nu zelfs een experimentele optie om ZFS te gebruiken. Of dit iets zegt weet ik niet, maar gewenning is voor mij het simpele argument om dit in te zetten.

In het kader van een nood oplossing heb ik een tijdelijks backup machine opgetuigd, op basis van Ubuntu 20.04, met de keuze om ZFS te gebruiken. Waar ik voorheen meestal m'n backup script als root uitvoerde, heb ik er nu voor gekozen om een gebruiker automatisch te laten inloggen, zodat o.a. de Nextcloud client constant kan synchroniseren. Dit heeft als voordeel dat ik niet s'nacht de volledige Nextcloud omgeving naar de backup machine hoef te kopiëren. Het nadeel is natuurlijk dat er een desktop omgeving constant actief is.

In plaats van een script als root uit te voeren laat ik dan nu een script als deze gebruik uitvoeren. Dit script zorgt voor de nodige laatste kopieën van data. De bedoeling is dat aan het eind van het script, er een snapshot gemaakt wordt van deze data, zodat er terug in de tijd gelopen kan worden. Bij het installeren van het systeem, was ik al begonnen met een pool te maken voor de backup lokatie. Hiervoor moet wel eerst de naam van de pool worden achterhaald:

$ mount | grep backupusr
rpool/USERDATA/backupusr_60orxl on /home/backupusr type zfs (rw,relatime,xattr,posixacl)

De experimentele Ubuntu implementatie maakt blijkbaar diverse pools aan, voor diverse mappen. Zo ook voor de home directory. Hier kan je je eigen pool's aan toevoegen:

$ sudo zfs create rpool/USERDATA/backupusr_60orxl/backup

Hierna zal de map /home/backupusr/backup terug te vinden zijn. Echter, omdat we dit als root uitvoeren, is de map ook alleen toegankelijk voor root. Dat was natuurlijk niet helemaal de bedoeling, maar het is makkelijk op te lossen:

$ sudo chown backupusr.backupusr ~/backup

Ik zal verder niet op de details van het backup script in gaan, maar het is de bedoeling dat ongeacht de uitkomst van het script, er een snapshot wordt gemaakt met de datum van dat moment:

MOMENT=`date +"%y%m%d"`
SNAPSHOT="rpool/USERDATA/backupusr/backup@${MOMENT}"
zfs snapshot "${SNAPSHOT}"

Dit script draait dus als de backupusr, en zo blijkt dat deze geen snapshots mag maken. Na een kleine zoektocht kwam ik erachter dat zfs een zfs allow optie heeft. Hiermee kan je o.a. aan een gebruiker één of meerdere permissies toekennen. De permissies voeg ik in dit geval toe aan de specifieke pool:

sudo zfs allow -u backupusr snapshot,destroy,rollback,diff rpool/USERDATA/backupusr_60orxl/backup

Hierna is het mogelijk om als de backupusr zfs snapshot ... uit te voeren.

  • Linux
  • Ubuntu
  • ZFS