# HFS (Apple)

El sistema de fitxers jerarquitzat (HFS) és un sistema de fitxers propietari desenvolupat per Apple Inc. per utilitzar-lo en sistemes informàtics amb Mac OS. Dissenyat originalment per utilitzar-lo en disquets i discs durs, també es pot trobar en suports de només lectura, com ara CD-ROM. HFS també es coneix com Mac OS Standard (o "HFS Standard"), mentre que el seu successor, HFS Plus, també s'anomena Mac OS Extended (o "HFS Extended").
Amb la introducció de Mac OS X 10.6, Apple va deixar de ser compatible amb el format o l'escriptura de discs i imatges HFS, que continuen sent compatibles amb volums de només lectura. A partir de macOS 10.15, els discs HFS ja no es poden llegir.

## Història

Apple va introduir HFS al setembre de 1985, específicament per donar suport a la primera unitat de disc dur d'Apple per a Macintosh, substituint el sistema de fitxers Macintosh (MFS), el sistema de fitxers original que s'havia introduït més d'un any i mig abans amb el primer equip Macintosh. HFS es va basar en el primer sistema operatiu jeràrquic (SOS) d'Apple per al fallit Apple III, que també va servir de base per als sistemes de fitxers jeràrquics de l'Apple IIe i l'Apple Lisa. HFS va ser desenvolupat per Patrick Dirks i Bill Bruffey. Compartia diverses funcions de disseny amb MFS que no estaven disponibles en altres sistemes de fitxers de l'època (com ara FAT de DOS). Els fitxers podrien tenir diverses bifurcacions (normalment una dada i una bifurcació de recursos), cosa que permetia emmagatzemar les dades principals del fitxer per separat de recursos com ara icones que podrien haver de ser localitzades. Es feia referència als fitxers amb identificadors de fitxer únics en lloc de noms de fitxers, i els noms de fitxers podien tenir una longitud de 255 caràcters (tot i que el Finder només admetia un màxim de 31 caràcters).
Tanmateix, MFS s'havia optimitzat per utilitzar-lo en suports molt petits i lents, és a dir, disquets, de manera que es va introduir HFS per superar alguns dels problemes de rendiment que van arribar amb la introducció de suports més grans, sobretot els discs durs. La principal preocupació era el temps necessari per mostrar el contingut d’una carpeta. Sota MFS, tota la informació de llista de fitxers i directoris s'emmagatzemava en un únic fitxer, que el sistema havia de cercar per crear una llista dels fitxers emmagatzemats en una carpeta particular. Això va funcionar bé amb un sistema amb uns quants centenars de quilobytes d'emmagatzematge i potser un centenar de fitxers, però a mesura que els sistemes es van convertir en megabytes i milers de fitxers, el rendiment es va degradar ràpidament.
La solució era substituir l'estructura de directoris de MFS per una altra més adequada per a sistemes de fitxers més grans. HFS va substituir l'estructura de la taula plana amb el fitxer de catàleg que utilitza una estructura d'arbre B que es pot buscar molt ràpidament independentment de la mida. HFS també va redissenyar diverses estructures per poder contenir nombres més grans, sent enters de 16 bits substituïts per 32 bits gairebé universalment. Curiosament, un dels pocs llocs on no es va produir aquest "augment" va ser el directori de fitxers en si mateix, que limita HFS a un total de 65.535 fitxers a cada disc lògic.
Tot i que HFS és un format de sistema de fitxers propietari, està ben documentat; normalment hi ha solucions disponibles per accedir a discs amb format HFS des de la majoria de sistemes operatius moderns.
Apple va introduir HFS per necessitat amb els seus primers 20 Oferta de disc dur MB per a Macintosh el setembre de 1985, on es va carregar a la RAM des d'un disquet MFS en arrencar mitjançant un fitxer de pedaç ("Disc dur 20"). Tanmateix, HFS no es va introduir àmpliament fins que no es va incloure a la ROM de 128K que va debutar amb el Macintosh Plus el gener del 1986 juntament amb els 800 més grans Unitat de disquet KB per al Macintosh que també feia servir HFS. La introducció d'HFS va ser el primer avanç d'Apple a deixar enrere un model d'ordinador Macintosh: el Macintosh original de 128 K, que no tenia memòria suficient per carregar el codi HFS i que va ser immediatament interromput.
El 1998, Apple va introduir HFS Plus per abordar l'assignació ineficient de l'espai en disc a HFS i afegir altres millores. HFS encara és compatible amb les versions actuals de Mac OS, però començant per Mac OS X, no es pot utilitzar un volum HFS per arrencar i, a partir de Mac OS X 10.6 (Snow Leopard), els volums HFS són de només lectura i no es poden crear o actualitzat. A macOS Sierra (10.12), les notes de la versió d'Apple indiquen que "El sistema de fitxers estàndard HFS ja no és compatible". Tot i això, el suport HFS Standard de només lectura encara és present al macOS Sierra i funciona com ho feia en versions anteriors.

