background image

Historia 

Pod  koniec  lat  osiemdziesiątych  powstał  Windows  NT.  Wraz  z  jego  rozwojem  okazało  się, 

że wykorzystywane  przez  niego  systemy  plików  takie  jak  FAT  czy  HPFS  miały  zbyt  duże 

ograniczenia.  Microsoft  był  zmuszony  na  początku  lat  dziewięćdziesiątych  opracować  nowy 

system  plików  dla  Windows  NT,  aby  móc  z  nim  wejść  na  rynek  zastosowań  biznesowych 

i wymagający  bezpieczeństwa  oraz  integralności  przechowywanych  danych,  a  także 

zaawansowanych  funkcji  organizacji  i  dostępu  do  danych.  W  tym  celu  wykorzystano 

doświadczenia  z  pracy  nad  HPFS  i OS/2.  Nowy  system  plików  był  stosowany  wewnątrz 

firmy  podczas  normalnej  pracy,  dzięki  czemu  jego  twórcy  mogli  go  od  razu  dobrze 

przetestować. Tak powstał NTFS. 

Wprowadzono  w  nim  m.in.  obsługę  dużych  partycji,  macierzy  dyskowych,  uprawnień 

do plików,  zwiększono  odporność  na  błędy,  zmieniono  sposób  zapisu  nazw  plików 

z 8-bitowego  na  16-bitowy  Unicode.  Pierwsza  wersja  (1.0)  ujrzała  światło  dzienne  wraz 

z Windows  NT  3.1.  Systemy  Windows  NT  3.51  i  4.0  obsługują  NTFS  1.2  (niektóre  źródła 

podają numer 1.1, wersja ta jest też znana jako NTFS 4.0 od numeru wersji Windows). Wraz 

z  Windows  2000  pojawił  się  NTFS  5.0  (nazywany  też  3.0),  dodano  m.in.  możliwość 

szyfrowania  plików,  przydziały  przestrzeni  dyskowej  (quota)  oraz  ewentualność  montowania 

woluminów  do  katalogów.  Windows  XP  i  2003  używają  NTFS  5.1  (3.1),  więc  różnice 

w stosunku do 5.0 są niewielkie. 

Przesunięto  też  niektóre  struktury  danych  na  szybsze  miejsca  na  dysku,  co  jak  podaje 

Resource  Kit,  zwiększa  wydajność  o  5  –  8  procent.  Dodano  nowe  i  ulepszono  istniejące 

narzędzia  dyskowe,  m.in.  do  konwersji  z  FAT.  Zmiany,  choć  niewielkie,  sprawiają  jednak 

kłopoty starszym narzędziom dyskowym. Ponadto Windows XP przy pierwszym montowaniu 

woluminu  sformatowanego  jako  NTFS  5.0  automatycznie  konwertuje  go  do  5.1,  co  może 

spowodować  problemy  z  odczytem  dysku  pod  Win2k.  Obsługę  NTFS  5.1  w  Windows  2000 

wprowadzono w SP1, a w NT 4 w SP4. 

background image

Wolumin NTFS składa się z czterech obszarów: 

• bootsectora  (sektora  startowego),  który  zawiera  podstawowe  informacje 

o woluminie oraz posiada kod uruchamiający Windows NT, 

• głównej  tablicy  plików  (Master  File  Table,  MFT),  składającej  się  z  plików 

systemowych  przechowujących,  m.in.  dane  o  położeniu  plików  i  katalogów, 

ich atrybuty, plik dziennika, informacje o uszkodzonych sektorach itp, 

• danych plików i katalogów, 
• kopii zapasowej MFT. 
 

Bootsector 

To pierwszy sektor partycji tworzony podczas formatowania woluminu. Na początku znajduje 

się  trzybajtowa  instrukcja  skoku,  będąca  rozkazem  w  języku  maszynowym  procesora  x86. 

Jest  ona  potrzebna,  gdyż  po  niej  znajdują  się  dane  i  procesor  musi  przejść  do  części 

bootsectora  zawierającej  kod  startowy  uruchamiający  system  operacyjny.  Te  dane  to  OEM 

