ZFS è, a mio modesto parere, uno dei FileSystem più flessibili e gestibile che siano mai stati prodotti. Lo sviluppo è da attribuire ai laboratori a Sun Microsystems. Questo FS entra sul mercato in modo ufficiale con il primo rilascio di Solaris 10 nel lontano 2005. Nel corso degli anni ha raggiunto un estremo livello di robustezza ed affidabilità da poter essere impiegato in ambienti mission e business critical. ZFS è un file system a 128 bit: può quindi fornire uno spazio di 16 miliardi di miliardi di volte la capacità dei file system a 64 bit. I limiti del ZFS sono concepiti per essere così ampi da non essere mai raggiunti in una qualunque operazione pratica. ZFS utilizza il metodo transazionale ad oggetti copy-on-write. Tutti i puntatori ai blocchi contengono un checksum a 256 bit. Il blocco viene controllato ad ogni lettura. I blocchi contenenti dati non vengono mai sovrascritti: viene invece allocato un nuovo blocco dove vengono scritti i dati modificati; ogni blocco metadati che faceva riferimento al vecchio blocco viene riallocato. Per ridurre l’overhead, le scritture multiple vengono raggruppate in transazioni. Per le suo doti di stabilità e facilità d’uso è stato messo in pratica il porting in ambiente Linux. Ho avuto modo di testarlo su diverse distribuzioni, ma resto fedele a quella che per me rimane la più stabile ed affidabile nello scenario odierno: CentOS/RHEL. Su entrambe le distribuzioni è stato testato per diverso tempo e alla fine portato in produzione su diversi ambienti: dai Web Server ai File Server fino ai più critici DB Server con Oracle DB. Non sono mai stati rilevati problemi di corruzione dei dati. Vi è da indicare che non esiste ancora la policy per SELinux quindi per forza di cose, quest’ultimo va disabilitato o impostato in modalità “permissive”. Passiamo alla parte pratica:
cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted
Procediamo con l’installazione di ZFS tramire l’rpm che ci viene fornito direttamente dal mantainer:
$ sudo yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release-1-3.el6.noarch.rpm
$ sudo yum install zfs
Attendiamo l’installazione e procediamo alla creazione del POOL ZFS e degli ZFS. ZFS lavora molto bene con i dischi interi piuttosto che son le partizioni, quindi il consiglio è quello di non partizioare il disco e darlo in pasto per intero. Nel nostro caso il disco da utilizzare sarà lo /dev/sdd zpool create -f <pool_name> /dev/sdd Volendo creare una struttura che ospiterà un DB ho assegnato il nome del pool ORA_DB zpool create -f ORA_DB /dev/sdd
Disk /dev/sdd: 214.7 GB, 214748364800 bytes 256 heads, 63 sectors/track, 26006 cylinders, total 419430400 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdd1 1 419430399 209715199+ ee GPT
Fatto ciò possiamo procedere con la creazione degli ZFS
zfs create ORA_DB/u01
df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 6.9G 6.9G 50% / tmpfs 4.9G 0 4.9G 0% /dev/shm /dev/sda2 15G 355M 14G 3% /var ORA_DB/u01 161G 3.7G 157G 3% /oracle/u01 ORA_DB/u02 162G 5.1G 157G 4% /oracle/u02 ORA_DB/u03 161G 3.5G 157G 3% /oracle/u03
Come si può notare i FileSystem di sistema vengono referenziati tramite “Block Device” e “mountpoint” mentre gli ZFS hanno come riferimento il POOL e lo ZFS.