## Disseny

Un volum d'emmagatzematge es divideix inherentment en blocs lògics de 512 bytes. El sistema de fitxers jerarquitzat agrupa aquests blocs lògics en blocs d'assignació, que poden contenir un o més blocs lògics, en funció de la mida total del volum. HFS utilitza un valor de 16 bits per adreçar blocs d'assignació, limitant el nombre de blocs d'assignació a 65.535 (2 ¹⁶ -1).
Cinc estructures formen un volum HFS:
* Els blocs lògics 0 i 1 del volum són els blocs d’arrencada, que contenen informació d’inici del sistema. Per exemple, els noms dels fitxers System i Shell (normalment el Finder) que es carreguen a l'inici.
* El bloc lògic 2 conté el bloc de directori principal (també conegut com MDB). Això defineix una àmplia varietat de dades sobre el volum en si, per exemple, les marques de data i hora de quan es va crear el volum, la ubicació de les altres estructures de volum, com ara el mapa de bits de volum, o la mida d’estructures lògiques, com ara els blocs d’assignació. També hi ha un duplicat del MDB anomenat Alternate Master Directory Block (també conegut com Alternate MDB) que es troba a l'extrem oposat del volum en el segon a l’últim bloc lògic. Està pensat principalment per a l'ús de les utilitats de disc i només s'actualitza quan el fitxer de catàleg o el fitxer de desbordament d'extents creixen.
* El bloc lògic 3 és el bloc inicial del volum de mapa de bits, que fa un seguiment de quins blocs d’assignació s'utilitzen i quins són gratuïts. Cada bloc d'assignació del volum està representat per un bit al mapa: si el bit està definit, el bloc està en ús; si és clar, el bloc es pot utilitzar gratuïtament. Com que el mapa de bits de volum ha de tenir un bit per representar cada bloc d'assignació, la seva mida es determina per la mida del volum mateix.
* El fitxer de desbordament d’extensió és un arbre B que conté extensions addicionals que registren quins blocs d’assignació s'assignen a quins fitxers, un cop esgotades les tres extensions inicials del fitxer de catàleg. Les versions posteriors també van afegir la possibilitat que el fitxer de desbordament d’extensions emmagatzemi extensions que registren blocs defectuosos, per evitar que el sistema de fitxers intenti assignar un bloc defectuós a un fitxer.
* El fitxer de catàleg és un altre arbre B que conté registres de tots els fitxers i directoris emmagatzemats al volum. Emmagatzema quatre tipus de discos. Cada fitxer consisteix en un registre de fils de fitxers i un registre de fitxers, mentre que cada directori consta d’un registre de fils de directori i un registre de directoris. Els fitxers i directoris del fitxer de catàleg es troben mitjançant el seu identificador de node de catàleg (o CNID) únic.
** Un registre de fils de fitxer emmagatzema només el nom del fitxer i el CNID del seu directori principal.
** Un registre de fitxers emmagatzema una gran varietat de metadades sobre el fitxer, incloent el seu CNID, la mida del fitxer, tres marques de temps (quan es va crear el fitxer, es va modificar per darrer cop, es va fer la darrera còpia de seguretat), les primeres extensions de fitxer de dades i recursos i les punteres de recursos als primers registres d’extensió de dades i recursos del fitxer al fitxer de desbordament d’extensió. El registre de fitxers també emmagatzema dos camps de 16 bytes que el Finder utilitza per emmagatzemar atributs sobre el fitxer, inclosos el seu codi de creador, el tipus de codi, la finestra on hauria d'aparèixer el fitxer i la seva ubicació a la finestra.
** Un registre de fils de directori emmagatzema només el nom del directori i el CNID del directori principal.
** Un registre de directori que emmagatzema dades com el nombre de fitxers emmagatzemats al directori, el CNID del directori, tres marques de temps (quan es va crear el darrer, es va modificar per darrer cop, es va fer la darrera còpia de seguretat). Igual que el registre de fitxers, el registre de directoris també emmagatzema dos camps de 16 bytes per al seu ús pel Finder. Emmagatzemen coses com l'amplada i l'alçada i les coordenades xy de la finestra que s'utilitza per mostrar el contingut del directori, el mode de visualització (vista d'icones, vista de llista, etc.) de la finestra i la posició del desplaçament de la finestra. barra.

