ЗНАЕТЕ ЛИ ВЫ?

Особливості вилучення файлів



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

Зберігання довгих імен

До появи Windows 95 FAT надавала змогу використовувати тільки імена, що складаються з 11 значущих символів (8 — ім'я файла, 3 - розширення), при цьому вони зберігалися у відповідному елементі каталогу. Введення довгих імен призвело до того, що на додачу до традиційного імені (яке тепер називають «коротким іменем») у таких записах каталогу зберігають ім'я завдовжки до 255 символів фрагментами по 13 двобайтових Unicode-символів. При цьому коротке ім'я отримують із довгого шляхом додавання до перших 6 символів у верхньому регістрі суфікса ~1, ~2 і т. д., залежно від наявності таких імен до цього часу в каталозі. Для того щоб відрізнити фрагмент довгого імені від елемента каталогу, котрий відповідає файлу, для записів із фрагментами імені задають значення атрибутів OxOF, що як атрибут файла не може бути використане. Для відстеження відповідності між елементом каталогу і довгим іменем використовують поле контрольної суми.

Файлова система NTFS

Файлова система NTFS [14, 44, 69, 70] є основною файловою системою ОС лінії Windows XP. Головними її перевагами є надійність, високий ступінь захищеності та раціональне використання дискового простору.

 

Розміщення інформації на диску

Логічний розділ із розміщеною файловою системою у NTFS називають томом. Усі метадані (включаючи інформацію про структуру тому) зберігають у файлах на диску. Про ці файли докладніше розповімо нижче.

Розмір кластера задають під час високорівневого форматування розділу диска, і він може варіюватися від розміру сектора диска до 4 Кбайт. Кожному кластеру присвоюють логічний номер (Logical Cluster Number, LCN), який використовують у системі для ідентифікації кластера. Фізичний зсув на диску в цьому разі може бути отриманий множенням розміру кластера на LCN.

Загальна структура тому NTFS показана на рис. 4.4.

4.4

 

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

Файл для NTFS відображається складніше, ніж для файлових систем UNIX та сімейства FAT Він складається із набору атрибутів, причому кожний з них є незалежним потоком (stream) байтів, який можна створювати, вилучати, зчитувати і записувати. Деякі атрибути є стандартними для всіх файли, до них належать ім'я (FileName), версія (Version), стандартна інформація про файл, що включає час створення, час відновлення тощо (Standard Information). Інші атрибути залежать від призначення файла (наприклад, каталог включає як атрибут Index Root структуру даних, що містить список файлів цього каталогу). Є універсальний атрибут Data, що містить всі дані файла (потік даних). Для звичайних файлів він може бути єдиним із необов'язкових.

Важливою характеристикою NTFS є те, що файл може містити більш як один атрибутів Data, які розрізняють за іменами. У зв'язку з цим кажуть, що дозволена наявність кількох поіменованих потоків даних усередині файла [9].

За замовчуванням файл містить один потік даних, що не має імені. Для доступу до додаткових потоків використовують звичайні функції роботи із файлами (CreateFile(), WriteFile(), ReadFile() тощо), ім'я потоку при цьому записують через двокрапку після імені файла:

 

Зазначимо, що під час звертання до такого файла за іменем (myf і 1 е. txt) отримається доступ тільки до стандартного безіменного потоку. 3 іншого боку, у разі спроби перенести такий файл у файлову систему, що не підтримує кілька потоків усередині файла (наприклад, FAT), буде видано попередження про можливу втрату даних.

Головна таблиця файлів (MFT)

Кожний файл у NTFS описують одним або кількома записами в масиві, що зберігається у спеціальному файлі - головній таблиці файлів (Master File Table, MFT). Розмір такого запису залежить від розміру розділу і звичайно становить 2 Кбайт. Атрибути невеликого розміру (наприклад, ім'я файла), які зберігають у записі MFT безпосередньо, називаються резидентними атрибутами. Атрибути великого обсягу (наприклад, ті, що містять дані файла), зберігають на диску окремо - це нерезидентні атрибути. Розміщують такі дані екстентами (групами кластерів заданої довжини), при цьому покажчик на кожен екстент зберігають у записі MF1 (такий покажчик складається із трьох елементів: порядкового номера кластера на томі (LCN), номера кластера всередині файла (VCN) і довжини екстента). Максимальний розмір MFT становить 245 записів.

Можна виділити кілька способів зберігання фашгів залежно від їхнього розміру.

· Файли малого розміру можуть бути розміщені повністю в одному записі MFT і виділення додаткових екстентів не потребують.

· Файли більшого розміру потребують використання нерезидентних атрибутів зі зберіганням покажчиків на кожен екстент такого атрибута в атрибуті Data вихідного запису MFT.

· Файли із великим набором атрибутів або високою фрагментацією (коли атрибут Data не вміщує всіх покажчиків на екстенти) можуть потребувати для розміщення кілька записів MFT. Основний запис у цьому разі ще називають базовим записом файла (base file record), ініігі — загшсами переповнення (overflow records). Базовий запис файла містить список номерів записів переповнення в атрибуті Attribute List. Приклад такого зберігання інформації показано на рис. 4.5.

· У разі файлів надзвичайно великого розміру в базовому записі може бракува-ти місця для зберігання списку номерів записів переповнення, тому атрибут Attribute List можна зробити нерезидеитним.

4.5

 

Кожен файл на томі NTFS має унікальний ідентифікатор - файлове посилання (file reference). Розмір такого посилання становить 64 біти, з них 48 біт займає номер файла (індекс у MFT), a 16 біт - номер послідовності, який збільшують під час кожного нового задання елемента MFT i використовують для контролю несуперечливості файлової системи.

Ідентифікація файла за його номером у MFT подібна до індексованого розміщення файлів, при цьому MFT відіграє роль ділянки індексних дескрипторів. Однак, на відміну від індексних дескрипторів, записи MFT можуть безпосередньо містити дані файла.

Відображення каталогів

Каталоги у NTFS зберігають двома способами. Для невеликих каталогів зберігають лише список їхніх файлів, використовуючи для цього резидентний атрибут

Index Root. Коли каталог досягає певного розміру, з ним пов'язують спеціальну структуру даних — В+-дерево, основною властивістю якого є те, що шлях від кореня до будь-якого вузла завжди однієї довжини. Кожен елемент такого дерева містить відповідне файлове посилання, а також копії деяких атрибутів MFT (серед них ім'я файла, час доступу, розмір файла). Це зроблено для прискорення виконання операцій, які не вимагають доступу до даних файла, наприклад перелічення елементів каталогу.

Файли метаданих

Як зазначалося, усі метадані тому зберігають у спеціальних файлах. Першим із них ($Mft) є MFT (тобто як перший запис MFT містить посилання на себе), дру-гий ($MftMirr) містить резервну копію перших 16 записів MFT. Розглянемо деякі інші спеціальні файли.

·Файл журналу ($LogFiie) - містить інформацію про журнал файлової системи.

·Файл тому ($Volume) - містить ім'я тому, версію NTFS i біт, вмикання якого означає, що том, можливо, був ушкоджений і його потрібно перевірити під час завантаження.

·Таблиця визначення атрибутів ($AttrDef) - задає набір атрибутів тому і допустимих операцій над ними.

·Файл \ — відображає кореневий каталог.

·Файл бітової карти ($BitMap) - містить бітову карту кластерів диска з індикацією зайнятих кластерів.

·Файл $Boot - відображає завантажувальний сектор, розташований за адресою, де його може знайти завантажувач BIOS. (У ньому також зберігають адрес MFT.

·Файл зіпсованих кластерів ($BadClus) - відстежує зіпсовані кластери на диску. Система NTFS використовує технологію перерозподілу збійних кластерів, що дає змогу підставляти під час звертання до збійних кластерів дані коректних, приховуючи цим наявність проблем.

·Файл $Security - містить загальні атрибути безпеки.

Точки повторного аналізу

Починаючи із Windows 2000, у NTFS є можливість задавати точки повторного аналізу (reparse points) [70]. Така точка - це спеціальний файл, пов'язаний із блоком даних, що містить виконуваний код. Коли під час аналізу шляху до файла трапляється така точка, відбувається програмне переривання, що передає керування коду пов'язаного з нею блоку. Він зазвичай переносить подальший пошук на інший каталог або інший том - так можуть бути реалізовані зв'язки і монтування файлових систем.

Для монтування файлової системи із прикладної програми використовують функцію SetVolumeMountPoint():

BOOL SetVoluraeMountPointCLPCTSTR mount_point.LPCTSTR volume);

Тут mount_point — ім'я наявного каталогу (включаючи завершальний зворотний слеш), що стане точкою монтування, наприклад "c:\\diskl\\"; volume – унікальне ім'я, що ідентифікує том із файловою системою і має формат \\?\Volume{GUID}, де GUIO є унікальним 128-бітовим ідентифікатором, який широко застосовують у Windows-системах.

Для того щоб отримати унікальне ім'я тому за його символьним іменем (С:\ тощо), потрібно виконати такий код:

 

Для розмонтування потрібно використати функцію DeleteVolumeMountPoint(): DeleteVoluneMountPoint("D:\\diskl\\");

 

Стискання даних

Засоби стискання даних

Система NTFS може робити стискання як окремих файлів, так і всіх файлів у каталозі [4, 7]. Для цього дані файла розділяють на одиниці стискання, що є групами із 16 суміжних кластерів. Під час записування на диск кожної такої групи до неї застосовують алгоритм стискання. Якщо при його застосуванні було досягнуто виграш у дисковому просторі, після даних стиснутих 16 кластерів міститься посилання на екстент із нульовою адресою, яке означає, що попередні 16 кластерів були стиснуті. Якщо стиснути групу кластерів не вдалося, її зберігають на диску без змін. Коли необхідно прочитати файл, NTFS визначає всі стиснуті гру-пи (після яких є посилання на екстенти із нульовими адресами), дані цих екстентів зчитують і розпаковують у випереджувальному режимі. Зауважемо, що для довільного доступу до стиснутого файлу необхідно розпакувати всі дані від початку файла до позиції доступу, вибір 16 кластерів як одиниці стискання є спробою досягти в цьому разі компромісу між швидкістю доступу та ефективністю стискання. Функція GetFi I eSi ze() для таких файлів повертає розмір файлу без урахуван-ня стискання. Для того щоб дізнатися, скільки місця на диску займає стиснутий файл (тобто його розмір після стискання), необхідно скористатися функцією Get-CompressedFileSize():

 





Последнее изменение этой страницы: 2016-07-11; Нарушение авторского права страницы

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