Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Визначення типу файлової системи

Поиск

У файловій системі немає поля, яке ідентифікувало б її як систему FAT12, FAT16 або FAT32.

«Офіційний» метод визначає тип системи на підставі кількості кластерів у файловій системі. Аби отримати кількість кластерів, необхідно визначити кількість секторів в області даних і розділити це число на кількість секторів в кластері.

У FAT 12 і FAT 16 кореневий каталог займає перші сектори області даних, а кластер 2 починається після нього. У FAT32 кореневий каталог має динамічний характер, а кластер 2 знаходиться на початку області даних. У завантажувальному секторі зберігається значення, що визначає кількість записів в кореневому каталозі; у FAT32 вона дорівнює 0. Аби обчислити кількість секторів в кореневому каталозі, слід помножити кількість записів на 32 байти (розмір кожного запису), розділити на кількість байт в секторі і округлити вгору (при необхідності):

((КІЛЬКІСТЬ_ЗАПИСІВ * 32) + (БАЙТ_В_СЕКТОРІ - 1)) / (БАЙТ_В_СЕКТОРІ)

Для FAT32 результат дорівнює 0. Аби визначити кількість секторів, що займаються кластерами, слід взяти загальну кількість секторів у файловій системі і відняти з нього розмір зарезервованої області, розмір області FAT і розмір кореневого каталога. Іншими словами, ми віднімаємо адресу сектора для кластера 2 із загальної кількості секторів:

ВСЬОГО_СЕКТОРІВ - РОЗМІР_ЗАРЕЗЕРВОВАНОЇ_0БЛАСТІ -

КІЛЬКІСТЬ_FАТ * PОЗМІР_FAT - РОЗМІР_К0РЕНЕВОГО_КАТАЛОГУ

Нарешті, кількість секторів в області даних ділиться на кількість секторів в кластері. Якщо значення менше 4085, значить, використовується файлова система FAT12; якщо воно більше 4085, але менше 65525 — FAT16, і більше 65525 — FAT32. Ці значення відповідають максимальній кількості кластерів, які можуть зберігатися в FAT. Пригадаємо, що 8 значень зарезервовано для кінця файлу, 1 — для пошкоджених кластерів, а записи в позиціях 0 і 1 не використовуються.

При форматуванні тому в Windows користувачеві зазвичай пропонується вибрати між FAT16 і FAT32. Windows вибирає такий розмір кластера, аби підсумкове число кластерів вміщалося в попередньому діапазоні. Наприклад, при форматуванні системи в FAT16 можуть використовуватися 4-кілобайтні кластери, а в FAT32 — 2-кілобайтні.

Перевірка цілісності даних

При аналізі файлових систем буває корисно перевіряти цілісність даних, аби виявляти пошкоджені файлові системи і приховані дані. Для завантажувального сектора і інших структур даних в зарезервованої області файлової системи FAT перевірка цілісності повинна підтвердити, що певні значення належать покладеним діапазонам, а невикористовувані області передивитися на предмет ненульових даних. Наприклад, зарезервована область містить немало секторів, які не використовуються в деяких файлових системах. Якщо у файловій системі FAT32 доступна резервна копія завантажувального сектора, перевірка цілісності повинна порівняти дві копії і повідомити про будь-які розбіжності.

Основна і резервна копії FAT також перевіряються на співпадіння. Слід перевірити кожен запис, помічений як пошкоджений, тому що сучасні жорсткі диски зазвичай виправляють помилки ще до того, як їх відмітить операційна система. Втім, на дискетах присутність пошкоджених секторів сповна припустимо. В кожній копії FAT слід перевірити простір між записом FAT останнього кластера і кінцем секторів, виділених FAT, тому що цей простір не використовується файловою системою і може містити приховані дані. Між кінцем останнього кластера і кінцем файлової системи може існувати простір, що не має кластерної адреси.

Перевіримо кореневий каталог і всі його підкаталоги, перевіримо кожен ланцюг кластерів в FAT і переконаємося в тому, що на її початок посилається один із суттєвих записів каталогів. Також слід виконати зворотну перевірку і переконатися в тому, що виділені записи каталогів посилаються на виділені кластери. Якщо відразу декілька записів каталогів посилаються на один ланцюжок кластерів, Microsoft рекомендує скопіювати обидва файли в нове місце і видалити оригінали. Довжина ланцюжка кластерів має бути рівна кількості кластерів, необхідних для зберігання файлу даного розміру.