ID, BPB i rozszerzone BPB (Extended BPB). OEM ID jest ciągiem znaków identyfikujących 

nazwę  i  wersję  systemu  operacyjnego.  Systemy  Windows  NT  wpisują  tam  ciąg  „NTFS” 

(w systemie  plików  FAT  też  znajdował  się  OEM  ID),  Windows  95  wpisywał  w  tym  miejscu 

„MSWIN4.0”,  natomiast  Windows  95  OSR  2  i  późniejsze  z  linii  9x  umieszczały 

„MSWIN4.0”. Po OEMID znajduje się BPB (BIOS parameter block, blok parametrów BIOS-

u),  zawierajacy  m.in.  informacje  o geometrii  dysku,  pozwalające  kodowi  wykonywalnemu 

zawartemu  w  bootsectorze  na  odnalezienie  pliku  ntldr  i  uruchomienie  Windows. 

ExtendedBPB pozwala na odnalezienie MFT. Jeśli zdarzy się uszkodzenie klastrów w obrębie 

MFT, można je przenieść w inne miejsce dysku. Trzeba tylko zmienić zapis w Extended BPB. 

W przypadku  uszkodzenia  rozszerzonego  BPB,  główna  tablica  plików  nie  może  zostać 

odnaleziona i Windows uznaje partycję za niesformatowaną. 

 

background image

MFT 

Główna  tablica  plików  zawiera  wszelkie  informacje  o  sobie  i  wszystkich  innych  plikach 

na dysku,  jest  bardzo  dobrą  bazą  danych  zawierającą  co  najmniej  jeden  rekord  dla  każdego 

pliku  lub  katalogu.  Kolumnami  w  tej  bazie  są  atrybuty  plików.  Rekordy  posiadają  też 

nagłówki  zawierające  sumę  kontrolną,  wskaźnik  do pierwszego  atrybutu  w  rekordzie, 

wskaźnik  do  pierwszego  wolnego  bajtu  oraz  numer  bazowego  rekordu  MFT  dla  pliku, 

którego  dotyczy  wpis.  Jeśli  dane  opisujące  plik  nie  mieszczą  się  w  jednym  rekordzie, 

to posiada on ich kilka. Sytuacja taka może wystąpić np. przy dużym sfragmentowaniu pliku, 

wtedy  pierwszy  jego  rekord  to rekord  bazowy,  zawierający  informacje  o  pozostałych.  Małe 

pliki  lub  katalogi  mogą  być  umieszczane  w  rekordach  w  całości,  a  nie  tylko  same 

ich atrybuty.  Maksymalny  rozmiar  pliku/katalogu  takiego  pliku  zależy  naturalnie od rozmiaru 

rekordu. Rekord może mieć różną wielkość zależnie od wielkości klastra oraz wersji NTFS-a, 

który zwykle oscyluje wokół 1 kilobajta. Główna tablica plików jest w rzeczywistości plikiem 

o  nazwie  $Mft,  posiadającym  częściową  kopię  zapasową  w  pliku  o  nazwie  $MftMirr.  Dane 

na temat tego jak duża część MFT znajduje się w kopii zapasowej, są dość rozbieżne.  

W  Technecie,  w  opisach  Windows  2000  i  2003  widnieje  informacja  o  czterech  sektorach, 

a w przypadku Windows XP – w zależności odwielkości, cztery rekordy lub pierwszy klaster. 

W  opisach  NTFS4  spotkać  można  również  wartość  16  lub  3 rekordów.  Plik  $MftMirr 

położony  jest  na  końcu  woluminu  (w  Windows  NT  3.51  i temu  podobnych  systemach 

znajdował  się  pośrodku  przestrzeni woluminu), natomiast $Mft i $MftMirr to tzw. metapliki. 

Na  dysku  znajduje  się  więcej  takich  plików,  a  wszystkie  z  nich  mają  nazwy  zaczynające  się 

od  znaku  $,  nie  można  ich  także  normalnie  zobaczyć.  W  starszych  Windows  NT  były 

widoczne  za  pomocą  polecenia  dir  /ah  wydanego  w  katalogu  głównym.  Dla  metaplików 

