Введення у файлові системи, страница 36

Прапор HrdErrBitMask служить ознакою наявності збоїв при виконанні операцій вводу-виводу. У системі FAT16 він займає 14 двійковий розряд, а в системі FAT32 - розряд 26. При завантаженні операційної системи (точніше, у момент «монтування тому») HrdErrBitMask приймає значення 1, але у випадку виникнення збою при записі чи зчитуванні інформації прапор скидається в 0.

Визначення перших кластерів і використання елементів FAT розглянуто на прикладі файлів, які одержано при форматуванні гнучкої дискети з перенесенням на неї системних файлів за допомогою команди format.com a:/s. На дискету буде записано чотири файли: io.sys; msdos.sys; command.com та drfspace.bin.

Зв’язок кореневого каталогу з таблицею FAT представлено на рисунку 4.2. Файл io.sys  займає 435 кластерів по 512 байт і розміщений в кластерах з 2 по 436. Кореневий каталог вказує на початковий кластер 2, а в таблиці FAT у другому елементі вказано адрес слідуючого кластеру даного файлу. Послідовний ланцюг кластерів закінчується адресом 436, в якому знаходиться признак завершення ланцюга кластерів код FFFh.

Файл msdos.sys має об’єм всього 9 байт і розміщений в 437 кластері, який має признак закінчення ланцюга кластерів. Відповідним чином можна прослідкувати послідовність кластерів для файлів command.com та drfspace.bin.

Сектор завантажувального запису диску, отформованого в MS-DOS версій 4.0 і вище в поле зі зсувом 36h містить рядок довжиною 8 байт, що ідентифікує формат FAT і має вид "FAT12 " чи "FAT16 ". Це поле можливо використовувати для визначення формату FAT. У структурі BOOT це поле називається BS_FilSysType.

Рисунок 4.2 – Приклад розподілу кластерів для файлів io.sys; msdos.sys; command.com та drfspace.bin.

Звичайно FAT розташовується відразу після завантажувального сектору (логічний сектор з номером 1). Для точного визначення початкового сектору FAT варто прочитати в пам'ять завантажувальний сектор і проаналізувати вміст блоку параметрів BIOS. У полі BPB_RsvdSecCnt  записана кількість зарезервованих секторів, що розташовуються перед FAT. Поле BPB_FATSzl6 містить розмір FAT у секторах. Крім того, варто враховувати, що на диску може знаходитися кілька копій FAT. Операційна система використовує тільки першу копію, але обновляє також другу копію. Інші копії FAT потрібні для утиліт відновлення вмісту диску, таких як scandisk.exe .