## Limitacions

El fitxer de catàleg, que emmagatzema tots els registres de fitxers i directoris en una única estructura de dades, comporta problemes de rendiment quan el sistema permet fer múltiples tasques, ja que només un programa pot escriure a aquesta estructura alhora, cosa que significa que molts programes poden estar esperant a la cua degut a que un programa "embrutava" el sistema. També suposa un greu problema de fiabilitat, ja que el dany a aquest fitxer pot destruir tot el sistema de fitxers. Això contrasta amb altres sistemes de fitxers que emmagatzemen registres de fitxers i directoris en estructures separades (com ara el sistema de fitxers FAT de DOS o el sistema de fitxers Unix), on tenir una estructura distribuïda pel disc significa que danyar un directori general no és fatal i les dades possiblement es pugui reconstruir amb les dades que es conservin a les porcions no danyades.
A més, el límit de 65.535 blocs d'assignació va provocar que els fitxers tinguessin una mida "mínima" equivalent a 1 / 65.535a de la mida del disc. Per tant, qualsevol volum determinat, independentment de la seva mida, només podria emmagatzemar un màxim de 65.535 fitxers. A més, a qualsevol fitxer se li assignaria més espai del que realment necessitava, fins a la mida del bloc d'assignació. Quan els discos eren petits, això tenia poca conseqüència, ja que la mida del bloc d’assignació individual era trivial, però a mesura que els discs començaven a apropar-se a la marca d’1 GB, l'espai més petit que podia ocupar qualsevol fitxer (un bloc d’assignació únic) es feia excessivament gran., malgastant importants quantitats d'espai en disc. Per exemple, en un disc d'1 GB, la mida del bloc d'assignació a HFS és de 16 KB, de manera que fins i tot un fitxer d'1 byte ocuparia 16 KB d'espai en disc. Aquesta situació era menys problemàtica per als usuaris que tenien fitxers grans (com ara imatges, bases de dades o àudio) perquè aquests fitxers més grans malgastaven menys espai com a percentatge de la seva mida. Els usuaris amb molts fitxers petits, en canvi, podrien perdre una gran quantitat d’espai a causa de la gran mida del bloc d’assignació. Això va fer que el particionament de discs en volums lògics més petits fos molt atractiu per als usuaris de Mac, perquè els petits documents emmagatzemats en un volum més petit ocuparien molt menys espai que si residissin en una partició gran. El mateix problema existia al sistema de fitxers FAT16.
HFS desa les majúscules i minúscules d’un fitxer que es crea o canvia el nom, però que no funciona amb majúscules i minúscules.
Segons bombich.com, HFS ja no és compatible amb Catalina i futures versions de macOS.

## Vegeu també

* Sistemes de fitxers
* SOS (Apple)
* HFS Plus

## Referències

* ↑ Gagne, Ken. «Losing legacy data to Snow Leopard». Computerworld, 31-08-2009. [Consulta: 7 setembre 2009].
* ↑ «What's New in macOS: macOS Sierra 10.12». Apple. [Consulta: 25 gener 2017].
* ↑ Giampaolo, Dominic. Practical File System Design with the Be File System (PDF). Morgan Kaufmann, 1999, p. 37. ISBN 1-55860-497-9.

## Enllaços externs

* Especificació HFS de developer.apple.com
* HOWTO sobre sistemes de fitxers: HFS : lleugerament obsolet
* hfsutils : programari de codi obert per manipular HFS a Unix, DOS, Windows, OS / 2