zarezerwowane jest 16 pierwszych rekordów w MFT (ok. 1 megabajta). Spis metaplików i ich 

funkcje można znaleźć w tabeli 3. 

Ponieważ  fragmentacja  MFT  mogłaby  spowodować  znaczny  spadek  wydajności  systemu, 

NTFS rezerwuje domyślnie 12,5% miejsc na dysku na MFT. Ten obszar nazywany jest strefą 

MFT (MFT zone). Nie powoduje to jednak niewykorzystania miejsca na dysku, jeśli dostępne 

miejsce  się  skończy,  pliki  są  zapisywane  w  strefie  MFT.  Jeżeli  na  woluminie  zostanie 

utworzonych  bardzo  dużo  małych  plików,  może  zajść  sytuacja  odwrotna  –  rekordy  tych 

plików  nie  zmieszczą  się  w  strefie  MFT  i zostanie  ona  wtedy  powiększona.  Systemowe 

funkcje  zwracające  ilość  wolnego  miejsca  uwzględniają  też  wolne  miejsce  w  MFT  zone, 

background image

użytkownik  nie  jest  więc  świadom  jej  rozmiaru  i  wszystko  odbywa  się  dla  niego  w  sposób 

właściwy. 

 

Atrybuty plików 

Każdy zaalokowany sektor na woluminie NTFS należy do pliku. Wszystkie pliki i katalogi są 

traktowane  jako  zestawy  atrybutów,  do  których  należą  m.in.  nazwa,  informacje 

o zabezpieczeniach,  a  także  same  dane  przechowywane  w  pliku.  Każdy  atrybut  jest 

identyfikowany  przez  kod,  a  opcjonalnie  także  przez  nazwę.  Atrybuty,  które  są  zapisane 

w rekordzie pliku w MFT, są nazywane atrybutami rezydującymi, a te, które się nie mieszczą, 

zapisywane  są  poza  MFT,  w  przestrzeni  dyskowej  i noszą  nazwę  nierezydujących. 

W atrybutach  rezydujących  zostaje  utworzona  lista  atrybutów  (która  także  jest  atrybutem) 

zawierająca  wskazania  na  położenie  atrybutów  nierezydujących  w  celu  odnalezienia 

wszystkich  atrybutów  pliku.  Nazwa  pliku  oraz  znaczniki  czasu  są  zawsze  rezydujące. 

Rekordy  katalogów  zawierają  informacje  indeksujące  i  podobnie  jak  w  przypadku  plików, 

atrybuty katalogów mogą się nie zmieścić w jednym rekordzie. 

Duże  katalogi  są  wtedy  organizowane  w  postaci  posortowanego  drzewa  zrównoważonego 

(balanced  tree,  B-tree)  i  posiadają  rekordy  ze  wskaźnikami  do zewnętrznych  klastrów 

(buforów  indeksowych,  index  buffers),  zawierających  wpisy  w  folderze,  które  nie  mieszczą 

się w MFT. Przeszukiwanie drzewa zrównoważonego jest dużo szybsze niż listy, szczególnie 

przy  dużej  ilości  elementów.  W  przypadku  drzewa  obszar  poszukiwań  za  każdym  razem 

zmniejsza  się  kilkukrotnie,  zależnie  od  ilości  elementów  w  węźle.  W  systemie  plików  FAT, 

gdzie  stosowana  była  lista,  wpisy  w  katalogu  przeszukiwane  były po kolei, dopóki nie został 

odnaleziony  poszukiwany  plik/katalog.  Co  prawda  w  nowszych  systemach  korzystających 

z FAT,  takich  jak  Windows  98,  wprowadzono  podobne  optymalizowanie  przeszukiwania, 

jednak nadal stosowane było liniowe ułożenie wpisów. 

background image

Kompresja 

Kompresja  jest  natywnie  obsługiwana  przez  NTFS  i  Windows  NT,  dzięki  czemu  nie  trzeba 

korzystać  z  żadnych  zewnętrznych  programów.  Posługiwanie  się  skompresowanymi  plikami 

wygląda  tak  samo  jak  praca  ze  zwykłymi  plikami,  jedyną  odczuwalną  różnicą  może  być 

