Un ghid pentru instalarea și utilizarea ZFS pe CentOS 7

ZFS, forma scurtă a sistemului de fișiere Zettabyte este un sistem de fișiere avansat și foarte scalabil. Acesta a fost inițial dezvoltat de Sun Microsystems și face parte din proiectul OpenZFS. Cu atât de multe sisteme de fișiere disponibile pe Linux, este destul de natural să întrebi ce este deosebit despre ZFS. Spre deosebire de alte sisteme de fișiere, nu este doar un sistem de fișiere, ci și un manager de volum logic. Unele dintre caracteristicile ZFS care îl fac popular sunt:

  • Integritatea datelor - consistența și integritatea datelor sunt asigurate prin tehnicile copy-on-write și checksum
  • Amplasarea spațiului de stocare - unitățile de stocare disponibile pot fi puse împreună într-o singură piscină denumită zpool
  • Software RAID - Configurarea unei matrice raidz este la fel de simplă ca și emiterea unei singure comenzi.
  • Manager de volum integrat - ZFS acționează și ca manager de volum.
  • Snaphots, clone, compresie - acestea sunt unele dintre caracteristicile avansate oferite de ZFS.

ZFS este un sistem de fișiere 128-bit și are capacitatea de a stoca octeți 256 zetta! În acest ghid, vom învăța cum să instalați, să configurați și să utilizați, de asemenea, câteva comenzi importante de pe un server CentOS 7.

NOTĂ: Partea de instalare este specifică serverului CentOS în timp ce comenzile sunt comune pe orice sistem Linux

Terminologie

Înainte de a merge mai departe, să înțelegem câteva dintre terminologiile utilizate în mod obișnuit în ZFS.

Piscină

Gruparea logică a unităților de stocare. Acesta este blocul de bază al ZFS și din acest motiv spațiul de stocare este alocat pentru seturile de date.

Datasets

Componentele sistemului de fișiere ZFS și anume sistemul de fișiere, clonele, instantaneele și volumele sunt denumite seturi de date.

Oglindă

Un dispozitiv virtual care stochează copii identice pe două sau mai multe discuri. În situațiile în care un disc nu reușește, aceleași date sunt disponibile pe alte discuri ale acelei oglinzi.

Resilvering

Procesul de copiere a datelor de la un disc la altul în cazul restaurării unui dispozitiv.

tufărie

Scrub este folosit pentru verificarea consistenței în ZFS cum ar fi modul în care fsck este utilizat în alte sisteme de fișiere

Instalarea ZFS

Pentru a instala ZFS pe CentOS, trebuie să configurați mai întâi depozitul EPEL pentru a sprijini pachetele și apoi depozitul ZFS pentru a instala pachetele ZFS necesare.

Notă: Vă rugăm să prefixați sudo la toate comenzile dacă nu sunteți utilizator root.

yum localinstall -nogpgcheck http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

yum localinstall -nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm

Acum instalați pachetele kernel development și zfs. Pachetele de dezvoltare kernel sunt necesare deoarece ZFS este construit ca un modul și introdus în kernel.

yum instala kernel-devel zfs

Verificați dacă modulul zfs este introdus în kernel folosind comanda 'lsmod' și dacă nu, introduceți-l manual folosind comanda 'modprobe'.

[root @ li1467-130 ~] # lsmod | grep zfs

[root @ li1467-130 ~] # modprobe zfs

[root @ li1467-130 ~] # lsmod | grep zfs
zfs 2790271 0
zunicode 331170 1 zfs
Închide 15236 1 zfs
zincon 55411 1 zfs
znvpair 89086 2 zfs
știm 92029 3 zfs, zcommon, znvpair

Să verificăm dacă putem folosi comenzile zfs:

[listă root @ li1467-130 ~] # zfs
nu sunt disponibile seturi de date

Administrare

ZFS are două utilități principale, zpool și zfs. În timp ce vorbim despre crearea și întreținerea bazinelor folosind discuri utilitatea zfs este responsabilă pentru crearea și întreținerea seturilor de date.

nepool utilitate

Crearea și distrugerea bazinelor

Verificați mai întâi discurile disponibile pentru a crea o piscină de stocare.

