http://en.wikipedia.org/wiki/Comparison_of_file_systems
http://www.softpanorama.org/Internals/Filesystems/ntfs.shtml
http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15719
(od niedawna dostęp do tego źródła wymaga płatnej rejestracji)
http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15900
(od niedawna dostęp do tego źródła wymaga płatnej rejestracji)
Opracował:
Tomasz Trabszys
3. NTFS Master File Table (MFT)
4.1 Alternatywne potoki w NTFS
6. EPS (Encrypting File System)
8.1 Punkty montowania woluminów
8.3 HSM -
Hierarchical Storage Management
8.4 SIS -
Single Instance Storage
13. Integralność danych i ich
odzyskiwanie
·
Transakcyjny
model wykonywania operacji.
·
Elegancki sposób
przechowywania metadanych.
·
B-drzewa,
bezpieczeństwo i stabilność, indeksowanie ogólne (general indexing).
·
Wydane wersje
NTFS:
- NTFS v1.2 (4.0) na Windows
NT
- NTFS v3.0 (5.0) na Windows
2000
- NTFS v4.0 (5.1) na Windows
XP
Ograniczenia nałożone na
pliki umieszczone w NTFS:
Maksymalna
długość nazwy pliku |
Dozwolone znaki
w nazwie pliku |
Maksymalna
długość ścieżki |
Maksymalny
rozmiar pliku |
Maksymalny
rozmiar woluminu |
255 bajtów |
Każdy znak
Unicode poza NUL |
bez limitu |
16TiB |
256TiB |
Każda operacja
na systemie plików NTFS jest realizowana w postaci transakcji. Najpierw
wszelkie zmiany w metadanych zostają zapisane do dziennika, potem dopiero nanoszone
na dysk. Ułatwia to naprawianie błędów, odzyskiwanie systemu plików.
W NTFS,
wszystkie informacje opisujące plik(nazwa pliku, data utworzenia, prawa
dostępu, ... ) są przechowywane jako
metadane. Ten abstrakcyjny, obiektowy model pozwala na łatwe rozszerzanie
funkcjonalności NTFS.
Patrząc od
strony implementacyjnej, B-drzewa użyte do przechowywania systemowych danych
plików(folderów) pozwalają na szybki dostęp i redukcję defragmentacji na dysku.
Dziennik systemu plików zapewnia jego integralność. Wpływa też znacząco na
sprawdzoną stabilność NTFS, wyjątkowo ważną przy wymienianiu głównych wad
poprzednich wersji systemów plików pod np. Windows NT.
Niektóre z
funkcji NTFS opierają się na wyjątkowo ważnej jego cesze: ogólnym indeksowaniu
po atrybutach. Pozwala ono na sortowanie plików(folderów) po atrybutach, a
następnie na szybkie wyszukiwanie. Standardowo, zawartość katalogu jest przechowywana
alfabetycznie w strukturze B+ drzewa(B-drzewa z połączeniami pomiędzy liśćmi.
Rys. http://www.ntfs.com
Byte
Offset |
Field
Length |
Field
Name |
0x00 |
3 bytes |
Jump Instruction |
0x03 |
LONGLONG |
OEM ID |
0x0B |
25 bytes |
BPB |
0x24 |
48 bytes |
Extended BPB |
0x54 |
426 bytes |
Bootstrap Code |
0x01FE |
WORD |
End of Sector Marker |
Rys. http://www.ntfs.com
Boot Sektor znajduje
się w pierwszym sektorze dysku, zawiera informacje potrzebne do odczytania
systemu plików NFTS i jego rozruchu. Na rysunku przestawiona jest jego
zawartość.
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15719
Każdy plik na
woluminie NTFS ma swojego reprezentanta jako rekord w specjalnym pliku Master
File Table (MFT). Jego pierwsze 16 rekordów jest zarezerwowanych na szczególne
informacje systemowe, pozostałe rekordy są przeznaczone dla reprezentantów
plików.
Uproszczony schemat:
Rys.: http://www.ntfs.com
MFT alokuje
stałą przestrzeń dyskową dla każdego reprezentanta pliku. Metadane plików są
zapisywane w przestrzeni MFT, w przypadku małych plików, zostają one w całości
wpisane w rekord MFT. W przypadku plików o dużej ilości metadanych, są one
przechowywane w wielu rekordach MFT.
Rekord MFT dla małego pliku
( katalogu):
Rys.: http://www.ntfs.com
Takie rozwiązanie pozwala
na dużo szybszy dostęp w porównaniu ze starszymi rozwiązaniami, np. FAT.
Pierwsze
16 rekordów zawiera specjalne metadane systemu plików:
System plików |
Nazwa
Pliku |
Rekord
MFT |
Funkcje |
Master file table |
$Mft |
0 |
Zawiera podstawowe informacje nt. plików
i folderów w systemie plików. W razie potrzeby alokuje dodatkowe rekordy MFT.
|
Master file table 2 |
$MftMirr |
1 |
Kopia 4 pierwszych rekordów MFT. Pozwala
odzyskać dane w przypadku wystąpienia błedów w sektorach zawierających MFT. |
Log file |
$LogFile |
2 |
Zapamiętuje ostatnei transakcje wtykonane
na systemie plików. Jego rozmiar może dochodzić nawet do 4 MB. Jest
używany przez rodzinę SO Windows, po awarii systemu. |
Volume |
$Volume |
3 |
Zawiera informacje nt. woluminu: nazwa,
wersja. |
Attribute definitions |
$AttrDef |
4 |
Tablica atrybutów, ich nazw oraz opisu. |
Root file name index |
$ |
5 |
Katalog główny. |
Cluster bitmap |
$Bitmap |
6 |
Przechowuje informacje o używanych
klastrach. |
Boot sector |
$Boot |
7 |
Boot sector |
Bad cluster file |
$BadClus |
8 |
Zawiera informacje o niedziałających
klastrach. |
Security file |
$Secure |
9 |
Deskryptory praw dostępu. |
Upcase table |
$Upcase |
10 |
Zamienia małe litery na wielkie, zgodnie
z Unicode. |
NTFS extension file |
$Extend |
11 |
Używana w wielu fukncjach NTFS, np.:
quota’y, reparse point’y, object ID. |
|
|
12–15 |
Zarezerwowane na przyszłość. |
·
Atrybutami są:
nazwa pliku, informacja nt. praw dostępu, zawartość, …
·
Każdy atrybut
jest identyfikowany kodem(numerem).
·
Atrybuty
rezydentne i nierezydentne, listy atrybutów.
Dla systemu
plików NTFS każdy z plików jest zbiorem atrybutów. Praktycznie wszystkie
informacje związane z plikiem są jego atrybutami. Wszystkie atrybuty pliku,
które mieszczą w pojedynczej instancji(rekordzie) MFT są nazywane atrybutami
rezydentnymi. Atrybuty nierezydentne są alokowane w innych obszarach pamięci,
jeśli miejsca w rekordzie macierzystym się wyczerpały. W przypadku gdy
atrybutów jest tak dużo, że nawet wskaźników do ciągłych obszarów pamięci jest
za dużo by pomieścić w jednym rekordzie, stosuje się wskaźnik do listy
atrybutów.
Atrybuty plików
zdefiniowane przez NTFS:
Typ
atrybutu |
Opis |
Standard Information |
Zawiera informacje takie jak czas
ostatniego dostępu bądź licznik linkowań. |
Attribute List |
Lista wszystkich atrybutów, ktore nie
mieszczą się w MFT. |
File Name |
Nazwa pliku. |
Security Descriptor |
Informacje nt. właściciela pliku oraz
praw dostępu. |
Data |
Zawiera dane pliku. NTFS dopuszcza
możliwość posiadania wielu strumieni danych dla pliku. |
Object ID |
Unikalny identyfikator. Nie każdy
element NTFS posiada ten atrybut. |
Logged Tool Stream |
Podobne do strumieni danych, z tym, że
zmiany tego atrybutu są lgoowane w dzienniku tak jak metadane. Uzywane przy
EFS. |
Reparse Point |
Atrybut opisany obszernie niżej. |
Index Root |
Używany do implementacji folderów i
innych indeksów. |
Index Allocation |
Używany do implementacji folderów i
innych indeksów. |
Bitmap |
Używany do implementacji folderów i
innych indeksów. |
Volume Information |
Wersja woluminu. |
Volume Name |
Wersja woluminu. |
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15719
·
Potoki
alternatywne swoje powstanie zawdzięczają systemom plików Mac. Początkowo miały
zapewnić zachowanie dodatkowych danych(zapisanych właśnie w postaci
alternatywnych potoków) plików z Mac’ów na serwerach Windows.
·
Każdy potok w
pliku ma osobne blokady wykluczające, ale wspólne prawa dostępu.
·
Dane zawarte w
alternatywnych potokach zostają utracone w skutek przenoszenia danych na inny
system plików np. FAT.
Alternatywne
potoki są w pewnym sensie plikami wewnątrz plików. Każdy plik NTFS zawiera
związany z nim plik bez nazwy. Jest on domyślnym, standardowym potokiem danych,
używanym przez praktycznie każdy program. Są to dane, na których operujemy
używając najprostszych programów np. do edycji pliku tekstowego.
Funkcjonalność
alternatywnych potoków z reguły nie jest wykorzystywana. Nawet tak zintegrowane
ze środowiskiem Windows programy jak Windows Explorer, przy odczytywaniu rozmiaru
pliku uwzględniają tylko standardowy potok danych. Poprzez wykorzystanie
alternatywnych potoków można także łatwo przemycić wirusy, zatem m.in. z tych
względów to rozszerzenie NTFS ma zostać w przyszłości usunięte.
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15719
·
NTFS tworzy jeden
schemat praw dostępu w tablicy laszującej. Pliki NTFS zawierają jedynie
wskaźniki do elementu tablicy.
W wersjach NTFS przed
Windows 2000, każdy plik przechowywał swoje prawa dostępu w swoich atrybutach.
Okazało się, że różnych schemat ów praw dostępu, nawet dla rozbudowanych
serwerów z wieloma użytkownikami jest ograniczona, relatywnie niewielka ilość.
Dlatego od wersji 5.0 NTFS przechowuje w plikach jedynie wskaźnik do
odpowiednich praw dostępu, zapisanych w metadanych systemu. Pozwala to na
zaoszczędzenie miejsca na dysku, gdyż nie występuje redundancja informacji.
Przy zapisie
pliku, system sprawdza czy schemat praw dostępu jest już obecny w tablicy. W
przypadku nowego schematu, dodaje element do tablicy i aktywuje wskaźniki. W
przypadku odczytu, system szybko sprawdza czy użytkownik ma prawa dostępu
poprzez odczytanie informacji zapisanej pod wskaźnikiem.
Zalety:
·
Działanie w tle
·
Kombinacja
algorytmów:
- 128-bitowy
(ew. 168) symetryczny DESX
- 1024-bitowy
RSA
daje efektywny
i zarazem relatywnie trudny do złamania klucz.
·
Szyfrowanie
odbywa się w wątkach jądra, co utrudnia odczytanie nieużywanych już stron
pamięci.
·
Dodatkowy klucz
nadzorcy do odzyskiwania danych.
Wady:
·
Pliki tymczasowe
są tylko zaznaczane do usunięcia, nie wspominając o zamazywaniu.
·
Niektóre programy
tworzą kopie tymczasowe, które też powinny być szyfrowane. Na szczęście, z
reguły pliki te znajdują się w tym samym katalogu(łatwo obejść tę
niedogodność).
·
Klucz znajduję
się na dysku.
Szyfrowanie
plików ma za zadanie uchronić użytkownika przed niepowołanym dostępem do jego
danych. EFS jest narzędziem zapewniającym podstawowe bezpieczeństwo –
wykorzystuje szybki algorytm z symetrycznym kluczem do szyfrowania danych, a
następnie szyfruje ten klucz przy pomocy ciężkiego algorytmu RSA z 1024-bitowym
kluczem.
System szyfruje
dane w tle, użytkownik nie widzi różnicy pomiędzy działaniem systemu plików z
szyfrowaniem danych i bez tej funkcji. Można szyfrować dowolny zbiór danych na
dysku, jednakże zaleca się szyfrowanie katalogami, gdyż niektóre programy
użytkowe tworzą kopie tymczasowe. W przypadku Microsoft Word kopie te znajdują
się w tym samym katalogu, co uchroni je przed niepowołanym dostępem, jeśli
również zostaną zaszyfrowane. Można uzyskać to bezpieczeństwo szyfrując cały
katalog zawierający ważne pliki.
NTFS oferuje
dodanie do szyfrowania kluczy nadzorców do odzyskiwania danych. W przypadku
lokalnych sieci komputerowych, firm zrzeszających wielu pracowników, taki klucz
może okazać się przydatny przy przetasowaniach kadrowych, gdy trzeba odzyskać
dane i pracę odchodzącego pracownika.
W przypadku
Windows XP domyślnie nie dołącza się klucza do odzyskiwania danych, gdyż
większość użytkowników wyklucza prawo dostępu wielu osób do danych. W Windows
2000 klucz administratora do odzyskiwania danych jest tworzony automatycznie.
Szyfrowanie pliku:
Rys.: http://www.ntfs.com
Rozszyfrowanie pliku:
Rys.: http://www.ntfs.com
Odzyskanie danych przy
pomocy klucza nadzorcy:
Rys.: http://www.ntfs.com
Rys.: http://www.ntfs.com
·
Podobieństwo do
podalgorytmów kompresji dysku.
·
Zastosowanie w
monitorowaniu zmian na woluminie (Volume Change Tracking)
W przypadku
pliku z ustawionym atrybutem sparse, większe rejony pliku zawierające same zera
nie są fizycznie zapisywane na dysku. System w przypadku odwołania do takich
obszarów generuje zera i przekazuje klientowi. Takie rozwiązanie pozwala na
zaoszczędzenie miejsca w przypadku plików zawierającym wiele zer następujących
kolejno po sobie. Takich plików, może wbrew pozorom przytrafia się wiele. Jako
przykład przedstawię zastosowanie funkcjonalności plików sparse przy okazji
opisywania Volume Change Tracking.
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15900
·
Rozsądna,
funkcjonalna implementacja zmian plików na woluminie.
·
Implementacja
oparta na Sparse File, opisanym wcześniej.
Przed Windows
2000, aplikacje wymagające monitorowania zmian w woluminie, miały bardzo mało
możliwości. System powiadamiał praktycznie tylko o tym, że zaszły zmiany, nie
podając rodzaju zmiany. Program musiał samoczynnie odszukiwać modyfikacji. Od
Windows 2000 sytuacja uległa zmiana, dzięki Volume Change Tracking. Jest to
tablica zawierająca zmiany zachodzące na woluminie. Każdy element tablicy to
rekord zawierający m.in. informację o tym jaki plik się zmienił, adres jego
reprezentanta w MFT, kiedy i co tak naprawdę się z nim stało(utworzony,
skasowany, zmodyfikowany). Aplikacja może zażądać prowadzenia dla niej takiego
dziennika.
Przy
implementacji tego dziennika zmian na woluminie użyto atrybutu sparse. Plikiem
sparse jest tablica zawierająca rekordy z informacjami o zmianach na woluminie.
Rozmiar dziennika jest ograniczony, jednakże nawet w przypadku następowania
ekstremalnie często zmian na dysku, aplikacja zdąży zanotować informacje przed
usunięciem jej z tablicy. W miarę napływania zmian dodaje się nowe rekordy do
tablicy. Gdy trzeba zwolnić trochę miejsca wskutek zapełniania się tablicy,
miejsce zawierające najstarsze zmiany oznacza się jako wypełnione zerami.
Zapewnia to oszczędność przestrzeni dyskowej bez utraty szybkości działania.
- Atrybut, na podstawie
którego zostały zaimplementowane inne funkcje systemu NTFS:
·
punkty montowania
woluminów (Volume Mount Points)
· montowanie
katalogów (Directory Junctions)
· HSM (Hierarchical Storage Management)
· SIS (Single
Instance Storage)
Gdy plik, bądź
katalog systemu plików NTFS zawiera atrybut reparse, przy każdej próbie
odwołania się do elementu, zostanie wykonany specjalny kod adresowany atrybutem
reparse. Ta funkcjonalność NTFS została wykorzystana do innych wbudowanych cech
NTFS:
Funkcjonalność
analogiczna do Unix’owych Mount point’ów. Każdy istniejący system plików(taki
że jest mu przypisana pewna litera: C:, …, Z: ) może zostać podłączony jako
katalog w bieżącym systemie plików.
Montowanie
katalogów działa analogicznie do punktów montowania woluminów, z tą różnicą, że
podczepia się pojedyncze katalogi z systemy plików.
HSM pozwala na przechowywania rzadko używanych danych na
wolniejszych bądź tańszych nośnikach. Gdy tylko dane nie są długo używane
zostają zastąpione plkiem reparse, a plik originalny zostaje przeniesiony na
tańsze urządzenie. Przy próbie dostępu do pliku uprzednio przeniesionego,
uruchamia się kod reparse, a mechanizm HSM przenosi plik z powrotem na droższe
urządzenie.
W przypadku gdy
system plików zawiera wiele takich samych plików rozsianych po strukturze
katalogowej, mechanizm SIS znajduje takie bliźniacze pliki, zastępuje je
plikami z atrybutem reparse, a właściwą treść pliku przechowuje w jednej kopii
w specjalnym miejscu. Kod zawarty w reparse przekierowuje żadania do miejsca,
gdzie faktycznie znajduje się plik.
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15900
·
szeroki (16
bajtów) zakres numeracji Obcject ID daje unikalny numer w obrębie domeny,
szansa że Object ID będzie dobrym identyfikatorem w bardziej ogólnych
przypadkach zmniejsza się wraz z rozrostem modelu.
·
Linki odnajdują
pliki, na które wskazują za pomocą Object ID
·
Operacje
zachowujące Object ID:
1.
zmiana ścieżki
2.
przy tworzeniu
kopii zapasowej
3.
odzyskiwanie z
kopii zapasowej
4.
zmiana nazwy
komputera
5.
zmiana komputera
w obrębie domeny
Od Windows 2000,
skróty do plików, katalogów oprócz ścieżki katalogowej zapamiętują też Object
ID. Dlatego nawet gdy przeniesiemy element docelowy na inny komputer w sieci,
skrót będzie działał poprawnie. Przy próbie odwołania się do nieaktualnego
skrótu, obiekt zostanie znaleziony na podstawie indeksu wszystkich plików i
folderów po atrybucie Object ID. Ścieżka zostanie też automatycznie
zaktualizowana.
·
Działa w tle
·
Rozmiar klastra
na dysku nie może przekraczać 4kB
Od wersji 5.0,
NTFS na życzenie użytkownika, może w tle kompresować żadane pliki na dysku, a
przy próbie odczytu, również w tle, dekompresuje przed odczytem. Zaletą takiego
rozwiązania jest oszczędność miejsca bez praktycznie żadnego nakładu pracy oraz
dodatkowego „klikania” w momencie, gdy kompresja jest włączona.
Odbywa się to
kosztem wydajności, procesor za każdym razem musi być wykorzystywany do
konwersji na postać spakowaną i rozpakowaną. Algorytmy kompresji działają tylko
dla woluminów o rozmiarze klastra nie większym niż 4kB, w innym przypadku nie
można stosować kompresji.
Rys.: http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15719
·
Model per-volume,
per-user.
·
Mierzy (i
ogranicza) zaalokowaną pamięć użytkowników.
·
Wyjątkiem są
pliki sparse oraz kompresja w tle, w których uwzględnia się wirtualny rozmiar
przy wyliczaniu zajętego obszaru.
Funkcjonalność
już dawno zaimplementowana pod linuxem, wreszcie obsługiwana przez Windows’owy
system plików.
Działania NTFS(dla Windows
2000) spełniające normy POSIX:
·
Pliki
na woluminach NTFS spełniają konwencję nazewnictwa POSIX. Nazwy plików mogą
zawierać spacje, kropki oraz są rozróżnialne względem małych i wielkich liter.
·
Przechodnie
sprawdzanie dostępu do pliku katalogu. Przed uzyskaniem dostępu do
pliku/katalogu sprawdzane są prawa dostępu wszystkich katalogów nadrzędnych.
·
Zostawianie
śladu: „File change time”.
·
Twarde
dowiązania zgodne z normami POSIX.
·
Standardowe pliki log do implementacji transakcji
·
Dynamiczne mapowanie klastrów (Cluster remapping)
Każda operacja
jest wykonywana na zasadzie transakcji. Najpierw zmiany dokonywane na
metadanych zostają zapisane w dzienniku, dopiero potem faktyczna operacja ma
miejsce i jest zatwierdzana. W przypadku awarii systemu, uruchamiane jest
odzyskiwanie systemu plików. Przeglądany jest dziennik i wszystkie
niedokończone transakcje są usuwane bądź realizowane zgodnie z zapamiętanymi
tam informacjami. Taki rozwiązanie gwarantuje stabilność systemu plików,
aczkolwiek czasami można utracić część informacji, które były modyfikowane w
trakcie awarii, bądź znajdowały się na zepsutym klastrze.
W przypadku gdy
system plików odkryje niedziałające klastry na dysku, automatycznie oznacza je
jako zepsute i podstawia na jego miejsce nieużywany klaster. W przypadku
odwołania do adresu podmienionego klastra, NTFS realizuje żądanie na nowym
zmapowanym klastrze. W przypadku odczytu z błędnego klastra traci się
informacje na nim zawarta, jednak w przypadku zapisu, użytkownik nie dowie się
nawet, że wystąpił po drodze jakiś błąd. Oczywiście powtarzające się awarie
klastrów są poważną wskazówką do wymiany nośnika.
·
Odpowiednie
zdefiniowanie rozmiaru klastrów.
·
Zmiana
ilości rezerwowanego miejsca dla MFT
·
Defragmentacja:
-
MFT
-
Plików
i folderów
-
Plików
stronicowania
·
Kompresja
danych