wolniejszy  dostęp.  Skompresowanie  pliku  czy  katalogu  jest  bardzo  proste  i  wymaga 

zaznaczenia  atrybutu  kompresji  w  okienku  właściwości  pliku/katalogu.  Pliki  skompresowane 

nie  mogą  być  zaszyfrowane,  ponadto  kompresja  nie  jest  dostępna  w  Windows  XP  Home 

Edition. 

 

Kompresji  podlegają  bloki  składające  się  z  16  klastrów,  które  są  kompresowane  oddzielnie 

i dzięki  temu  np.  część  pliku  może  zostać  skompresowana,  a  część  nie.  Podczas  kompresji 

dane  z  16  klastrów  są  zapisywane  w  mniejszej  ilości  miejsca.  Pozostałe  klastry  stają  się tzw. 

klastrami  wirtualnymi  i  znajdują  się  za  „prawdziwymi”.  Podczas  dekompresji  wirtualne 

klastry  zostają  zapełnione  danymi  na  podstawie  danych  zapisanych  w  pozostałych  klastrach 

i w  ten  sposób  odtwarzana  jest  pierwotna  postać  pliku.  Wszystko  odbywa  się  w  sposób 

automatyczny  i  przezroczysty  dla  aplikacji.  Kompresję  można  włączyć  lub  wyłączyć  poprzez 

ustawienie  lub  wyłączenie  odpowiedniego  atrybutu  pliku.  Włączanie  następuje  poprzez 

przesłanie 

parametru 

FSCTL_SET_COMPRESSION 

do 

funkcji 

DeviceIoControl, 

a plik/katalog  otrzymuje  flagę  FILE_ATTRIBUTE_COMPRESSED.  Ponieważ  dekompresja 

następuje  w  pamięci,  spadek  wydajności  nie  jest  zbyt  duży.  Kompresja  nie  może  zostać 

zastosowana  na  woluminach,  które  zostały  sformatowane  z  wielkością  klastra  ponad  4  kB. 

Z tego  też  względu  wprowadzono  wraz  z  systemem  Windows  2000  ograniczenie  domyślnej 

wielkości klastra podczas formatowania właśnie do 4 kB. 

 

Uprawnienia do dostępu do danych 

W  NTFS-ie  wprowadzono  to,  czego  bardzo  brakowało  w  systemie  plików  FAT,  a  było 

od dawna  dostępne  w  systemach  uniksowych  –  uprawnienia  do  plików  i  katalogów.  Nie  są 

to jednak  proste  zestawy  uprawnień  do  odczytu,  zapisu  i  wykonania  dla  użytkownika,  grupy 

użytkowników i pozostałych użytkowników. W NTFS 4.0 było 6 uprawnień, w NTFS 5.1 jest 

ich już 13, co pozwala na bardzo dokładne określanie, kto może wykonać jakie akcje na pliku. 

background image

Nie  trzeba  ustawiać  każdego  prawa  oddzielnie,  ponieważ  istnieją  predefiniowane  zestawy 

uprawnień.  Dzięki  dziedziczeniu  wprowadzonemu  w  NTFS  5.0  można  wygodnie  zmieniać 

prawa  wielu  plików  i  katalogów  jednocześnie,  ale  z  zachowaniem  wyjątków.  Uprawnienia 

można  nadawać  dowolnym  użytkownikom  i  grupom,  a  właścicielem  pliku  może  być 

użytkownik lub grupa. 

Nazwy plików 

Nazwy  plików,  podobnie  jak  w  FAT32  mogą  mieć  długość  255  znaków.  Znaki  występujące 

w ścieżce  nie  są  jednak  zapisywane  jako  8-bitowe  znaki  ASCII,  ale  zakodowane 

w standardzie  Unicode  do  postaci  16-bitowej,  więc  dzięki  temu  użytkownicy  mogą  bez 

przeszkód używać swoich znaków narodowych. 

Szyfrowanie 

Także  obsługa  szyfrowania  została  wbudowana  w  NTFS.  Dzięki  niej  osoba  mająca  fizyczny 