[root @ li1467-130 ~] # ls -l / dev / sd *
brw-rw - disc 1 8, 0 Mar 16 08: 12 / dev / sda
brw-rw - disc 1 8, 16 Mar 16 08: 12 / dev / sdb
brw-rw - Disc 1 8, 32 Mar 16 08: 12 / dev / sdc
brw-rw - Disc 1 8, 48 Mar 16 08: 12 / dev / sdd
brw-rw - Disc 1 8, 64 Mar 16 08: 12 / dev / sde
brw-rw - disc 1 8, 80 Mar 16 08: 12 / dev / sdf

Creați o piscină dintr-un set de unități.

poți crea <opțiune> <nume de piscină. <drive 1> <unitate 2> .... <drive n>

[rădăcină @ li1467-130 ~] # spool create -f zfspool sdc sdd sde sdf

comanda "stare stare" afișează starea rezervelor disponibile

[rădăcină @ li1467-130 ~] # statusul nebula
piscină: zfspool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
zfspool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

erori: nu există erori de date cunoscute

Verificați dacă crearea bazinului a reușit.

[root @ li1467-130 ~] # df -h
Dimensiunea sistemului de fișiere Utilizat Utilizați% Montat pe
/ dev / sda 19G 1.4G 17G 8%
devtmpfs 488M 0 488M 0% / dev
tmpfs 497M 0 497M 0% / dev / shm
tmpfs 497M 50M 447M 11% / execuție
tmpfs 497M 0 497M 0% / sys / fs / c grup
tmpfs 100M 0 100M 0% / execută / utilizator / 0
zfspool 3.7G 0 3.7G 0% / zfspool

După cum puteți vedea, zpool a creat o piscină cu numele "zfspool" de dimensiune 3.7 GB și a adăugat-o și în / zfspool.

Pentru a distruge o piscină, utilizați comanda "împool destroy"

spool distruge <numele bazinului>

[root @ li1467-130 ~] # spool distruge zfspool
[rădăcină @ li1467-130 ~] # statusul nebula
nu există piscine disponibile

Să încercăm acum să creăm o piscină oglindă simplă.

spool create <opțiune> <nume pool> oglindă <unitate 1> <unitate 2> ... <drive n>

De asemenea, putem crea mai multe oglinzi în același timp prin repetarea cuvântului cheie de la oglindă urmat de unități.

[root @ li1467-130 ~] # spool crea -f mpol oglindă sdc sdd oglindă sde sdf
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: mpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
mpool ONLINE 0 0 0
oglindă-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
oglindă-1 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

erori: nu există erori de date cunoscute

În exemplul de mai sus, am creat grupuri de mirror fiecare cu două discuri.

În mod similar, putem crea o piscină raidz.

[root @ li1467-130 ~] # împool crea -f rpool raidz sdc sdd sde sdf
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: rpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
rpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

erori: nu există erori de date cunoscute

Gestionarea dispozitivelor în bazele ZFS

Odată ce un bazin este creat, este posibil să adăugați sau să eliminați piese de schimb fierbinte și dispozitive de memorie cache din piscină, să atașați sau să detașați dispozitivele de la piscinele în oglindă și să înlocuiți dispozitivele. Dar dispozitivele non-redundante și raidz nu pot fi eliminate dintr-un bazin. Vom vedea cum să efectuăm unele dintre aceste operații în această secțiune.

Mai întâi creez un pool denumit 'testpool' format din două dispozitive, sdc și sdd. Un alt dispozitiv SDE va ​​fi adăugat la acest lucru.

[rădăcină @ li1467-130 ~] # spool create -f testpool sdc sdd

[root @ li1467-130 ~] # spool adăugați testpool sde
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: testpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

După cum am menționat mai devreme, nu pot elimina acest dispozitiv nou adăugat, deoarece acesta nu este un bazin redundant sau raidz.

[root @ li1467-130 ~] # spool șterge testpool sde
nu se poate elimina sde: pot fi eliminate numai piese de schimb cald inactive, cache, dispozitive de nivel superior sau jurnal

Dar pot adăuga un disc de rezervă la acest bazin și îl pot elimina.

[root @ li1467-130 ~] # împool adăuga testpool spare sdf
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: testpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
piese de schimb
sdf AVAIL

erori: nu există erori de date cunoscute
[root @ li1467-130 ~] # împool eliminați testpool sdf
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: testpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

În mod similar, putem folosi comanda atașată pentru a atașa discuri într-o piscină oglindită sau non-oglindă și detașați comanda pentru a detașa discurile de la o piscină oglindită.

zpool atașați <opțiuni> <numele bazei> <device> <new device>

zdool detach <pool name> <device>

