ZFS și OS X (I)

S-a mai discutat aici despre ZFS. Apple a fost, se pare, la un moment dat interesantă de acest sistem de fișiere și zvonurile spuneau că trebuia să-și facă debutul în (Snow) Leopard, pentru a înlocui bătrânul HFS+. Nu a fost să fie, probabil nu atât din cauza problemelor tehnice, cât de cele cauzate de licența dificilă a ZFS.

Scurt istoric

Inițiat de Sun pentru al său Solaris acum aproape 10 ani, ZFS se dorește a fi un sistem de fișiere al viitorului. Z vine de la Zeta, adică se vrea a fi ultimul cuvânt în materie de sisteme de fișiere, creat pentru a satisface nevoile tot mai mari în materia de stocare de date și cel puțin până acum se pare că nu are rival. Ce îl face atât de deosebit? Trecând pe lângă faptul că suportă teoretic fișiere cu dimensiunea de 2^64 octeți, 2^48 de fișiere sau partiții de 2^64 octeți, ZFS are și alte caracteristici ce-l fac atractiv: protecție aproape fanatică a datelor, pools, mirrors, raid și snapshots, pentru a enumera câteva din cele mai cunoscute caracteristici ale sale.

Din păcate, Oracle a cumpărat Sun și la un moment dat a încetat să mai facă publice modificările aduse sistemului de fișiere. Ultima versiune cu codul sursă făcut public este versiunea 28 (v28). Oracle a continuat să lucreze la ZFS, însă noile funcții sunt disponibile doar pentru Solaris. Din fericire, de câteva săptămâni, există o coagulare de forțe denumită OpenZFS, care are ca scop o dezvoltare open-source coerentă a sistemului de fișiere, pentru a-l face disponibil pe Linux, OS X, FreeBSD și sistemele open-source bazate pe kernelul illumos (dezvoltat din OpenSolaris, după ce Oracle a renunțat la distribuția open-source a sistemului de operare propriu). De notat că prima variantă după desprinderea de versiunile Oracle se numește v5000 și nu este compatibilă cu versiunea 28 de care pomeneam mai sus. Așa că în acest moment există două ramuri ale ZFS-ului, cea oficială, dezvoltată de Oracle (v34, la momentul scrierii acestui articol) și cea deschisă, dezvoltată de OpenZFS (v5000, denumită astfel pentru a evita confuzia cu ZFS-ul de la Oracle).

De ce am folosi ZFS?

Dacă țineți la datele voastre, s-ar putea ca HFS+ să nu fie o idee foarte bună. Chiar dacă aveți backup, un backup al unui fișier corupt este tot un fișier corupt. Dacă nu mă credeți că HFS+ suferă grav la partea de integritate a datelor, urmăriți vă rog acest slideshow (atenție, conține imagini șocante!). HFS+ este un sistem de fișiere vechi și dacă nu ați avut probleme până acum cu el, nu înseamnă că în viitor veți fi scutit. Așa că dacă sunteți maniaci în ceea ce privește securitatea datelor, continuați să citiți.

Un alt motiv pentru care eu mi-am propus să folosesc ZFS este faptul că pare să fie singura punte între OS X, FreeBSD și Linux. Singurul sistem de fișiere accesibil din toate cele trei sisteme de operare. Bine, ar mai fi Fat32, dar să păstrăm un ton serios al discuției și să povestim despre viitor, nu despre trecut. Un inconvenient ar fi faptul că încă nu poate fi accesibil pe Windows, dar asta se va remedia probabil în viitor și o măcar o modalitate de accesa read-only datele de pe o partiție ZFS va exista cândva. Până atunci, utilizatorii de Windows vor trebui să folosească un Linux/BSD într-o mașină virtuală, așa că posibilități există.

Un al treilea motiv ar fi o modalitate ușoară, rapidă și elegantă de backup, datorită snapshoturilor native (cred că Time Machine din OS X a fost o facilitate introdusă cu gândul la ZFS).

ZFS pe Mac?