dostęp  do  dysku,  a  nie  posiadająca  odpowiedniego  klucza  prywatnego  nie  może  odczytać 

z niego  danych.  Szyfrowaniu  podlegają  pojedyncze  pliki,  a  zaznaczenie  szyfrowania  dla 

katalogu  oznacza,  że  szyfrowane  będą  nowe  pliki  tworzone  w  tym  katalogu.  Plików 

z atrybutami systemowy i tylko do odczytu nie można szyfrować. 

Przydziały (Quota) 

NTFS  w  Windows  NT  nie  dawał  możliwości  kontrolowania  ilości  miejsca  na  dysku  zajętej 

przez użytkowników. Można to było osiągnąć stosując oprogramowanie firm trzecich, jednak 

już  wtedy  w  strukturze  NTFS-a  było  przewidziane  miejsce  na  quotę,  którą  wprowadzono 

w Windows  2000  wraz  z  NTFS  5.  W  Win2k  danemu  użytkownikowi  przydziela  się  miejsce 

na  danym  woluminie.  Nie  ustala  się  więc  np.  maksymalnej  wielkości  katalogu  tylko 

maksymalną  sumę  rozmiarów  plików  na  danym  woluminie.  Przy  zapisie  na  dysk  sprawdzane 

jest  miejsce  wykorzystywane  przez  użytkownika. Jeśli limit zostaje przekroczony, to zależnie 

od  ustawień,  użytkownik  może  stracić  możliwość  dalszego  zapisu  na  dysk  i/lub może zostać 

zapisane  zdarzenie  w  dzienniku  zdarzeń.  Oprócz  górnego  limitu  objętości  plików 

administrator  może  też  określić  próg,  którego  przekroczenie  powoduje  wygenerowanie 

ostrzeżenia  o  zbliżaniu  się  do  granicy  objętości  plików.  W  przypadku  plików 

background image

skompresowanych  liczony  jest  ich  rozmiar  po  rozpakowaniu,  a  w  pomocy  Windows  XP 

znajduje  się  informacja,  że  w  przypadku  folderów  skompresowanych  brana  pod  uwagę  jest 

ich  wielkość  na  dysku.  Nie  chodzi  jednak  tu  o  foldery  z  włączonym  atrybutem  kompresji, 

a o pliki  ZIP,  których  obsługa  została  wbudowana  w  XP  i  są  one  nazywane  folderami 

skompresowanymi. 

Ochrona przed uszkodzeniem systemu plików 

Jednym  z  wymogów  stawianych  systemom  plików  jest  odporność  na  uszkodzenia.  System 

FAT  nie  posiadał  takiej  odporności,  a  zawieszenie  się  systemu  czy  błąd  aplikacji 

niejednokrotnie powodowały powstawanie błędów na dysku. W NTFS-ie wprowadzono m.in. 

mechanizm  transakcji  znany  z  systemów  bazodanowych.  Każda  operacja  na  dysku  jest 

traktowana  jako  transakcja  składająca  się  z  kilku  czynności.  Jeśli  powiodą  się  wszystkie 

składniki  transakcji  jest  ona  uznawana  za  wykonaną  poprawnie,  natomiast  w  przeciwnym 

wypadku  składniki  transakcji  są  wycofywane  i  transakcja  kończy  się  błędem.  Podczas 

odzyskiwania  danych  wykonywane  są  ponownie  wszystkie  transakcje  oznaczone  jako  udane. 

Następnie  wyszukiwane  są  nieukończone  transakcje,  a  podoperacje  które  wchodzą  w  ich 

skład  są  wycofywane  –  gwarantuje  to,  że  na  dysku  nie  znajdą  się  nieukończone  transakcje. 

Nie  uchroni  to  oczywiście  przed  utratą  danych spowodowaną np. powstaniem uszkodzonych 

sektorów  po  zapisie  do  nich  danych.  NTFS  posiada  funkcję  zwaną  przemieszczaniem 

klastrów  (Cluster  Remapping),  polegającą  na  automatycznym  zaalokowaniu  nowego, 

w momencie gdy podczas odczytu lub zapisu zostanie napotkany uszkodzony sektor.