Atunci când un dispozitiv eșuează sau se strică, îl putem înlocui folosind comanda "înlocui".

spool înlocuiți <opțiuni> <nume pool> <device> <new device>

Vom testa acest lucru prin coruperea forțată a unui dispozitiv într-o configurație oglindită.

[rădăcină @ li1467-130 ~] # spool create -f testpool mirror sdd sde

Aceasta creează o piscină oglindă formată din discuri sdd și sde. Acum, permiteți-ne să distrugeți deliberat drive-ul SDD scriind zerouri în ea.

[root @ li1467-130 ~] # dd dacă = / dev / zero = = / dev / sdd
dd: scrierea în "/ dev / sdd": Nu a mai rămas spațiu pe dispozitiv
2048001 + 0 înregistrează în
2048000 + 0 înregistrează
1048576000 octeți (1.0 GB) copiați, 22.4804 s, 46.6 MB / s

Vom folosi comanda "scrub" pentru a detecta această corupție.

[rădăcină @ li1467-130 ~] # spool scrub testpool
[rădăcină @ li1467-130 ~] # statusul nebula
piscină: testpool
stat: ONLINE
starea: unul sau mai multe dispozitive nu au putut fi utilizate deoarece lipsește eticheta sau
invalid. Există suficiente replici pentru ca piscina să continue
funcționarea într-o stare degradată.
acțiune: Înlocuiți dispozitivul folosind "înlocuirea spool".
consultați: http://zfsonlinux.org/msg/ZFS-8000-4J
scanare: curățat reparat 0 în 0h0m cu erori 0 pe Mar Mar 18 09: 59: 40 2016
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
oglindă-0 ONLINE 0 0 0
sdd UNAVAIL 0 0 0 date corupte
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

Vom înlocui acum SDD cu SDC.

[root @ li1467-130 ~] # spool înlocui testpool sdd sdc; statutul de spool
piscină: testpool
stat: ONLINE
scanare: 83.5K resilvered în 0h0m cu erori 0 pe Mar Mar 18 10: 05: 17 2016
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
oglindă-0 ONLINE 0 0 0
înlocuirea-0 UNAVAIL 0 0 0
sdd UNAVAIL 0 0 0 date corupte
sdc ONLINE 0 0 0
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

[rădăcină @ li1467-130 ~] # statusul nebula
piscină: testpool
stat: ONLINE
scanare: 74.5K resilvered în 0h0m cu erori 0 pe Mar Mar 18 10: 00: 36 2016
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
oglindă-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

Migrarea bazinelor

Putem migra piscinele de stocare între diferite gazde folosind comenzile de export și import. Pentru aceasta, discurile utilizate în bazin ar trebui să fie disponibile din ambele sisteme.

[rădăcină @ li1467-130 ~] # zpool exportul testpool
[rădăcină @ li1467-130 ~] # statusul nebula
nu există piscine disponibile

Comanda "zpool import" afișează toate bazinele disponibile pentru import. Executați această comandă de la sistemul în care doriți să importați piscina.

[root @ li1467-131 ~] # importul lui zpool
piscină: testpool
id: 3823664125009563520
stat: ONLINE
acțiune: Piscina poate fi importată utilizând numele sau identificatorul numeric.
config:

testpool ONLINE
sdc ONLINE
sdd ONLINE
sde ONLINE

Acum importați piscina necesară

[rădăcină @ li1467-131 ~] # zpool import testpool
[rădăcină @ li1467-131 ~] # statusul nebula
piscină: testpool
stat: ONLINE
scanare: nu a fost solicitat
config:

STATE NUMELE CITIȚI SCRISĂ CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0

erori: nu există erori de date cunoscute

iostat

Se poate verifica statisticile io ale dispozitivelor bazinului folosind comanda iostat.

[rădăcină @ li1467-130 ~] # zpool iostat -v testpool
capacitatea de operare a lățimii de bandă
piscina aloca gratuit citiți scrie scrie citiți
---- - - - - - -
testpool xNUMXM 1.80G 2.86 22 27K 470K
sdc 598K 975M 8 9 200K 139K
sdd 636K 975M 7 9 135K 139K
sd 610K 975M 6 9 135K 139K
---- - - - - - -

utilitatea zfs

Vom trece acum la utilitarul zfs. Aici vom arunca o privire la modul de a crea, distruge seturi de date, compresie de sisteme de fișiere, cote și instantanee.

