Soluzione 1:
Uso ZFS su Linux come gestore di volumi e mezzo per fornire protezioni e funzionalità aggiuntive ai filesystem tradizionali. Ciò include portare snapshot a livello di blocco, replica, deduplicazione, compressione e caching avanzato ai filesystem XFS o ext4.
Vedi:https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ per un'altra spiegazione.
Nel mio caso d'uso più comune, sfrutto la funzione ZFS zvol per creare un volume sparse su uno zpool esistente. Le proprietà di zvol possono essere impostate proprio come quelle di un normale filesystem ZFS. A questo punto, puoi impostare proprietà come il tipo di compressione, la dimensione del volume, il metodo di memorizzazione nella cache, ecc.
La creazione di questo zvol presenta a Linux un dispositivo a blocchi che può essere formattato con il filesystem di tua scelta. Usa fdisk
o parted
per creare la tua partizione e mkfs
il volume finito.
Montalo e essenzialmente avrai un filesystem supportato da uno zvol e con tutte le sue proprietà.
Ecco il mio flusso di lavoro...
Crea uno zpool composto da quattro dischi:
Avrai bisogno del ashift=12
direttiva per il tipo di dischi che stai utilizzando. Il nome zpool è "vol0" in questo caso.
zpool create -o ashift=12 -f vol0 mirrorscsi-AccOW140403AS1322043scsi-AccOW140403AS1322042 mirrorscsi-AccOW140403AS1322013scsi-AccOW140403AS1322044
Definisci le impostazioni zpool iniziali:
Ho impostato autoexpand=on
a livello di zpool nel caso dovessi sostituire i dischi con unità più grandi o espandere il pool in un mirror ZFS impostare. In genere non utilizzo ZFS raidz1/2/3 a causa delle scarse prestazioni e dell'impossibilità di espandere zpool.
zpool set autoexpand=on vol0
Imposta le proprietà iniziali del filesystem zfs:
Si prega di utilizzare il lz4
algoritmo di compressione per nuove installazioni ZFS. Va bene lasciarlo sempre acceso.
zfs set compression=lz4 vol0
zfs set atime=off vol0
Crea ZFS zvol:
Per ZFS su Linux, è molto importante utilizzare blocchi di grandi dimensioni. -o volblocksize=128k
è assolutamente essenziale qui. Il -s
L'opzione crea uno zvol sparse e non consuma lo spazio del pool fino a quando non è necessario. Puoi eseguire l'overcommit qui, se conosci bene i tuoi dati. In questo caso, ho circa 444 GB di spazio su disco utilizzabile nel pool, ma sto presentando un volume da 800 GB a XFS.
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
Dispositivo partizione zvol:
(dovrebbe essere /dev/zd0 per il primo zvol; /dev/zd16, /dev/zd32, ecc. per i successivi zvol )
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
Crea e monta il filesystem:
mkfs.xfs o ext4 sulla partizione appena creata, /dev/zd0p1.
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
Prendi l'UUID con blkid
e modifica /etc/fstab
.
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
Monta il nuovo filesystem.
mount /ppro/
Risultati...
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sde2 20G 8.9G 9.9G 48% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sde1 485M 63M 397M 14% /boot
/dev/sde7 2.0G 68M 1.9G 4% /tmp
/dev/sde3 12G 2.6G 8.7G 24% /usr
/dev/sde6 6.0G 907M 4.8G 16% /var
/dev/zd0p1 800G 398G 403G 50% /ppro <-- Compressed ZFS-backed XFS filesystem.
vol0 110G 256K 110G 1% /vol0
Elenco dei filesystem ZFS.
[[email protected] ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol0 328G 109G 272K /vol0
vol0/pprovol 326G 109G 186G - <-- The actual zvol providing the backing for XFS.
vol1 183G 817G 136K /vol1
vol1/images 183G 817G 183G /images
Elenco zpool ZFS.
[[email protected] ~]# zpool list -v
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol0 444G 328G 116G 73% 1.00x ONLINE -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322043 - - - -
scsi-AccOW140403AS1322042 - - - -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322013 - - - -
scsi-AccOW140403AS1322044 - - - -
Proprietà ZFS zvol (prendi nota di referenced
, compressratio
e volsize
).
[[email protected] ~]# zfs get all vol0/pprovol
NAME PROPERTY VALUE SOURCE
vol0/pprovol type volume -
vol0/pprovol creation Sun May 11 15:27 2014 -
vol0/pprovol used 326G -
vol0/pprovol available 109G -
vol0/pprovol referenced 186G -
vol0/pprovol compressratio 2.99x -
vol0/pprovol reservation none default
vol0/pprovol volsize 800G local
vol0/pprovol volblocksize 128K -
vol0/pprovol checksum on default
vol0/pprovol compression lz4 inherited from vol0
vol0/pprovol readonly off default
vol0/pprovol copies 1 default
vol0/pprovol refreservation none default
vol0/pprovol primarycache all default
vol0/pprovol secondarycache all default
vol0/pprovol usedbysnapshots 140G -
vol0/pprovol usedbydataset 186G -
vol0/pprovol usedbychildren 0 -
vol0/pprovol usedbyrefreservation 0 -
vol0/pprovol logbias latency default
vol0/pprovol dedup off default
vol0/pprovol mlslabel none default
vol0/pprovol sync standard default
vol0/pprovol refcompressratio 3.32x -
vol0/pprovol written 210M -
vol0/pprovol snapdev hidden default
Soluzione 2:
È inoltre necessario abilitare l'eliminazione sul filesystem ext4. Senza scarto, zfs non recupera lo spazio quando i file vengono rimossi. Questo può portare a grandi discrepanze di spazio tra ciò che riporta il filesystem ext4 e il volume zfs.