Записи каталогів зі встановленим атрибутом мітки тому не повинні мати початкового кластера, і у файловій системі повинен існувати лише один запис мітки тому. Порівняємо контрольні суми записів LFN з існуючим записом SFN. Якщо відповідний запис SFN знайти не вдалося, потрібно проаналізувати записи LFN. Можливо, вони з'явилися внаслідок системного збою або використання ОС без підтримки довгих імен файлів, але в них також можуть зберігатися приховані дані. Якщо запис каталога містить нульові або випадкові дані, а до і після нього знаходяться виділені записи, можливо, це результат роботи програми надійного видалення. Також варто перевірити, чи немає записів каталогів після нульового запису. Деякі ОС не відображають записи каталогів, наступні за нульовим записом.

Лекція 16 Структури даних FAT

Розглянемо детально структуру даних, закладених в основу FAT.

Завантажувальний сектор

Завантажувальний сектор знаходиться в першому секторі файлової системи FAT і містить основну частину даних, що відносяться до категорії файлової системи. FAT 12/16 і FA32 містять різні версії завантажувального сектора, хоча початкові 36 байт в них збігаються. Структура даних перших 36 байтів приведена в таблиці 16.1, а структури останніх байтів — в таблиці 16.2 і 16.3.

 

Таблиця 16.1 – Структура даних перших 36 байтів завантажувального сектора FAT

 

Діапазон Опис Необхідність
0-2 Асемблерна команда переходу до завантажувального коду Немає (окрім завантажувальних файлових систем)
3-10 Ім'я OEM в кодуванні ASCII Немає
11-12 Кількість байтів в секторі. Допустимі значення — 512, 1024, 2048 і 4096 Так
13-13 Кількість секторів в кластері (блоці даних). Допустимі значення задаються мірами 2, але розмір кластера не повинен перевищувати 32 Кбайт Так
14-15 Розмір зарезервованої області в секторах Так
16-16 Кількість копій FAT. Зазвичай в системі зберігаються дві копії, але, по документації Microsoft, для пристроїв малої ємкості допускається зберігання лише однієї копії Так
17-18 Максимальна кількість файлів в кореневому каталозі для FAT12 і FAT16. У FAT32 поле дорівнює 0, а в FAT16 воно зазвичай дорівнює 512 Так
19-20 16-розрядна кількість секторів у файловій системе. Якщо кількість секторів не може бути представлена 2-байтною величиною, пізніше в структурі даних слідує альтернативне 4-байтне поле (а 2-байтне поле має дорівнювати нулю) Так
21-21 Тип носія. Згідно документації Microsoft, для стаціонарних дисків використовується значення 0xf8, а для змінних— 0xf0 Немає
22-23 16-розрядний розмір (у секторах) кожної копії FAT в FAT12 і FAT16. У FAT32 поле дорівнює 0 Так
24-25 Кількість секторів в доріжці Немає
26-27 Кількість голівок Немає
28-31 Кількість секторів перед початком розділу[1] Немає
32-35 32-розрядна кількість секторів у файловій системі. Або це поле, або 16-розрядне поле (19-20) має дорівнювати 0 Так

 

Команда в першому полі завантажувального сектора (байти 0-2) повідомляє комп’ютеру, де знаходиться код, необхідний для завантаження операційної системи. Якщо файлова система не використовується для завантаження комп'ютера, це значення ігнорується, DOS і Windows вимагають, аби значення поля задавалося і для файлових систем, що не є завантажувальними, а в інших ОС (наприклад, Linux) така вимога відсутня.

Тип носія визначає, знаходиться файлова система на стаціонарному або змінному носієві, але в Microsoft Windows ігнорує це поле і використовує другу копію типа носія, що знаходиться в таблиці розміщення файлів.