Crearea și distrugerea sistemului de fișiere

Sistemul de fișiere ZFS poate fi creat utilizând comanda create zfs

zfs creează <sistem de fișiere>

[root @ li1467-130 ~] # zfs creează testpool / studenți
[root @ li1467-130 ~] # zfs creează testpool / profesori
[root @ li1467-130 ~] # df -h
Dimensiunea sistemului de fișiere Utilizat Utilizați% Montat pe
/ dev / sda 19G 1.4G 17G 8%
devtmpfs 488M 0 488M 0% / dev
tmpfs 497M 0 497M 0% / dev / shm
tmpfs 497M 50M 447M 11% / execuție
tmpfs 497M 0 497M 0% / sys / fs / c grup
testpool 2.8G 0 2.8G 0% / testpool
tmpfs 100M 0 100M 0% / execută / utilizator / 0
testpool / studenți 2.8G 0 2.8G 0% / testpool / studenți
testpool / profesori 2.8G 0 2.8G 0% / testpool / profesori

Din ieșirea de mai sus, observați că, deși nu există niciun punct de montare dat în momentul creării sistemului de fișiere, punctul de montare este creat utilizând aceeași relație de cale cu cea a bazei.

Crearea zfs permite folosirea -o cu ea prin care putem specifica opțiuni precum mountpoint, compression, quota, exec etc.

Se poate enumera sistemul de fișiere disponibil utilizând lista zfs:

[listă root @ li1467-130 ~] # zfs
NAME a folosit AVAIL REFER MOUNTPOINT
testpool 100M 2.67G 19K / testpool
testpool / profesori 31K 1024M 20.5K / testpool / profesori
testpool / studenți 1.57M 98.4M 1.57M / testpool / studenți

Putem distruge un sistem de fișiere utilizând opțiunea de distrugere

zfs distrug sistemul de fișiere

Comprimare

Vom înțelege acum cum funcționează comprimarea în ZFS. Înainte de a începe să folosim compresia, trebuie să o activați folosind 'set compression'

zfs setați <compression = value> <system file> volume> snapshot>

Odată ce acest lucru este făcut, compresia și decompresia se întâmplă pe sistemul de fișiere în zbor în mod transparent.

În exemplul nostru, voi permite comprimarea pe directorul elevilor folosind algoritmul de compresie lz4.

[root @ li1467-130 ~] # setarea zfs compression = lz4 testpool / studenți

Voi copia acum un fișier de dimensiune 15M în acest sistem de fișiere și verificați dimensiunea după ce este copiat.

[root @ li1467-130 /] # cd / var / log
[root @ li1467-130 jurnal] # du -h securizat
15M sigur

[root @ li1467-130 ~] # cp / var / log / securizată / testpool / studenți /

[elevii root @ li1467-130] # df -h.
Dimensiunea sistemului de fișiere Utilizat Utilizați% Montat pe
testpool / studenți 100M 1.7M 99M 2% / testpool / studenți

Observați că dimensiunea utilizată în sistemul de fișiere este doar 1.7M în timp ce dimensiunea fișierului era 15M. Putem verifica și raportul de compresie.

[root @ li1467-130 ~] # zfs obțineți compresiunea testpool
VALOARE VALOARE PROPRIETATE NUME
testpool compressratio 9.03x -

Cotele și rezervările

Permiteți-mi să explic cotele cu un exemplu real de viață. Să presupunem că avem o cerință într-o universitate de a limita spațiul pe disc utilizat de sistemul de fișiere pentru profesori și studenți. Să presupunem că trebuie să alocăm 100MB elevilor și 1GB pentru profesori. Putem folosi "cote" în ZFS pentru a îndeplini această cerință. Cotele asigură că volumul de spațiu pe disc utilizat de un sistem de fișiere nu depășește limitele setate. Rezervarea ajută la alocarea efectivă și garantarea faptului că spațiul disponibil pe disc este disponibil pentru sistemul de fișiere.

zfs setați cota = <valoare> <sistem de fișiere | volum | instantaneu>

setările zfs rezervare = <valoare> <sistem de fișiere> volum> instantaneu>

[root @ li1467-130 ~] # zfs set cota = 100M testpool / studenți
[root @ li1467-130 ~] # zfs setare rezervare = 100M testpool / studenți
[listă root @ li1467-130 ~] # zfs
NAME a folosit AVAIL REFER MOUNTPOINT
testpool 100M 2.67G 19K / testpool
testpool / profesori 19K 2.67G 19K / testpool / profesori
testpool / studenți 1.57M 98.4M 1.57M / testpool / studenți

