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.

Încărcarea programată a fișierelor prin FTP, cu Automator, Transmit și iCal

Să presupunem că avem unul sau mai multe fișiere care trebuie încărcate prin FTP pe un server oarecare. Problema e că nu vrem să le încărcăm pe loc, ci mai târziu în aceeași zi sau la o dată ulterioară. Un scenariu uzual ar fi următorul: în timpul zilei lucrez cu diverse fișiere care trebuie apoi trimise prin FTP la sfârșitul programului de lucru. Sau poate că vrem să transferăm niște fișiere oarecare în timpul nopții, când computerul stă degeaba. Cum procedăm?

Cei care se descurcă în UNIX și citesc aceste rânduri se gândesc probabil deja la cron jobs, launchd și alți „daemoni”. Eu voi descrie o metodă mai ușor de aplicat pentru utilizatorii obișnuiți, care folosește Transmit pentru transferul de fișiere prin FTP, iCal pentru programarea orei/datei la care se va face transferul și Automator, care face legătura între Transmit și iCal.

De ce Transmit și nu o aplicație gratuită pentru FTP? Pentru că, după părerea mea, este cea mai bună aplicație pentru FTP (și nu numai pentru FTP). Am încercat mai multe programe de acest tip și doar două m-au mulțumit: Transmit și Fetch. Sunt de altfel și singurii clienți de FTP care oferă acțiuni pentru Automator, deci oricum nu prea aveam alternative. Dar să trecem la treabă.

1. Deschidem Automator și facem o nouă aplicație.

Automator

 

2. Tragem în spațiul de lucru acțiunea „Obținere articole Finder specificate” (sau în engleză: „Get specified Finder items”). Aici vom adăuga fișierele pe care vrem să le urcăm pe server.

Automator

 

3. Adăugăm acțiunea „Upload”, pe care o găsiți în categoria Internet numai dacă aveți instalat Transmit. Se observă în poza de mai jos că serverul către care se trimit fișierele este deja salvat în Transmit la favorite, deci toți parametrii conexiunii (adresă, protocol, username și parolă) sunt încărcați automat (dar pot fi introduși manual în Automator dacă este cazul).

Automator

 

4. Salvăm aplicația Automator undeva pe computer. Să-i dăm un nume sugestiv, cum ar fi „Încarcă fișiere”.

5. Deschidem iCal („Calendar”) și facem un nou eveniment la data și ora la care vrem să aibe loc urcarea fișierelor pe server. Acum vine șmecheria: putem seta alarma unui eveniment din iCal astfel încât sistemul să deschidă un fișier în momentul în care se declanșează alarma. Adică ceva ca în figura de mai jos. E o facilitate mai puțin cunoscută din iCal și care poate fi folosită în toate cazurile în care vrem să deschidem o aplicație la un moment prestabilit.

ical-alarma-fisier

Salvăm evenimentul și gata. La data și ora la care se declanșează alarma, Transmit va urca pe server fișierele specificate.

Ce facem dacă vrem să urcăm fișiere pe servere diferite sau în directoare diferite pe același server? În acest caz nu e nevoie să facem mai multe aplicații, ci putem adăuga una după alta, în aceeași aplicație Automator, oricâte perechi de acțiuni de tipul „fișiere Finder -> Upload”. Aveți însă grijă să decuplați perechile între ele, pentru că în caz contrar fișierele se transmit succesiv de la o pereche la alta, iar ultima acțiune de upload va urca pe ultimul server din lanț TOATE fișierele specificate în întreg lanțul de acțiuni. Decuplarea unei acțiuni de cea care o precede se face cu clic dreapta pe respectiva acțiune și apoi „Ignoră intrarea”, așa ca în figura următoare.

Ignoră intrarea în Automator

 

 

Cum desenăm o diagramă cu conectori în Pages

Șmecheria asta simplă din Pages am descoperit-o întămplător și mi-e de mare folos atunci când am de făcut niște diagrame așa cum e cea din figura de mai jos.

Dagramă Pages

 

Știam cum pot desena forme geometrice și linii în Pages, știam cum pot insera imagini, însă nu știam că pot conecta obiectele folosind conectori dintr-ăia veritabili, care țin legate formele geometrice chiar și atunci când le muți pe pagină. Înainte foloseam linii simple la diagrame și aveam mare bătaie de cap dacă trebuia să repoziționez obiectele.

Așadar, cum conectăm două obiecte între ele în Pages: le selectăm pe ambele, apoi mergem în meniul Insert și alegem Connection Line. Conectorii pot fi modificați ca orice linie obișnuită (culoare, grosime, săgeți la capete). Bonus: cum am făcut conectorii curbați din dreapta pozei de mai sus? Simplu: am tras de punctul din mijloc al conectorului (vezi figura următoare). Punctele albastre permit mutarea capetelor conectorului astfel încât să nu atingă obiectul.

Conector in Pages

 

Nu pot goli coșul de gunoi, fișierul e în curs de utilizare. Cum procedez?

Azi mi s-a întâmplat (din nou) să nu pot goli Trash-ul pe motiv că unul din fișierele de acolo era în utilizare. De obicei știu ce e de făcut în situația asta: văd despre ce fișier e vorba, închid aplicația care-l ține deschis și apoi pot goli coșul fără probleme. Astăzi însă problema a fost declanșată de un JPG, despre care puteam să jur că nu-l mai utilizează nimeni, pentru că nu-mi apărea niciun program deschis în Dock. Și totuși Finder o ținea una și bună că e în uz.

Golire coș

Așa că am apelat la o comandă UNIX care poate afișa lista fișierelor deschise în sistem la un moment dat și ce proces le ține deschise. Și pentru că nu vroiam să le văd chiar pe toate (lista e lungă!) am filtrat rezultatele folosind numele fișierului JPG cu pricina. Comanda se execută, ca de obicei, în Terminal:

lsof | grep nume-fișier

Și am obținut ceva ca în imaginea următoare…

Comanda lsof

După cum se vede aplicația Preview ținea deschis fișierul, chiar dacă în Dock nu-mi apărea că ar fi fost deschisă. Cine e de vină? Probabil facilitatea automatic termination, prin care sistemul ne păcălește că a închis automat o aplicație din momentul în care nu o mai folosim. Mai mult încurcă decât ajută. În final am închis Preview din Activity Monitor și așa am reușit să golesc gunoiul.

Cum alegem limba în interfața aplicațiilor din OS X

În OS X, limba interfeței aplicațiilor este dictată de sistemul de operare. Mai exact de ordinea în care sunt puse limbile în panoul din cadrul secțiunii „Limbă și text” din preferințele sistemului:

Limba si text (OS X)

Așa că dacă vrem ca sistemul de operare și aplicațiile să „vorbească” românește, tragem limba română pe prima poziție. Aplicațiile care nu sunt traduse în limba română vor folosi a doua limbă din listă ș.a.m.d. Ce facem însă dacă vrem ca o anumită aplicație să aibe interfața într-o limbă diferită de cea a sistemului de operare? Am întâlnit de exemplu aplicații traduse foarte prost în limba română, așa că prefer varianta originală în engleză. Dar în marea majoritate a cazurilor nu pot schimba limba aplicației decât dacă schimb limba sistemului.

Există din fericire câteva utilitare care ne pot ajuta în acest sens, eu o să menționez doar unul dintre ele. E vorba despre App Language Chooser, o aplicație gratuită disponibilă în Mac App Store.

App Language Chooser

Cum funcționează: tragem iconul aplicației dorite peste fereastra App Language Chooser, alegem limba și activăm (sau nu) opțiunea de a deschide mereu acea aplicație limba respectivă. Asta e tot.