In questa pagina
- Prerequisiti:
ZFS è un filesystem combinato e un gestore di volumi logici. Le funzionalità di ZFS includono protezione contro il danneggiamento dei dati, supporto per capacità di archiviazione elevate, compressione dati efficiente, integrazione del filesystem e concetto di gestione del volume, snapshot e cloni copy-on-write, controllo continuo dell'integrità e riparazione automatica, RAID-Z e nativo ACL NFSv4.
ZFS è stato originariamente implementato come software open source, concesso in licenza in base alla Common Development and Distribution License (CDDL).
Quando parliamo del filesystem ZFS, possiamo evidenziare i seguenti concetti chiave:
- Integrità dei dati.
- Amministrazione semplice dello storage con due soli comandi:zfs e zpool.
- Tutto può essere fatto mentre il filesystem è online.
Per una panoramica completa e una descrizione di tutte le funzionalità disponibili, consulta questo articolo dettagliato di Wikipedia.
In questo tutorial, ti guiderò passo dopo passo attraverso l'installazione del filesystem ZFS su Debian 8.1 (Jessie). Ti mostrerò come creare e configurare i pool usando raid0 (stripe), raid1 (Mirror) e RAID-Z (Raid con parità) e spiegherò come configurare un file system con ZFS.
Sulla base delle informazioni dal sito Web www.zfsonlinux.org, ZFS è supportato solo sull'architettura AMD64 e Intel a 64 bit (amd64). Iniziamo con la configurazione.
Prerequisiti:
- Debian 8 con kernel a 64 bit.
- privilegi di root.
Passaggio 1:aggiornamento del repository e aggiornamento del sistema Debian Linux
Per aggiungere il repository zfsonlinux al nostro sistema, scarica e installa il pacchetto zfsonlinux come mostrato di seguito. Questo aggiungerà i file /etc/apt/sources.list.d/zfsonlinux.list e /etc/apt/trusted.gpg.d/zfsonlinux.gpg sul tuo computer. Successivamente, puoi installare zfs come qualsiasi altro pacchetto Debian con il comando apt-get. Un altro vantaggio dell'utilizzo del repository zfsonlinux è che si ottengono gli aggiornamenti automaticamente eseguendo "apt-get update &&apt-get upgrade".
Accedi al server Debian con accesso SSH, diventa utente root, quindi esegui i seguenti comandi.
# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update
Passaggio 2 - Installa zfsonlinux
Zfsonlinux ha molte dipendenze software che vengono installate automaticamente da apt. Questo processo richiederà del tempo. Al termine dell'installazione, riavviare il server.
# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r ora
Passaggio 3:crea e configura il pool
Dopo che il server è stato riavviato, controlla che zfsonlinux sia installato e funzioni bene.
# dpkg -l | Grep ZFS
II Debian-ZFS 7 ~ Jessie AMD64 Metapackage del filesystem ZFS nativo per Debian.
II libzfs2 0.6.5.2-2 AMD64 Libreria del filesystem ZFS nativo per Linux
II ZFS-DKMS 0.6.5.5.5.5.2 -2 Tutti i moduli kernel del filesystem ZFS nativo per Linux
II ZFSONLINUX 6 All Archive.zfsonLinux.org Pacchetto fiduciario
II Zfsutils 0.6.5.2-2 AMD64 Strumenti di linea di comando per gestire i filesystemsIl risultato sopra mostra che zfs su Linux è già installato, quindi possiamo procedere con la creazione del primo pool.
Ho aggiunto cinque dischi a questo server, ciascuno con una dimensione di 2 GB. Possiamo controllare i dischi disponibili con questo comando:
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdgPossiamo vedere che abbiamo /dev/sda finché /dev/sdg, /dev/sda non viene utilizzato per il sistema operativo Debian Linux Jessie 8.1. Useremo /dev/sdb fino a /dev/sdg per il filesystem ZFS.
Ora possiamo iniziare a creare il pool, per il primo ti mostro come creare un raid0 (stripe).
# zpool list
nessun pool disponibile# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00 x ONLINE -Il comando "zpool list" mostra che abbiamo creato con successo un pool raid0 zfs, il nome del pool è pool0 e la dimensione è 2 GB.
Successivamente creeremo un raid1 (mirror) con gli altri dischi.
# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1,00x ONLINE -
pool1 1,98G 64K 1,98G - 0% 0% 1,00x ONLINE -Possiamo vedere che ora abbiamo due pool, pool0 per raid0 e pool1 per raid1.
Per verificare lo stato dei pool, possiamo utilizzare il comando seguente:
# zpool status
pool:pool0
state:ONLINE
scan:nessuno richiesto
config:
NAME STATE READ WRITE CKSUM
pool0 ONLINE 0 0 0
sdb ONLINE 0 0 0
errori:Nessun errore noto nei dati
pool:pool1
state:ONLINE
Scansione:nessuna richiesta
config:
Nome State Leggi scrivi cksum
pool1 online 0 0
mirror-0 online 0 0 0
sdc online 0 0 0
sdd ONLINE 0 0 0
errori:nessun errore di dati notoPossiamo controllare lo stato del pool con il comando "zpool status". Possiamo vedere la differenza tra pool0 e pool1, pool0 ha un solo disco e pool1 ha due dischi e lo stato dei dischi è mirror (mirror-0).
Successivamente, creeremo un pool con RAID-Z, RAID-Z è uno schema di distribuzione di dati/parità come RAID-5, ma utilizza una larghezza di stripe dinamica:ogni blocco ha il proprio stripe RAID, indipendentemente dalle dimensioni del blocco, con il risultato che ogni scrittura RAID-Z è una scrittura full-stripe.
RAID-Z richiede un minimo di tre dischi rigidi ed è una sorta di compromesso tra RAID 0 e RAID 1. In un pool RAID-Z:se un singolo disco nel pool si esaurisce, sostituisci semplicemente quel disco e ZFS ricostruirà automaticamente i dati in base alle informazioni sulla parità degli altri dischi. Per perdere tutte le informazioni nel pool di archiviazione, due dischi dovrebbero morire. Per rendere la configurazione dell'unità ancora più ridondante, puoi utilizzare RAID 6 (RAID-Z2 in caso di ZFS) per ottenere la doppia parità.
Creiamo prima un pool RAID-Z con una parità.
# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5.94G 117K 5.94G - 0% 0% 1:00 volte ONLINE -# zpool status poolz1
pool:poolz1
state:ONLINE
scan:nessuno richiesto
config:
NOME STATO LEGGI SCRIVERE CKSUM
Poolz1 online 0 0 0
raidz1-0 online 0 0 0
sde online 0 0 0
sdf online 0 0
sdg online 0 0
errori:nessun errore di dati noto# df -h /poolz1
Filesystem Dimensioni Usato Avail Use% Montato su
poolz1 3,9G 0 3,9G 0% /poolz1Come possiamo vedere, df -h mostra che il nostro pool da 6 GB è stato ora ridotto a 4 GB, 2 GB vengono utilizzati per contenere le informazioni sulla parità. Con il comando zpool status, vediamo che il nostro pool utilizza RAID-Z ora.
Successivamente creeremo RAID-Z2 (raid 6), a questo scopo dobbiamo rimuovere il pool esistente perché non sono più disponibili dischi. Rimuovere un pool è molto semplice, possiamo usare il comando zpool destroy per questo.
# Elenco ZPool
Nome Dimensione alloc Free ExpandSz Frag Cap Dedup Altroot Health
Pool0 1,98G 64K 1.98G -0%0%1.00x Online -
Pool1 1.98G 64K 1.98G - 0% 0% 1,00x ONLINE -
poolz1 5,94G 117K 5,94G - 0% 0% 1,00x ONLINE -# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# elenco zpool
nessun pool disponibileOra tutti i nostri zpool sono spariti, quindi possiamo creare un pool RAID-Z2.
# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G - 0% 0% 0% 0% ONLINE -# df -h /poolz2
Filesystem Dimensioni Usato Avail Use% Montato su
poolz2 3,9G 0 3,9G 0% /poolz2# zpool status poolz2
pool:poolz2
state:ONLINE
scan:nessuno richiesto
config:
NOME STATO LEGGI SCRIVERE CKSUM
Poolz2 online 0 0 0
raidz2-0 online 0 0 0
sdb online 0 0 0
sdc online 0 0
sdd online 0 0
sde ONLINE 0 0 0
errori:nessun errore di dati notoCome possiamo vedere, df -h mostra che il nostro pool di 8 GB è stato ora ridotto a 4 GB, poiché 4 GB vengono utilizzati per contenere le informazioni di parità due volte. Con il comando "zpool status", vediamo che il nostro pool utilizza RAID-Z2 ora.
Fase 4 - Simula un errore del disco
In questo passaggio, simuleremo un guasto catastrofico del disco (ovvero uno degli HDD nello zpool smette di funzionare).
Crea un file nel poolz2 e assicurati di potervi accedere.
# echo "Solo test"> /poolz2/test.txt
# cat /poolz2/test.txt
Solo testPrima di simulare l'errore:controlla lo stato di poolz2 e assicurati che lo stato sia Online e che lo stato di tutti i dischi sia Online.
L'errore viene simulato scrivendo dati casuali con il comando dd su /dev/sdb .
# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
pool:poolz2
state :ONLINE
stato:su uno o più dispositivi si è verificato un errore irreversibile. È stato effettuato un tentativo di
per correggere l'errore. Le applicazioni non sono interessate.
azione:determina se il dispositivo deve essere sostituito e cancella gli errori
utilizzando 'zpool clear' o sostituisci il dispositivo con 'zpool replace'.
vedi:http://zfsonlinux.org/msg/ZFS-8000-9P
scan:scrub riparato 17K in 0h0m con 0 errori martedì 8 dicembre 22:37:49 2015
config:
Nome State Leggi scrivi cksum
poolz2 online 0 0 0
raidz2-0 online 0 0 0
sdb online 0 0 25
sdc online 0 0
sdd online 0 0 0
sde ONLINE 0 0 0
errori:nessun errore di dati notoOra possiamo vedere che uno o più dischi hanno riscontrato un errore irreversibile, quindi dobbiamo sostituire il disco. In questo caso, sostituiamo il disco /dev/sdb con /dev/sdf.
# zpool replace poolz2 sdb sdf
# zpool status
pool:poolz2
stato:ONLINE
scan:resilvered 49.5K in 0h0m con 0 errori il mar 8 22 dic:43:35 2015
config:
Nome State Leggi Scrivi cksum
poolz2 online 0 0
raidz2-0 online 0 0 0
sdf online 0 0 0
SDC online 0 0 0
SDD Online 0 0 0
SDE Online 0 0 0
Errori:nessun errore di dati notoDopo aver sostituito /dev/sdb con /dev/sdf, l'errore è scomparso e possiamo ancora accedere al file di test che abbiamo creato in precedenza.
# cat /poolz2/test.txt
Solo testFino a questo passaggio, sappiamo come creare e configurare uno zpool.
Passaggio 5:crea e configura il filesystem ZFS
Nel passaggio successivo impareremo come creare e configurare il filesystem ZFS.
Elenco # zfs
NOME USATO DISPONIBILE REFER MOUNTPPOINT
poolz2 105K 3.83G 26.1K /poolz2Abbiamo già un filesystem ZFS, questo viene aggiunto automaticamente quando creiamo lo zpool. Ora creeremo un altro filesystem ZFS.
# zfs create poolz2/tank
elenco di # zfs
NOME USATO DISPONIBILE REFER MOUNTPPOINT
poolz2 132K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /poolz2/serbatoio# df -h | grep poolz2
poolz2 3,9G 128K 3,9G 1% /poolz2
poolz2/tank 3,9G 128K 3,9G 1% /poolz2/tankMolto facile vero? Creiamo un nuovo filesystem ZFS chiamato tank e lo montiamo automaticamente come /poolz2/tank.
Come creare un punto di montaggio personalizzato per un filesystem ZFS? Usa il comando seguente:
# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /poolz2/tank
poolz2/data 3.9G 0 3.9G 0%Come modificare il punto di montaggio esistente? Possiamo farlo con il comando seguente:
# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/data 3.9G 0 3.9G 0% /data
poolz2/tank 3.9G 0 3.9G 0%/tankPer montare e smontare un filesystem, usa il comando seguente:
# zfs smonta /data
# df -h | grep poolz2
poolz2 3,9G 0 3,9G 0% /poolz2
poolz2/tank 3,9G 0 3,9G 0% /tank# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
poolz2/data 3.9G 0 3.9G 0% /dataRimuovere un filesystem zfs è molto semplice, possiamo usare il comando zfs destroy per questo.
# zfs destroy poolz2/data
# zfs list
NAME USED DISPONIBILE REFER MOUNTPPOINT
poolz2 152K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /serbatoioIl filesystem /data è sparito.
Conclusione
Il file system ZFS è un nuovo file system rivoluzionario che cambia radicalmente il modo in cui i file system vengono amministrati su sistemi operativi simili a Unix. ZFS offre funzionalità e vantaggi che non sono stati trovati in nessun altro file system oggi disponibile. ZFS è robusto, scalabile e facile da amministrare.