[root @ li1467-130 ~] # zfs set cota = 1G testpool / profesori
[listă root @ li1467-130 ~] # zfs
NAME a folosit AVAIL REFER MOUNTPOINT
testpool 100M 2.67G 19K / testpool
testpool / profesori 19K 1024M 19K / testpool / profesori
testpool / studenți 1.57M 98.4M 1.57M / testpool / studenți

În exemplul de mai sus, am alocat 100MB pentru studenți și 1GB pentru profesori. Observați coloana "AVAIL" în lista "zfs". Inițial aveau dimensiunile 2.67GB fiecare și după stabilirea cotei, valorile s-au schimbat în consecință.

Instantanee

Snapshots sunt copia numai pentru citire a sistemului de fișiere ZFS la un moment dat. Ei nu consumă niciun spațiu suplimentar în piscina zfs. Putem reveni la aceeași stare într-o etapă ulterioară sau putem extrage doar un singur fișier sau un set de fișiere conform cerințelor utilizatorului.

Voi crea acum câteva directoare și un fișier sub "/ testpool / professors" din exemplul nostru precedent și apoi vom face un instantaneu al acestui sistem de fișiere.

[root @ li1467-130 ~] # cd / testpool / profesori /

[root @ li1467-130 profesori] # mkdir matematică fizică chimie

[root @ li1467-130 profesori] # cat> qpaper.txt
Întrebare pentru anul 2016-17
[root @ li1467-130 profesori] # ls -la
Total 4
drwxr-xr-x 5 rădăcină rădăcină 6 Mar 19 10: 34.
drwxr-xr-x 4 rădăcină rădăcină 4 Mar 19 09: 59 ..
drwxr-xr-x 2 rădăcină rădăcină 2 Mar 19 10: chimie 33
drwxr-xr-x 2 rădăcină rădăcină 2 Mar 19 10: matematică 32
drwxr-xr-x 2 rădăcină rădăcină 2 Mar 19 10: fizica 32
-rw-r-r- 1 rădăcină rădăcină 36 Mar 19 10: 35 qpaper.txt

Pentru a face o fotografie, utilizați următoarea sintaxă:

zfs snapshot <sistem de fișiere> volum @ <snap>

[root @ li1467-130 profesori] # zfs snapshot testpool / profesori @ 03-2016
[profesorii root @ li1467-130] # lista zfs -t snapshot
NAME a folosit AVAIL REFER MOUNTPOINT
testpool / profesori @ 03-2016 0 - 20.5K -

I’ll now delete the file that was created and extract it from the snapshots

[root @ li1467-130 profesori] # rm -rf qpaper.txt
[root @ li1467-130 profesori] # ls
chimie fizică matematică
[profesori root @ li1467-130] # cd .zfs
[root @ li1467-130 .zfs] # snapshot cd / 03-2016 /
[root @ li1467-130 03-2016] # ls
chimie matematică fizică qpaper.txt

[root @ li1467-130 03-2016] # cp -a qpaper.txt / testpool / profesori /
[root @ li1467-130 03-2016] # cd / testpool / profesori /
[root @ li1467-130 profesori] # ls
chimie matematică fizică qpaper.txt

Fișierul șters este înapoi în locul său.

Putem lista toate snapshot-urile disponibile folosind lista zfs:

[root @ li1467-130 ~] # zfs listă -t instantaneu
NAME a folosit AVAIL REFER MOUNTPOINT
testpool/professors@03-2016 10.5K – 20.5K –

Finally, let’s destroy the snapshot using the zfs destroy command:

zfs distrug sistemul de fișiere | volume @ <snap >>

[root @ li1467-130 ~] # zfs distruge testpool / profesori @ 03-2016

[root @ li1467-130 ~] # zfs listă -t instantaneu
nu sunt disponibile seturi de date

Concluzie

În acest articol, ați învățat cum să instalați ZFS pe CentOS 7 și să utilizați câteva comenzi de bază și importante din utilitarele zpool și zfs. Aceasta nu este o listă completă. ZFS are mult mai multe capabilități și le puteți explora mai departe pagina oficială.

Lasa un raspuns

Acest site folosește Akismet pentru a reduce spamul. Aflați cum sunt procesate datele despre comentarii.

GTranslate Your license is inactive or expired, please subscribe again!