Historia_ntfs.doc

(102 KB) Pobierz

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.


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ą.


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,


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.


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.


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 ...

Zgłoś jeśli naruszono regulamin