A existat cândva ZEVO, o inițiativă privată și cu tentă comercială, care promitea ZFS pe OS X ușor accesibil. Din păcate, din câte știu, nu a ajuns să aibă un produs finit și între timp au fost cumpărați de alții mai mari. Vestea bună este însă că nu era singura modalitate de a folosi ZFS pe OS X, existând în același timp și proiectul MacZFS, care urmărea o abordare open-source și nu una comercială și care încă mai există. Dar cum nimic nu e gratis, pentru a folosi MacZFS, va trebui să vă murdăriți puțin pe mâini cu Terminalul și să cunoașteți destul de bine cu ce se mănâncă ZFS. Proiectul oferă ZFS v28, compatibilă cu ultima variantă liberă oferită de Oracle.

Trebuie să reținem că un sistem de fișiere nu este o aplicație software. Un update al MacZFS nu va face ca datele create cu o versiune mai veche să fie indisponibile. Însă și ZFS este viu și evoluează, s-ar putea doar ca noile facilități introduse să nu fie aplicabile unor configurații mai vechi, dar datele nu vor dispărea. Dacă aveți de-a face cu ZFS, fiți mereu cu un ochi pe versiunea folosită, versiunea sistemului de fișiere și nu a sculelor software folosite pentru a-l administra. Sunt două lucruri distincte.

MacZFS

Acestea fiind spuse, pentru a instala ZFS pe OS X avem două variante. Fie mergem pe mâna celor de la MacZFS, care oferă un installer pentru Mountain Lion, fie încercăm OpenZFS. Installerul nu face altceva decât să pună fișierele la locul lor, să nu vă închipuiți că avem unelte grafice. Însă este o versiune veche a ZFS (v28), iar dezvoltarea mac-zfs va fi integrată de acum cu OpenZFS, așa că mai logic ar fi să ignorăm MacZFS și să trecem direct la OpenZFS, deși în cel de-al doilea caz avem ceva de muncă.

Totuși, în cazul în care preferați MacZFS, mergeți pe site-ul lor și descărcați ultima versiune (74.3.0). Eu am avut unele probleme cu installerul, care nu reușea să termine decât cu un failure de toată frumusețea operațiunea de instalare. Dacă pățiți la fel, aveți iar două variante: fie instalați versiunea precedentă (74.2.0, diferențele dintre cele două sunt minore, ambele conțin ZFS v28), fie mai bine încercați o instalare manuală, conform instrucțiunilor de pe site. După ce ați făcut acest lucru, felicitări, aveți ZFS pe OS X și puteți termina de citit. Într-un episod viitor, voi detalia cum putem să și folosim facilitățile ZFS-ului. Vă puteți opri din citit, dacă ați ales MacZFS, dar veți rămâne blocat la ZFS v28 și nu veți beneficia de noutățile introduse de OpenZFS în versiunile următoare.

OpenZFS

Înainte să continuăm, dacă aveți instalat MacZFS, va trebui să scăpăm de el.

sudo kextunload -b org.maczfs.zfs.fs

Apoi urmăriți instrucțiunile de aici. Dacă folosiți ZEVO, va trebui să restartați sistemul.

Ați decis că aveți nevoie de ZFS și nu vă intimidează Terminalul. Ați ajuns până la acest punct al articolului, deci stați bine și la capitolul răbdare. Perfect, să trecem la treabă. Înainte de a începe, avem nevoie de trei lucruri: Xcode, Xcode Command Line Tools și Homebrew. Eu am instalat Xcode din Mac AppStore, Xcode Command Line tools de pe site-ul Apple. În loc de Homebrew se poate evident folosi și MacPorts, dar am vrut să încerc ceva nou astăzi, așa că am folosit următorul script pentru a descărca și instala Homebrew:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Simplu, nu? Nu uități șă dați un brew doctor și să faceți cam ce vă recomandă el acolo, e o idee bună să avem un mediu curat înainte de a începe ostilitățile.

Dacă Xcode, Xcode Command Line Tools și Homebrew sunt instalate, putem trece la treabă. Prima dată, ne asigurăm că avem autoconf, automake și libtool în sistem, avem nevoie de ele pentru a compila ZFS (autoconf va fi instalat ca dependință).

brew install automake
brew install libtool

Asigurați-vă că sunteți acasă:

cd ~

