Усередині FAT: відновлення файлів

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

пошуку

Алгоритм пошуку та структура таблиці розділів FAT

У першій частині статті ми розглянули алгоритм пошуку та структуру таблиці розділів FAT. У системі FAT кожен файл і каталог має відповідний запис у файловій системі, так званий запис каталогу. Записи каталогу містять інформацію про файл, включаючи його назву, атрибути, початкову адресу та довжину.

Вміст файлу або каталогу зберігається в блоках даних однакової довжини. Ці блоки даних називаються кластерами. Кожен кластер містить певну кількість дискових секторів. Це число є фіксованим значенням для кожного обсягу FAT. Це записується у відповідній структурі файлової системи.

Хитра частина - це коли файл або каталог містить більше одного кластера. Наступні кластери ідентифікуються за допомогою структур даних, що називаються FAT (Таблиця розподілу файлів). Ці структури використовуються для ідентифікації наступних кластерів, що належать певному файлу, та для визначення того, зайнятий чи доступний певний кластер.

Перш ніж аналізувати файлову систему, важливо визначити три системні області.

  • Перша область зарезервована; він містить важливу інформацію про файлову систему. У FAT12 та FAT16 ця область займає один сектор. FAT32 може використовувати більше одного сектора. Розмір цієї області вказаний у завантажувальному секторі.
  • Друга область належить до системи FAT і містить первинні та вторинні структури файлової системи. Ця область відразу йде за зарезервованою. Його розмір визначається розміром та кількістю структур FAT.
  • Нарешті, остання область містить фактичні дані. Вміст файлів і каталогів зберігається саме в цій області.

При аналізі файлової системи основний інтерес представлятиме область FAT. Саме ця область містить інформацію про фізичні адреси файлів на диску.

Фігура 1. Фізична структура файлової системи FAT.

При аналізі файлової системи дуже важливо правильно визначити три системні області. Зарезервована область завжди починається з самого початку файлової системи (номер сектора 0). Розмір цієї області вказаний у завантажувальному секторі. У FAT12 та FAT16 розмір цієї області становить рівно один сектор. У FAT32 ця область може займати кілька секторів.

Область FAT відразу йде за зарезервованою областю. Область FAT містить одну або кілька структур FAT. Розмір цієї області обчислюється множенням кількості структур FAT на розмір кожної структури. Ці значення також зберігаються в завантажувальному секторі.

Відновлення файлів

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

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

На даний момент ми не можемо відновити весь список кластерів, що належать до видаленого файлу. Однак ми все ще можемо спробувати відновити вміст файлу, прочитавши перший кластер. Якщо файл досить невеликий і вміщується в єдиний кластер, чудово! Ми щойно відновили файл. Якщо, однак, файл більше розміру одного кластера, ми повинні розробити алгоритм відновлення решти файлу.

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

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

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

На рисунку 2 показано три різні сценарії відновлення файлу, що займає 6 кластерів файлової системи. Розмір файлу - 7094 байт; розмір кластера становить 2048 байт. Це означає, що видалений файл спочатку займав 4 кластери. Крім того, ми знаємо адресу початкового кластера (кластер 56). З метою демонстрації кластери, які раніше належали до видалених файлів, пофарбовані в синій колір. Червоний колір позначає кластери, зайняті іншими даними, а порожні кластери - білими.

Малюнок 2. Три сценарії відновлення файлів.

  • У сценарії 2.А, файл займає 4 наступні кластери (тобто файл не фрагментований). У цьому випадку файл можна відновити правильно за будь-яким алгоритмом. Обидва алгоритми будуть правильно читати кластери 56 - 59.
  • У сценарії 2.B, файл був фрагментований і зберігався у 3 фрагментах. Кластери 57 і 60 використовуються іншими файлами. У цьому випадку перший алгоритм відновить кластери 56 - 59, які повернуть пошкоджений файл. Другий метод дозволить правильно відновити кластери 56, 58, 59 і 61.
  • У фіналі сценарій 2.C, видалений файл також був фрагментований (ті самі кластери, що і в 2.B). Однак кластери 57 і 60 не використовуються жодним іншим файлом. У цьому випадку обидва алгоритми відновлять кластери з 56 по 59, обидва повертаючи пошкоджений файл.

Як бачимо, жоден із методів не є досконалим, проте другий алгоритм пропонує вищі шанси на успішне відновлення порівняно з першим. Цей метод використовується в Відновлення розділу гетьмана.

У нашому простому сценарії ми припустили, що всі частини файлу все ще доступні, а не перезаписані іншими даними. У реальному житті це не завжди так. Якщо деякі частини файлу беруться іншими файлами, жоден алгоритм не зможе повністю відновити файл.

Висновок

Як ми могли бачити, файлова система FAT досить проста. Саме з цієї причини він так широко використовується виробниками CompactFlash, Memory Stick та xD-Picture Card. Однак, що стосується відновлення даних, FAT - не найкраща файлова система. При певному рівні фрагментації деякі файли можуть бути відновлені або не відновлені незалежно від обраного підходу.

На щастя, Windows більше не використовує систему FAT для форматування внутрішніх жорстких дисків. Використання набагато новішої та досконалішої файлової системи, NTFS, застосовується під час форматування системного диска та настійно рекомендується при форматуванні інших розділів. NTFS - набагато складніша файлова система. Внутрішні органи NTFS будуть розглянуті в наступній статті.