Chapter 5. Atrybuty rezydentne i nierezydentne

We fragmencie prezentacji tyczącym się MFT zostało wspomniane, że istnieją atrybuty rezydentne i nierezydentne plików. Atrybuty rezydentne są zapamiętywane w domyślnie jednokilobajtowym wpisie w MFT, dzięki czemu dostęp do nich wymaga tylko jednego odczytu dyskowego (jest to bardzo istotną optymalizacją!). Pewne atrybuty muszą być rezydentne (na przykład Standard Information, Filename czy pewna część Index Root dla katalogów). Istnieją jednak pliki, których zawartość nie mieści się w jednym wpisie w MFT, a także katalogi, które zawierają w sobie bardzo dużo plików i podkatalogów - w takich przypadkach potrzebne okazują się atrybuty nierezydentne, czyli niemieszczące się w MFT. W nagłówku każdego atrybutu jest zapisane, czy jest to atrybut rezydentny, czy nie (w przypadku tych pierwszych jest tam także informacja, jaki jest offset między nagłówkiem a wartością atrybutu i jaka jest długość tego atrybutu):

Figure 5.1. Nagłówek atrybutu

Nagłówek atrybutu

Wartości atrybutów nierezydentnych są przechowywane na dysku, a w MFT znajduje się informacja, gdzie na tym dysku są położone. Kiedy wartość atrybutu staje się większa pod względem rozmiaru, system operacyjny doalokowuje stosowne miejsce na dysku w tak zwanych rzutach (ang. runs) czy jak kto woli ekstentach (ang. extents) - czyli partiach kolejnych klasterów dyskowych (system operacyjny robi to w sposób niewidoczny dla użytkownika). Atrybutami nierezydentnymi mogą być tylko atrybuty o zmiennej wielkości; najczęstsze przykłady to atrybut pliku Data:

Figure 5.2. Nierezydentny atrybut Data

Nierezydentny atrybut Data

czy atrybuty katalogu Index root+Index allocation+Bitmap (ekstenty w tym drugim przypadku nazywamy buforami indeksowymi):

Figure 5.3. Nierezydentny atrybut Index root

Nierezydentny atrybut Index root

Wreszcie jeżeli w jednym wpisie w MFT nie mieszczą się wszystkie atrybuty danego pliku, to wykorzystywany jest atrybut Attribute list, a niemieszczące się atrybuty są pamiętane w kolejnych wpisach w MFT - Attribute list pamięta trójki: (nazwa atrybutu, kod typu atrybutu, adres rekordu MFT, gdzie się ten atrybut znajduje).