Comanda vă va duce în /Users/username. În cele ce urmează, va trebui să aduce sursele ZFS de pe GitHub, să le compilăm și să le instalăm. Sună complicat, dar din fericire există un script care ne ușurează munca. Îl puteți descărca de aici, salva în /Users/username cu numele zfsadm și să-i dați drepturi de execuție:

chmod +x zfsadm

Va trebui să modificăm doar două lucruri: numele utilizatorului curent, în liniile 4 și 6. Atât. Nu uitați de acest detaliu, este vital. Și e o idee bună să creați un folder /Users/username/Developer

mkdir ~/Developer

Urmează să rulăm scriptul, care va descărca sursele și va începe compilarea lor.

./zfsadm

Ar trebui să dureze câteva minute. După ce a terminat și aveți din nou acces la cursorul Terminalului, rulați următoarea comandă:

./zfsadm -k

Aceasta va crea folderul /osxzfs ce conține două kext-uri: spl.kext (pentru compatibilitatea cu Solaris) și zfs.kext și ar trebui să le încarce automat. Verificați acest lucru cu:

sudo kextstat

Dacă primiți ceva asemătăro cu următorul output, înseamnă că totul este în regulă.

0xc000     net.lundman.spl (1.0.0) <7 5 4 3 1>2:46
0x180      net.lundman.kernel.dependencies (10.0.0)
0x1f3000   net.lundman.zfs (1.0.0) <98 97 16 7 5 4 3 1>

Probabil veți dori ca sistemul să încarce de fiecare dată kext-urile de fiecare dată după reboot. La mine acest lucru a dus la un kernel panic, dar e probabil din cauză că folosesc hacktintosh. Dacă se întâmplă să vă deranjeze un kernel panic la boot, reporniți OS X în safe mode, ținând apăsată tasta Shift, mutați kexturile din locul lor și rebootați normal. În acest caz, va trebui să încărcați manual kext-urile de fiecare dată când porniți computerul. un mic inconvenient despre care ne prefacem că nu e atât de deranjant.

Dacă doriți să descărcați manual cele două kexturi, rulați:

./zfsadm -u

Acum că totul a fost compilat, să trecem la instalarea fișierelor binare care ne vor permite să manipulăm discuri cu ZFS. Pentru instalare:

cd ~/Developer/zfs
sudo make install
cd ~/Developer/spl
sudo make install

În ~/.bash_profile (dacă fișierul nu există, îl creem) ar trebui să introduceți următoarea linie:

export PATH=$PATH:/usr/local/sbin

E o idee bună să putem rula comenzile ZFS ca user obișnuit, fără sudo. poate nu e cea mai sigură abordare, dar dacă folosim doar noi computerul e mult mai comod așa. Pentru acest lucru:

cd /usr/local/sbin
sudo chmod +s z*

Ar trebui să puteți rula următoarea comandă fără sudo:

zpool

Dacă nu primiți nici o eroare, ci o listă de opțiuni, înseamnă că ZFS s-a instalat cu succes.

Ca un rezumat, de fiecare dată când veți dori să aduceți la zi uneltele OpenZFS de pe github, rulați următoarele comnezi:

 ./zfsadm
cd ~/Developer/zfs
sudo make install
cd ~/Developer/spl
sudo make install
cd /usr/local/sbin
sudo chmod +s z*

Dacă aveți de gând să faceți update, înainte de zfsadm -k va trebui să rulați

zpool export poolname

pentru a evita un kernel panic.

Pentru a ușura și mai mult lucrurile, putem crea un director bin:

mkdir ~/bin

și apoi să mutăm scriptul zfsadm în ~/bin:

mv ~/zfsadm ~/bin

Introducem calea în profil, adăugând următoarea linie în ~/.bash_profile:

export PATH:$PATH:/Users/<username>/bin

De acum înainte, se poate rula simplu zfsadm în Terminal, fără a mai fi nevoie să vă aflați în directorul /Users/<username>.

În cele de mai sus am descris cum poate fi instalat OpenZFS folosind ultima versiune disponibilă pe GitHub. Nu ne-am atins de date, partiții și discuri, așa că pașii descriși nu vă pun în pericol datele. Despre cum folosim efectiv ZFS pentru stocarea datelor, într-un episod viitor.