Починаючи з байта 36, між структурами завантажувального сектора FAT12/FAT16 і FAT32 починаються розбіжності. У них збігається лише сигнатура 0x55 (байт 510) і 0хаа (байт 511). Звернемо увагу: ця ж сигнатура використовується в першому секторі таблиці розділів DOS. Структура останніх байтів завантажувального сектора FAT12 і FAT16 приведена в таблиці 16.2.

 

Таблиця 16.2 – Структура даних частини завантажувального сектора, що залишилася, в FAT12/16

 

Діапазон Опис Необхідність
0-35 Див. табл. 16.1 Так
36-36 Номер диска BIOS INT13H Немає
37-37 Не використовується Немає
38-38 Розширена сигнатура, яка показує, чи дійсні наступні три значення. Сигнатура дорівнює 0x29 Немає
39-42 Серійний номер тому; в деяких версіях Windows обчислюється на підставі дати і часу створення Немає
43-53 Мітка тому в кодуванні ASCII. Вибирається користувачем при створенні файлової системи Немає
54-61 Мітка типу файлової системи в кодуванні ASCII Стандартні значення — «FAT», «FAT12» і «FAT16», але жодне з них не є обов'язковим Немає
62-509 Не використовується Немає
510-511 Сигнатура (0хАА55) Немає

 

Структура останніх байтів завантажувального сектора FAT32 приведена в таблиці 16.3.

 

Таблиця 16.3 – Структура даних частини завантажувального сектора, що залишилася, в FAT32

Діапазон Опис Необхідність
0-35 Див. таблицю 2.1 Так
36-39 32-розрядний розмір однієї копії FAT (у секторах) Так
40-41 Режим оновлення декількох структур FAT. Якщо біт 7 рівний 1, активна лише одна копія FAT, індекс якої визначається розрядами 0-3. Інакше всі структури FAT є дзеркальними копіями один одного Так
42-43 Основний і додатковий номер версії Так
44-47 Кластер, в якому знаходиться кореневий каталог Так
48-49 Сектор, в якому знаходиться структура FSINFO Немає
50-51 Сектор, в якому знаходиться резервна копія завантажувального сектора (по замовчуванню 6) Немає
52-63 Зарезервовано Немає
64-64 Номер диска BIOS INT13H Немає
65-65 Не використовується Немає
66-66 Розширена сигнатура, яка показує, чи дійсні наступні три значення. Сигнатура дорівнює 0x29 Немає
67-70 Серійний номер тому; в деяких версіях Windows обчислюється на підставі дати і часу створення Немає
71-81 Мітка тому в кодуванні ASCII. Вибирається користувачем при створенні файлової системи Немає
82-89 Мітка типу файлової системи в кодуванні ASCII. Стандартне значення — «FAT32», але воно не є обов'язковим Немає
90-509 Не використовується Немає
510-511 Сигнатура (0хАА55) Немає

 

Основна відмінність між завантажувальними секторами FAT12/16 і FAT32 полягає в тому, що сектор FAT32 включає додаткові дані, які роблять файлову систему гнучкішою і покращують її масштабованість. Можливі різні стратегії оновлення структур FAT і створення резервних копій завантажувального сектора. Також існує поле версії, але, схоже, в продуктах Microsoft використовується лише одна версія.

Вміст діапазону 62-509 в FAT12/16 і 90-509 в FAT32 не має певного призначення. Зазвичай ці байти використовуються для зберігання завантажувального коду і повідомлень про помилки. В лістингу 16.1 представлено вигляд шістнадцяткового дампу першого сектора файлової системи FAT32 в системі Windows XP.

 

Лістинг 16.1 – Шістнадцятковий дамп першого сектора файлової системи FAT32 в системі Windows XP

# dcat -f fat-4.dd 0 | xxd

0000000: eb58 904d 5344 4f53 352e 3000 0202 2600.X.MSDOS5.0...&.

0000016:0200 0000 00f8 0000 3f00 4000 c089 0100........?.@.....

0000032:4023 0300 ld03 0000 0000 0000 0200 0000 @#..............

0000048:0100 0600 0000 0000 0000 0000 0200 0000................

0000064: 8000 2903 4619 4c4e 4f20 4e41 4d45 2020..).F.LN0 NAME

