точки монтування
Точки монтування (mount points) дозволяють пов'язувати томи через каталоги NTFS, роблячи ці томи доступними без призначення букв дисків. Наприклад, NTFS-каталог C: \ Projects може монтувати інший том (NTFS або FAT), що містить каталоги і файли ваших проектів. Якщо в томі ваших проектів є файл з ім'ям \ CurrentProject \ Description.txt, то після монтування шлях до нього виглядає як C: \ Projects \ CurrentProject \ Description.txt. Точки монтування стали можливі завдяки технології точок повторного розбору (reparse point technology), про яку ми детально поговоримо в главі 12.
Точка повторного розбору - це блок довільних даних з якимсь фіксованим заголовком, який Windows зіставляє з файлом або каталогом NTFS. Додаток або система визначає формат і поведінку точки повторного розбору, в тому числі значення унікального тега, який ідентифікує точку повторного розбору, що належить додатком або системі, і вказує розмір (до 16 Кб) і сенс даних цієї точки. Унікальні теги зберігаються в фіксованому сегменті точок повторного розбору. Будь-який додаток, що реалізує точку повторного розбору, має надавати драйвер фільтра файлової системи, який спостерігає за кодами повернення файлових операцій, пов'язаних з повторним розбором і виконуваних на томах NTFS, і вживає заходів, що відповідають цим кодам. NTFS повертає код статусу повторного розбору щоразу, коли обробляє файлову операцію стосовно файлу або каталогу, з яким зіставлено точка повторного розбору.
Драйвер файлової системи NTFS, диспетчер вводу-виводу і диспетчер об'єктів - кожен з них реалізує свою частину функціональності точок повторного розбору. Диспетчер об'єктів ініціює операції розбору шляхів файлів, взаємодіючи з драйверами файлових систем через диспетчер вводу-виводу, і повинен повторно ініціювати операції, для яких диспетчер вводу-виводу повертає код статусу повторного розбору. Диспетчер введення-виведення підтримує модифікацію шляхів, яка може знадобитися точкам монтування та інших точок повторного розбору, а драйвер файлової системи NTFS повинен пов'язувати дані точок повторного розбору з файлами і каталогами. Тому диспетчер вводу-виводу можна розглядати як драйвер фільтра файлової системи, який підтримує функціональність повторного розбору для багатьох точок, визначених Microsoft.
Якщо файл або каталог, для якого диспетчер вводу-виводу отримує від NTFS код статусу повторного розбору, що не підтверджено одній із зумовлених в Windows точок повторного розбору, значить, його точка не обробляється жодним драйвером фільтра. Тоді диспетчер вводу-виводу повідомляє диспетчеру об'єктів про помилку, яка передається з додатком, який звернувся до цього файлу або каталогу, у вигляді «file can not be accessed by the system» ( «файл недоступний системі»).
Точки монтування - це точки повторного розбору, в яких ім'я томи (\ Global ?? \ Volume) зберігається як дані повторного розбору. Призначаючи або видаляючи шляху для томів в оснащенні Disk Management, ви створюєте точки монтування. Створювати та переглядати точки монтування можна і за допомогою вбудованої утиліти командного рядка Mountvol.exe (\ Windows \ System32 \ Mountvol.exe).
Диспетчер монтування підтримує на кожному томі NTFS віддалену базу даних, в якій реєструє всі точки монтування, певні для томи. Файл цієї бази даних, $ MountMgrRemoteDatabase, розміщується в кореневому каталозі NTFS. При переміщенні диска між системами і в середовищах з двох варіантної завантаженням (різних систем Windows) переміщаються і точки монтування - завдяки наявності у віддаленій базі даних диспетчера монтування. NTFS відстежує точки монтування в файлі метаданих \ lExtend \ IReparse (жоден з файлів метаданих NTFS не доступний додатків). Оскільки NTFS зберігає інформацію про точках монтування в файлі метаданих, при відповідному запиті Windows-додатки Windows може легко перерахувати точки монтування, певні для томи.
ЕКСПЕРИМЕНТ: рекурсивні точки монтування
Цей експеримент з використанням утиліти Filemon демонструє цікаве поведінку системи, що викликається рекурсивної точкою монтування. Рекурсивної називається точка монтування, пов'язана з тим томом, де вона знаходиться. Рекурсивне перерахування каталогів, що виконується на рекурсивної точці монтування, дозволяє наочно побачити, як NTFS обробляє точки монтування.
1. Відкрийте вікно командного рядка або Windows Explorer і створіть на NTFS-диску каталог з ім'ям \ Recurse.
2. B оснащенні Disk Management (Управління дисками) консолі MMC клацніть тому правою кнопкою миші і виберіть з контекстного меню команду Change Drive Letter And Path (Змінити букву диска або шлях до диска).
3. B діалоговому вікні введіть шлях до створеного вами каталогу (наприклад, I: \ Recurse).
4. Запустіть Filemon. B меню Drives залиште галочку тільки для томи, на якому створена точка монтування.
Додаток перераховує каталоги на кожному рівні рекурсії, але всякий раз, коли зустрічає точку монтування, воно закопується все глибше і глибше, намагаючись виконати чергове перерахування каталогів. NTFS повертає код статусу повторного розбору, який сигналізує диспетчеру об'єктів про необхідність повернутися до попереднього рівня рекурсії і повторної спроби операції. Нарешті, повернувшись в кореневій каталог, додаток досліджує файл або каталог, знайдений ним при глибокій рекурсії. Додаток ніколи не отримує код статусу повторного розбору через те, що диспетчер об'єктів сам обробляє статусні коди повторного розбору при отриманні їх від NTFS.
Filemon показує запит на відкриття файлу або каталогу як IRP_ MJ_CREATE, запит на закриття файлу або каталогу - як IRP_MJ_CLOSE, а запит відомостей про каталогах - як IRP_MJ_DIRECTORY CONTROL, що виконується за допомогою функції FileBothDirectoryInfo (див. Колонку Other).
Щоб запобігти переповнення буферів і входження в нескінченний цикл, командний процесор і Windows Explorer зупиняють рекурсию після досягнення 32-го рівня вкладеності або при перевищенні довжини шляху в 256 символів - дивлячись що станеться швидше.