Hierarchical File System

**Hierarchical File System** (HFS) on Apple Computerin kehittämä, levykkeille ja kovalevyille suunniteltu tiedostojärjestelmä. HFS julkaistiin syyskuussa 1985 ja myöhemmin sitä käytettiin myös CD-ROM -levyjen tiedostojärjestelmänä. Järjestelmä säilyi Macintoshien pääasiallisena tiedostojärjestelmänä vuoteen 1998 saakka, jolloin Apple julkaisi HFS+-tiedostojärjestelmän. HFS:ää on kutsuttu myös nimellä Mac OS Standard.

## Historia
Apple kehitti HFS:n Macintosh 128K:ta varten tehdyn Macintosh File Systemin (MFS) seuraajaksi. Monet MFS:n ominaisuuksista periytettiin HFS:lle, kuten mahdollisuus pitkille tiedostojen nimille ja laajoille metatietueille. Kovalevyjen ja nopeampien levykeasemien tarpeisiin MFS oli riittämätön. HFS:ssä nopeutettiin tiedostolistausten hakua ja hakemistorakenne toteutettiin B-puu -tiedonhakumenetelmän erityistapauksen avulla, jossa tietueiden maksimikoko rajoitettiin 2/3:aan täydestä tietueesta ennen tietueen avainten jakoa. Suurten osoittimien tallennusta varten HFS tuki 32-bittisiä kokonaislukuja kaikissa attribuuteissa lukuun ottamatta hakemistotietueita. 

Vuonna 1998 Apple julkaisi HFS+ -tiedostojärjestelmän, joka päivitti muun muassa HFS:n puutteellisia levytilan jako-ominaisuuksia. 
HFS+ lisäsi tuen journaloinnille.

HFS+ Mac OS X:llä tunnetaan erikoisesta tiedostonimien käsittelystä. Se muuntaa Unicode-tiedostonimet Normalization Form D (NFD) -muotoon. Jos esimerkiksi tiedostonimessä on merkki Å, creat(2) -funktio tallentaa tiedostonimen muodossa U+0041, U+030A eli A-kirjain ja yhdistyvä yläpuolinen ympyrä (Combining Ring Above).

Myöhemmät Mac OS -käyttöjärjestelmät tukevat edelleen HFS-levyjä, mutta Mac OS X:stä alkaen HFS-asemaa ei ole voinut käyttää järjestelmän käynnistysmediana. 

HFS+:n on korvannut Apple File System (APFS) vuonna 2017.

## Rakenne
HFS-järjestelmä jakaa levytilan 512 tavun varausyksiköihin. Varausyksiköt kootaan lohkoiksi, jotka sisältävät yhden tai useamman varausyksikön. Lohkot saavat 16-bittisen osoitteen, jolloin suurin mahdollinen varausyksikköryhmien määrä on 65,536 kappaletta.

Lohkot 0 ja 1 on varattu käynnistystiedostoille. Lohko 2 sisältää tietoja levystä, kuten lohkojen koon ja luontipäivän. Lohko 2:n sisältö varmuuskopioidaan levyn toiseksi viimeiseen lohkoon. Lohkot numerosta kolme eteenpäin sisältävät tilanvaraustaulukon, jossa levyn jokainen lohko on lueteltu ja sille on asetettu bitti. Todeksi asetettu bitti merkitsee lohkon olevan käytössä. Tilanvaraustaulukkoa käytetään tyhjien lohkojen toteamisen lisäksi levykoon laskemiseen. Taulukon jälkeen levyllä on b-puu -rakenteen ensimmäinen taulukko, joka sisältää tiedon tiedostojen jakautumisesta lohkojen kesken. Toinen b-puun rakennetaulukko, katalogitiedosto, kertoo, mitkä varausyksiköt kuuluvat millekin tiedostolle ja hakemistolle.

### Rakenteen ongelmia
Tiedostojen ja hakemistojen löytyminen levyltä on lopulta yhden katalogitiedoston varassa. Moniajon sallivissa järjestelmissä katalogitiedosto lukitaan jokaisen lukutapahtuman ajaksi, jolloin kaksi sovellusta ei voi esimerkiksi tallentaa tiedostoja samanaikaisesti. Katalogitiedoston vioittuessa levyn koko sisältö voidaan menettää.

## Lähteet

## Aiheesta muualla

* HFS specification, järjestelmän kuvaus Applen sivuilla
* The HFS Primer , HFS opas
* Filesystems HOWTO: HFS
* HFS File Structure Explained, HFS:n kuvaus
* DiskWarrior, levynkorjaussovellus
* MacDrive , sovellus HFS-tiedostojen lukuun Microsoft Windows -ympäristössä