0000080:2020 4641 5433 3220 2020 33c9 8edl bcf4 FAT32 3.....

0000096:7b8e cl8e d9bd 007c 884e 028a 5640 b408 {......|.N..V@..

0000112:cdl3 7305 b9ff ff8a fl66 0fb6 c640 660f..s......f...@f.

0000128:b6dl 80e2 3ff7 e286 cdc0 ed06 4166 0fb7....?.......Af..

[...]

0000416:0000 0000 0000 0000 0000 0000 0d0a 5265..............Re

0000432:6d6f 7665 2064 6973 6b73 206f 7220 6f74 move disks or ot

0000448:6865 7220 6d65 6469 612e ff0d 0a44 6973 her media....Dis

0000464:6b20 6572 726f 72ff 0d0a 5072 6573 7320 k error...Press

0000480:616e 7920 6b65 7920 746f 2072 6573 7461 any key to resta

000496: 7274 0d0a 0000 0000 00ac cdb8 0000 55aa ке.............U.

 

В першому рядку видно мітку OEM «MSDOS5.0»; ймовірно, вона згенерувана в Windows 2000 або ХР. У системі використовується прямий порядок байтів, тому в числових полях байти переставляються, а байти строкових даних слідують в звичайному порядку. З байтів 11-12 ми дізнаємось, що кожен сектор займає 512 байт (0x0200), а байт 13 показує, що розмір кожного кластера в області даних складає 2 сектори, тобто 1024 байти. Згідно байтам 14-15, зарезервована область складається з 38 (0x0026) секторів, тому ми знаємо, що область FAT починається в секторі 38, а згідно байту 16 в системі зберігаються дві копії FAT. Байти 19-20 містять 16-розрядний розмір файлової системи; у даному прикладі він дорівнює 0. Це говорить про те, що розмір визначається 32-розрядним полем в байтах 32-35. З цього поля ми взнаємо, що розмір файлової системи складає 205 632 (0x00032340) сектори. Байти 28-31 показують, що перед початком файлової системи розташовуються 100800 (0x0001 89с0) секторів; можливо, вони були виділені в невеликий розділ. Наприклад, це може бути система з альтернативним завантаженням або розділ даних сплячого режиму для портативного комп'ютера. Для здобуття додаткової інформації слід проаналізувати таблицю розділів.

Образ відноситься до системи FAT32, тому після 36-го байта слід застосовувати відповідну структуру даних. Байти 36-39 показують, що розмір кожної копії FAT складає 797 (0x0000 031d) секторів, а оскільки ми знаємо, що в системі зберігаються дві копії FAT, загальний розмір області FAT складе 1594 сектори. Байти 48-49 показують, що інформація FSINFO зберігається в секторі 1, а байти 50-51 — що резервна копія завантажувального сектора знаходиться в секторі 6.

Серійний номер тому знаходиться в байтах 67-70, його значення дорівнює 0х4с194603. Мітка тому в байтах 71-81 є рядком «NO NAME» (з чотирма пропусками). Пізніше ми побачимо, що справжня мітка зберігається у іншому місці файлової системи. Мітка типу зберігається в байтах 82-89, в даній системі це рядок «FAT32» (плюс три пропуски). Байти 90-509 файловою системою не використовуються, але існуючі в них дані використовуються при спробі завантажити комп'ютер з цієї файлової системи. Байти 510 і 511 містять сигнатуру 0хАА55. Результат запуску утиліти fsstat з пакету TSK для цього образу наводився вище.

Як згадувалося вище, деякі версії Windows призначають серійний номер тому на підставі дати і часу створення файлової системи. Експерименти показали, що Windows 98 поступає саме так, але Windows XP діє по іншому алгоритму. У Windows 98 обчислення розбиваються на дві половини: старші і молодші 16 біт. Кожне поле дати, за винятком року, перетворюється в 1-байтове шістнадцяткове значення і поміщається у відповідну позицію формули. Рік представляється 2-байтним шістнадцятковим значенням. Процедура показана на рис. 16.1. Старші 16 біт утворюються складанням годин, хвилин і року, а молодші 16 біт — місяців, днів, секунд і десятих доль секунд. Тестовий образ файлової системи, який ми розглядували, був створений в системі Windows XP, і в ньому ці обчислення не використовуються.


[1] Тестування показало, що у файлових системах, що зберігаються в розширених розділах, Windows задає це значення по відношенню до початку розширеного розділу, а не на початок диска.

Структура FSINFO

Файлова система FAT32 містить структуру даних FSINFO. Інформація, що зберігається в цій структурі, використовується операційною системою при виділенні нових кластерів. Місцерозташування структури задається в завантажувальному секторі, а її будова описана в таблиці 16.4.

Жодне з цих значень не є обов'язковим. ОС може використовувати ці дані як додаткову інформацію, проте структура FSINFO може і не оновлюватися. В лістингу 16.2 наводиться вміст сектора 1 розглянутої вище файлової системи. Зсуви в байтах задаються відносно початки сектора.

 

Таблиця 16.4 – Структура даних сектора FAT32 FSINFO

 

Діапазон Опис Необхідність
0-3 Сигнатура (0x41615252) Немає
4-483 Не використовується Немає
484-487 Сигнатура (0x6147272) Немає
488-491 Кількість вільних кластерів Немає
492-495 Наступний вільний кластер Немає
496-507 Не використовується Немає
508-511 Сигнатура (0хАА550000) Немає

 

Лістинг 16.2 – Вміст сектора 1

# dcat -f fat fat-4.dd 1 | xxd

0000000: 5252 6141 0000 0000 0000 0000 0000 0000 RraA............

0000016: 0000 0000 0000 0000 0000 0000 0000 0000................

[...]

0000464: 0000 0000 0000 0000 0000 0000 0000 0000................

0000480: 0000 0000 7272 4161 le8e 0100 4b00 0000....rrAa....К...

0000496: 0000 0000 0000 0000 0000 0000 0000 55aa..............U.

 

Звернемо увагу на сигнатури в байтах 0-3, 484-487 і 508-511. Кількість вільних кластерів вказується в байтах 488-491; дана файлова система містить 101918 (0x00018е1е) вільних кластерів. Слід пам'ятати, що значення задаються в кластерах, а не в секторах. Наступний вільний кластер визначається байтами 492-495; у даному прикладі це кластер 75 (0x0000004b).

FAT

Таблиця FAT, що займає центральне місце у файловій системі FAT, виконує дві функції. Вона використовується для визначення стану виділення кластерів і для пошуку наступного виділеного кластера файлу або каталога. Опишемо, як знайти FAT і як виглядає ця таблиця.

Зазвичай у файловій системі FAT зберігаються дві копії FAT, але їх точна кількість вказується в завантажувальному секторі. Перша копія FAT починається після зарезервованих секторів, розмір яких вказується в завантажувальному секторі. Розмір кожної копії FAT також зберігається в завантажувальному секторі. Друга копія FAT (якщо вона існує) починається в наступному секторі за першою копією.

Таблиця складається із записів однакового розміру і не містить ні службових заголовків, ні завершувачів. Розмір кожного запису залежить від версії файлової системи. У FAT12 використовуються 12-розрядні, в FAT16 — 16-розрядні, а в FAT32 — 32-розрядні записи. Адресація записів починається з 0, і кожен запис відповідає кластеру з тією ж адресою.

Якщо кластер вільний, його запис дорівнює 0. Записи виділених кластерів відмінні від нуля і містять адресу наступного кластера у файлі або каталозі. Якщо кластер завершує ланцюжок файлу або каталога, в його записі міститься маркер кінця файлу; у FAT 12 це будь-яке значення більше 0xff8, в FAT 16 — 0xfff8, і в FAT32 — 0x0ffffff8. Якщи запис містить значення 0xff7 в FAT12, 0xfff7 в FAT16 або 0x0ffffff7 в FAT32, кластер помічений як пошкоджений і не повинен виділятися системою.

Пригадаємо, що адресація кластерів файлової системи починається з 2. Це означає, що записи 0 і 1 в структурі FAT не використовуються. Зазвичай в записі 0 зберігається копія типу носія, а в записі 1 — статус оновлення файлової системи. У завантажувальному секторі також присутнє поле для зберігання типу носія, але, як згадувалося раніше, система Windows може використовувати замість нього вміст запису 0 таблиць FAT. Статус оновлення може використовуватися для ідентифікації помилок демонтажу файлових систем (некоректне відключення) або апаратних помилок поверхні носія. Втім, обидва значення не є обов'язковим і може містити неточну інформацію.

Аби вивчити структуру FAT тестового образу, ми проглянемо вміст сектора 38 — першого сектора, наступного за зарезервованою областю:

 

Лістинг 16.3 – Вміст сектора 38

# cleat -f fat fat-4.dd 38 | xxd

[...]

0000288: 4900 0000 4a00 0000 4c00 0000 0000 0000 I...J...L.......

0000304: 4d00 0000 ffff ffOf 4f00 0000 ffff ffOf M.......0.......

0000320: 5100 0000 5200 0000 ffff ffOf ffff ffOf Q...R...........

0000336: ffff ff0f 0000 0000 0000 0000 0000 0000................

0000352: 0000 0000 0000 0000 0000 0000 0000 0000................

 

Результати були отримані у файловій системі FAT32, тому кожен запис займає 4 байти (два стовпці), а перша з показаних записів містить значення 73 (0x00000049). У структурі FAT вона зберігається із зсувом 288 байт; розділивши це число на 4 (розмір запису в байтах), ми визначимо, що це запис 72. Запис виділений, оскільки її значення відмінне від нуля, а наступним кластером в ланцюжку є кластер 73.

Записи в байтах 300-303 і 340-... дорівнюють нулю; це означає, що кластери, які відповідають цим записам, вільні. В даному прикладі байти 300-303 відповідають кластеру 75, а байти 340-... — записам 85 і так далі.

Для перевірки стану виділення кластера можна скористатися пакетом TSK, але при цьому доведеться виконувати перетворення між секторами і кластерами. У файловій системі з нашого прикладу кластер 2 відповідає сектору 1632, і кожен кластер займає 2 сектори. Кластер 75 перетвориться на адресу сектора по формулі

(кластер 75 - кластер 2) * 2 (секторів в кластері) + сектор 1632 = сектор 1778

Програма dstat з пакету TSK відображує стан виділення і адресу кластера для будь-якого сектора. Якщо запустити її для сектора 1778, буде отриманий наступний результат:

# dstat -f fat fat-4.dd 1778

Sector: 1778

Not Allocated Cluster: 75

Записи каталогів

В записах каталогів FAT зберігаються ім'я і метадані файлу або каталога. Ці записи створюються для кожного файлу або каталога в системі і зберігаються в кластерах, виділених батьківському каталогу файлу. Структура даних запису підтримує короткі імена за схемою 8 + 3 (8 символів імені, 3 символи розширення). Якщо файл має складніше ім'я, на додаток до звичайного запису каталога (SFN) створюються записи LFN (Long File Name). Версія запису каталога для довгих імен буде описана нижче. В таблиці 16.5 перераховані поля, що входять в базову структуру запису каталога.

 

Таблиця 16.5 – Структура даних базового запису каталога FAT

Діапазон Опис Необхідність
0-0 Перший символ імені файлу в кодуванні ASCII і стан виділення (0хе5 або 0x00, якщо запис не виділений) Так
1-10 Символи 2-11 імені файлу в кодуванні ASCII Так
11-11 Атрибути файлу (див. таблицю 16.6) Так
12-12 Зарезервовано Немає
13-13 Час створення (десяті долі секунди) Немає
14-15 Час створення (години, хвилини, секунди) Немає
16-17 День створення Немає
18-19 День останнього звернення Немає
20-21 Старші 2 байти адреси першого кластера (0 для FAT12 і FAT16) Так
22-23 Час останньої модифікації (години, хвилини, секунди) Немає
24-25 День останнього запису Немає
26-27 Молодші 2 байти адреси першого кластера Так
28-31 Розмір файлу (0 для каталогів) Так

 

Перший байт структури даних використовується як ознака виділення. Якщо він дорівнює 0хе5 або 0x00, значить, запис каталога вільний. В іншолму випадку байт містить перший символ імені файлу. Зазвичай імена файлів задаються в кодуванні ASCII, але вони також можуть містити символи національних алфавітів, для чого використовуються кодові сторінки Microsoft. Якщо в цьому байті імені файлу міститься символ 0хе5, замість нього використовується код 0x05. Якщо ім'я файлу коротше 8 символів, невживані байти зазвичай заповнюються ASCII-кодом пропуску 0x20.

Поле розміру файлу займає 4 байти, отже, максимальний розмір файлу рівний 4 Гбайт. В каталогів поле розміру дорівнює 0, і для визначення кількості виділених ним кластерів слід використовувати структуру FAT. Поле атрибутів містить один або декілька прапорів, перерахованих в таблиці 16.6.

 

Таблиця 16.6 – Прапори поля атрибутів в записі каталогу

Прапор Опис Необхідність
0000 0001 (0x01) Доступ лише для читання Немає
0000 0010 (0x02) Прихований файл Немає
0000 0100 (0x04) Системний файл Немає
0000 1000 (0x08) Мітка тому Так
0000 1111 (0x0f) Довге ім'я файлу Так
0001 0000 (0x10) Каталог Так
0010 0000 (0x20) Архівний файл Немає

 

Старші два біта в байті атрибутів зарезервовані. Записи каталогів із встановлени атрибутом довгого імені мають іншу структуру, яка буде описана в наступному розділі. Звернемо увагу: атрибут довгого імені представляє порозрядну комбінацію перших чотирьох атрибутів. Компанія Microsoft з'ясувала, що старі ОС ігнорують записи каталогів зі всіма встановленими бітами і введення нового атрибуту не створить проблем.

Компонент дати в тимчасових штампах є 16-розрядним значенням, що складається з трьох частин (рис. 16.2 (А)). Молодші 5 біт визначають день місяця (діапазон допустимих значень 1-31). Біти 5-8 визначають місяць (допустимі значення — 1-12). Біти 9-15 визначають рік; їх значення добавляється до 1980. Діапазон допустимих значень 0-127 дозволяє представляти роки з 1980 по 2107. Перетворення дати 1 квітня 2005 року в шістнадцятковий формат показаний на рис. 16.2 (В).

Час теж задається 16-розрядною величиною, що складається з трьох компонентів. П'ять молодших біт визначають секунди (вимірювані в 2-секундних інтервалах). Діапазон допустимих значень 0-29 дозволяє представити значення з діапазону 0-58 із двосекундними інтервалами. Наступні 6 біт визначають хвилини (допустимі значення — 0-59). Останні 5 біт визначає час (допустимі значення — 0-23). Структура поля часу продемонстрована на рис. 16.5 (А). Приклад перетворення часу 10:31:44 у формат FAT показаний на рис. 16.5 (В).

На щастя, багато службових програм перетворять ці значення автоматично, тому нам не доведеться займатися цим вручну. Багато шістнадцяткових редакторів відображують перетворену дату, якщо виділити значення і встановити відповідні параметри. Цей формат зберігання часу істотно відрізняється від інших систем, де час зберігається у вигляді кількості секунд, що пройли з деякого моменту.

Розглянемо низькорівневий вміст двох записів з кореневого каталога. Місцезнаходження кореневого каталога у файловій системі FAT32 задається в завантажувальному секторі.

 

Лістинг 16.4 – Задання місцезнаходження кореневого каталога

# cleat -f fat fat-4.dd 1632 | xxd

[...]

0000000: 4641 5420 4449 534b 2020 2008 0000 0000 FAT DISK.....

0000016: 0000 0000 0000 874d 252b 0000 0000 0000.......M%+......

0000032: 6245 5355 4d45 2d31 5254 4620 00a3 347e RESUME-1RTF..4~

0000048: 4a30 8830 0000 4a33 7830 0900 f121 0000.0.0.....0...!..

В перших двох рядках приведений запис каталогів, поле атрибутів якої в байті 11 містить двійкове значення 0000 1000 (0x08), що відповідає атрибуту мітки тому. Ми також бачимо, що час і дата останньої модифікації міститься в байтах 22-25 рядків 2. Час модифікації мітки тому може відповідати часу створення файлової системи. Звернемо увагу: мітка тому в завантажувальному секторі містить рядок «NO NAME».

Третій і четвертий рядки представляють другий запис каталога. Неважко побачити, що вона представляє файл «RESUME-1.RTF». Поле атрибутів в байті 43 містить значення 0000 0010 (0x20); встановлений лише біт архівного файлу. Байт 45 визначає десяті долі секунди в часі створення файлу, поле рівне 163 (0ха3). Байти 46-47 містять час створення 0х7е34, що відповідає 15:49:40. День створення в байтах 48-49 рівний 0x304а, тобто 10 лютого 2004. Вміст байтів 52-53 і 58-59 показує, що файл починається з кластера 9 (0x00000009), а байти 60-63 — розмір файлу складає 8689 байт (0x000021f1). Для здобуття списку всіх кластерів файлу слід звернутися до FAT. Кластер 9 містить 36-байтний зсув в структурі FAT32, тоді як раніше ми вже визначили, що основна копія FAT починається з сектора 38. Вміст цього сектора представленийв лістингу 16.4.

 

Лістинг 16.4 – Вміст кластера 9

# dcat -f fat fat-4.dd 38 | xxd

[...]

0000032: ffff ff0f 0a00 0000 0b00 0000 0c00 0000............

0000048: 0d00 0000 0e00 0000 0000 0f00 1000 0000............

0000064: 1100 0000 ffff ff0f 1300 0000 1400 0000............

 

Запис таблиці для кластера 9 знаходиться в байтах 36-39. Значення 10 (0x0000 000а) означає, що кластер 10 є наступним кластером в ланцюжку. Запис кластера 10 знаходиться в байтах 40-43, її значення дорівнює 11 (0x0000 000b). Ми бачимо, що файлу виділяється серія суміжних кластерів аж до запису 17 (байти 68-71), що містить маркер кінця файлу (0x0fff ffff). Можна переконатися в правильності кількості кластерів, порівнявши розмір файлу з виділеним простором. Файлу виділено дев'ять 1024-байтових кластерів; таким чином, для зберігання файлу з 8689 байт виділено 9216 байт дискового простору.

Тепер спробуємо проглянути ті ж дані з використанням TSK. Згадаємо, що в TSK замість адрес кластерів використовуються адреси секторів. Аби перетворити кластер 9 на адресу сектора, необхідно знати адресу сектора для кластера 2, який дорівнює 1632:

(кластер 9 - кластер 2) * 2 (секторів в кластері) + сектор 1632 = сектор 1646

Програма fsstat з пакету TSK виводить вміст структур FAT. Вихідні дані fsstat вже наводилися раніше при обговоренні категорії даних файлової системи, але вивід, що відноситься до FAT, не був показаний (лістинг 16.5).

 

Лістинг 16.5 – Вміст структур FAT

# fsstat -f fat fat-4.dd

[...]

1642-1645 (4) -> EOF

1646-1663 (18) -> EOF

1664-1681 (18) -> EOF

[...]

У вихідних даних fsstat видно ланцюжок кластерів файлу RESUME-1.RTF, яка складається з секторів 1646-1663 і завершується маркером кінця файлу. Розмір кожного кластера дорівнює 2 секторам; число в круглих дужках показує, що ланцюг складається із 18 секторів.

Програма istat з пакету TSK виводить детальну інформацію про записи каталогів; виведення цієї програми представлене в лістингу 16.6. Файл RESUME-1.RTF займає другий запис в кореневому каталозі, і згідно прийнятої в TSK схемі адресації метаданих йому відповідає адреса 4.

 

Лістинг 16.6 – Детальна інформація про записи каталогів

# istat -f fat fat-4.dd 4

Directory Entry: 4

Allocated

File Attributes: File, Archive

Size: 8689

Name: RESUME-1.RTF

 

Directory Entry Times:

Written: Wed Mar 24 06:26:20 2004

Accesses: Thu Apr 8 00:00:00 2004

Created: Tue Feb 10 15:49:40 2004

 

Sectors:

1646 1647 1648 1649 1650 1651 1652 1653

1654 1655 1656 1657 1658 1659 1660 1661

1662 1663

 

 



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 374; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.92.98 (0.009 с.)