Россия |
Файловые системы и функции
Вы можете выбирать между тремя файловыми системами для дисковых разделов на компьютере, работающем под управлением Windows Server 2003: FAT, FAT32 и NTFS. В данной лекции рассматриваются эти файловые системы, а также некоторые возможности, доступные в NTFS.
FAT and FAT32
FAT (File Allocation Table) – это таблица ссылок, которые содержат информацию о блоках данных, образующих файл. Первая файловая система FAT (где использовались 12-битные записи) появилась в DOS. Первая версия DOS (1.0) не поддерживала поддиректории, но по мере расширения возможностей DOS изменялась соответствующим образом и файловая система FAT. Например, в DOS 4.0 записи FAT были увеличены до 16 битов, чтобы можно было работать с разделами, превышающими 32 Мб.
Таблица FAT находится на диске вместе с дубликатом FAT, что является попыткой поддержки отказоустойчивости (однако поврежденную FAT редко удается восстановить). Система содержит также секцию корневой директории, имеющую фиксированный размер, что ограничивает количество файлов, которые можно разместить в корневой директории.
FAT содержит записи для имен файлов и атрибутов файлов, таких как размер, байт атрибутов (8-битная запись для такой информации, как hidden, read-only и т.д.), время/дату последнего изменения (16-битные записи) и начальный блок размещения, который является указателем на запись файла в FAT. Если файл не является непрерывным (фрагментирован), то имеются записи FAT, указывающие на каждый блок размещения для этого файла. Эту последовательность называют цепочкой. Последняя запись (запись для "конца файла") содержит шестнадцатеричный код FFFF, указывающий, что это конец цепочки. При загрузке или сохранении файла операционная система использует цепочку для отслеживания местоположения фрагментов файла. По мере роста длины цепочек (диск сильно фрагментирован) производительность диска падает.
Сами файлы хранятся в виде кластеров, размер которых зависит от размера диска. Размер самой таблицы FAT фиксирован, поэтому для работы с большими дисками размер кластеров увеличивается. Кластер может иметь размер 2048, 4096 или 8192 байтов. 16-битная длина записей FAT ограничила размер жестких дисков пределом 128 Мб (при размере кластеров 2048 байтов). Теоретически FAT мог бы поддерживать диск 512 Мб, но при размере кластеров 8192 байта, что крайне неэффективно. Начиная с DOS 5.0, была введена поддержка разделов до 2 Гб за счет создания таблиц FAT для каждого дискового раздела (до четырех разделов).
FAT32, то есть таблица, содержащая 32-битные записи, была введена в Windows 95 OSR2. Это позволило добавить ряд возможностей к файловой системе FAT.
- Было снято ограничение на размер раздела в 32 Гб.
- Корневая директория размещается не в фиксированной позиции и может быть перемещена.
- Нет ограничения на количество записей, которые могут быть помещены в корневую директорию.
- Резервные копии FAT позволяет реально восстанавливаться после аварий.
- FAT32 позволяет иметь намного больше кластеров при размере кластера 4096 байтов даже для больших дисков.
FAT32 также позволила работать с именами файлов, длина которых больше предыдущего предела 8.3. Поддержка длинных имен файлов стала, пожалуй, наиболее заметной и наиболее ценной функцией. Microsoft применила для работы с длинными именами файлов в Windows 95 виртуальную таблицу распределения файлов VFAT (Virtual File Allocation Table) – 32-битную утилиту, которая работала в защищенном режиме. На самом деле Microsoft называет расширение VFAT драйвером, поскольку он устанавливается и предполагается, что его можно установить в любой операционной системе.
NTFS
В Windows Server 2003 используется система NTFS, которая впервые появилась в Windows 2000 (иногда ее называют NTFS 5). Эта файловая система содержит встроенную поддержку множества средств, которые помогают управлять доменами, пользовательскими учетными записями и средствами безопасности. Данная система NTFS отличается от NTFS, используемой в Windows NT 4. Средства, которые поддерживает NTFS 5, являются частью структуры Windows Server 2003 (и Windows 2000), включая (но не ограничиваясь) следующим.
- Active Directory.Содержит все объекты операционной системы, разрешая или запрещая доступ с помощью полномочий. Описание Active Directory см. в "Описание Active Directory" .
- Дисковые квоты.Ограничивают использование дискового пространства на уровне пользователя или группы. Подробнее о дисковых квотах см. в "Управление файлами и дисками" .
- Шифрование. Обеспечивает автоматическое шифрование и дешифрование данных файла при записи или чтении файла. Информацию по использованию шифрующей файловой системы EFS (Encrypting File System) см. в "Безопасность Windows Server 2003" .
- DFS (Distributed File System – Распределенная файловая система).Позволяет вам использовать одно дерево папок, охватывающее несколько серверов и разделяемых ресурсов. Подробнее о настройке и поддержке DFS см. в "Управление файлами и дисками" .
Кроме мощных средств и возможностей, упрощающих для администраторов управление предприятием, NTFS имеет важную и удобную для пользователей возможность – внесение изменений в значок документа при изменении его местоположения. Эта функция, о которой даже не знают некоторые администраторы, очень удобна для пользователей, которые поддерживают значки для часто используемых документов. Например, я держу в моей панели Quick Launch (Быстрый запуск) значки документов, над которыми работаю длительное время (например, главы книг). Эти значки создаются и удаляются по мере необходимости. Кроме того, я держу значок для любого документа, которому требуется постоянное обновление, например, документ, где я держу пароли для доступа к веб-сайтам.
В диалоговом окне Properties (Свойства) для значка документа представлен путь к этому документу. Если переместить документ в другую папку и затем щелкнуть на его значке, то откроется именно этот документ. При следующем входе в диалоговое окно Properties вы увидите, что путь к этому документу изменен соответствующим образом.
Главная таблица файлов (Master File Table) NTFS
Вместо таблицы FAT (File Allocation Table) NTFS использует специальный файл, который называется Master File Table (MFT), позволяющий отслеживать все файлы и папки на томе. MFT имеет переменный размер, и она автоматически расширяется по мере необходимости. Фактически MFT является массивом записей, который вы можете рассматривать как базу данных по всем файлам системы.
Каждая запись MFT обычно имеет фиксированный размер 1 Kб, и первые 16 записей содержат информацию о данном томе. Эти относящиеся к тому записи называются файлами метаданных (эта терминология используется для структур служебной информации в файловой системе).
Обычно одна запись в MFT соответствует одному файлу или папке в этой файловой системе. Запись содержит атрибуты файла, включая такие элементы, как readonly (доступ только по чтению) и флаги архивации, даты создания и последнего доступа, имя файла и дескриптор безопасности.
Более существенным отличием от FAT является то, что сами данные файла являются просто еще одним атрибутом NTFS. Имеется ограничение на количество данных, которые можно поместить в запись MFT, и все, что превышает этот предел, заменяется в записи указателями на местоположение данных этого файла на диске. Запись MFT может содержать примерно 750 байтов данных файла (точное количество зависит от количества атрибутов, хранящихся в записи MFT). Небольшие файлы данных (меньше 750 байтов) могут умещаться целиком в своих записях MFT, чтобы дает невероятно высокую производительность без какого-либо риска фрагментации этих файлов.
Хотя бы одна запись таблицы MFT имеется для каждого файла на томе NTFS, включая файл самой MFT и другие файлы метаданных, такие как файл журнала, карта сбойных кластеров и корневая папка.
Конечно, большинство файлов не могут уместиться непосредственно в своих записях MFT, поэтому MFT сохраняет их данные на диске. Единицей размещения файлов в NTFS являются кластеры, которые указываются двумя способами:
- VCN (Virtual Cluster Numbers – Виртуальные номера кластеров) от 0 до n-1, где n – количество кластеров в файле;
- LCN (Logical Cluster Numbers – Логические номера кластеров), соответствующие номерам кластеров на томе.
VCN аналогичен смещению в файле, которое запрашивается приложением. Приложение использует в файле определенный формат данных, и оно рассчитывает с помощью этого формата смещение в байтах относительно логического формата этого файла. Когда приложению требуется чтение или запись по определенному адресу в файле, NTFS делит это число на размер кластера, чтобы определить VCN для чтения или записи.
LCN – это индекс (указатель) кластеров на томе, и когда требуется чтение или запись, NTFS использует LCN для расчета адреса на диске. При этом расчете LCN умножается на количество секторов в кластере, после чего происходит чтение или запись секторов, начиная с этого адреса на диске. Связывая номера VCN с их LCN, система NTFS связывает логическую адресацию файла с физическим местоположением на диске.
Если какой-либо атрибут не умещается в записи MFT, то NTFS сохраняет его в новом, отдельном наборе кластеров на диске, который называется непрерывной областью, или экстентом. Обычно атрибут, представляющий данные файла, слишком велик, чтобы уместиться в записи MFT. Однако и другие атрибуты могут оказаться достаточно большими, чтобы образовать новые экстенты. Например, длинные имена файлов могут содержать до 255 символов, каждый из которых занимает 2 байта (поскольку имена файлов хранятся в кодировке Unicode).
Атрибут, который хранится в самой записи MFT, называется резидентным атрибутом. Если атрибут вытесняется в экстент, то он называется нерезидентным атрибутом. Это означает, что если пользователи не создают все время очень короткие файлы с короткими именами, то большинство файлов на томе имеют данные, которые соответствуют нерезидентному атрибуту.
Если экстент требуется увеличить (обычно потому, что пользователь добавляет данные к файлу, который уже имеет большие размеры), то NTFS пытается выделить физически смежные кластеры для того же экстента. Если не удается выделить непрерывное пространство достаточного размера, то NTFS создает новый экстент где-либо на диске, разделяя файл на два фрагмента. Если новый экстент тоже не может обеспечить достаточный размер непрерывного пространства, то добавляется еще один экстент. Заголовок атрибутов данных (который хранится в записи MFT) содержит эту информацию в форме номеров LCN и длин экстентов, а NTFS использует эту информацию для поиска экстентов.
В некоторых случаях (обычно при крайне большом количестве атрибутов) система NTFS вынуждена выделить дополнительную запись MFT для данного файла. В этом случае NTFS создает атрибут, который называется списком атрибутов и действует как индекс (указатель) для всех атрибутов данного файла. Хотя это необычная ситуация, присутствие дополнительных записей MFT может существенно снизить производительность работы с соответствующими файлами.
Папки (директории) обрабатываются в NTFS почти так же, как файлы. Если папка достаточно мала, то индекс для файлов, на которые указывает эта папка, может уместиться в записи MFT. Эта информация является атрибутом, который называется Index Root (Корень индекса).
Если в папке (индексе) имеется больше элементов, чем может уместиться в записи MFT, то NTFS создает новый экстент с нерезидентным атрибутом, который называется буфером индекса. Для таких папок буферы индексов содержат то, что называется деревом b+, которое является структурой данных, предназначенной для минимизации количества сравнений, необходимых для поиска определенного файла.
В дереве b+ хранится информация (или указатели на информацию) в отсортированном порядке. Запрос отсортированного списка элементов папки выполняется быстро, поскольку это порядок хранения в буфере индекса. Поиск определенного элемента тоже выполняется быстро, поскольку эти деревья больше разрастаются "вширь", чем "вглубь", что сводит к минимуму количество попыток доступа, необходимых для достижения определенной точки дерева.
Фрагментация NTFS
Все разговоры о том, что NTFS препятствует фрагментации, неверны. Сами системы Windows Server 2003, Windows 2000 и Windows NT намного лучше в выделении дискового пространства для файлов, чем более ранние версии Windows (и DOS), и, в результате, эти системы менее подвержены фрагментации файлов.
Однако NTFS не защищена от источников, вызывающих фрагментацию отдельных файлов, и со временем файлы на томе NTFS становятся фрагментированными. Кроме того, побочным эффектом того, что операционная система пытается воспрепятствовать фрагментации файлов, становится фрагментация свободного пространства на диске.
Форматируя том с помощью NTFS, вы можете выбрать размер кластеров. В Windows NT предлагается размер кластеров по умолчанию, основанный на размере данного тома, но если вы знаете, каким образом будет использоваться данный том, то можете выбрать наиболее подходящий для этого использования размер кластеров. Но вы должны быть очень осторожны, выбирая размер, отличный от размера по умолчанию. При выборе меньшего размера кластеров будут меньше потери пространства на диске, но это вызовет, скорее всего, фрагментацию файлов. При большем размере кластеров вероятность фрагментации будет меньше, но будут больше потери пространства на диске.
Если файл или папка занимает непрерывную область, то размер кластера не имеет значения (если вас не волнует потеря небольшой доли пространства на диске). Если вы знаете, что том будет содержать очень большое число небольших файлов, или предполагаете, что почти все файлы будут очень большими, то вы обладаете информацией, которую можете использовать для выбора наиболее подходящего размера кластеров. Кроме того, при очень большом общем числе файлов (порядка 100000) фрагментация MFT становится более вероятной. В этом случае больший размер кластеров ограничит фрагментацию в таблице MFT, поскольку она увеличивается, чтобы вместить все файлы.
Важно отметить, что существуют отличия в фрагментации на различных уровнях хранения данных. Отдельные приложения, такие как Microsoft Office, и серверы баз данных, такие как Oracle, имеют проблемы фрагментации в рамках их собственного хранилища данных. Эти проблемы возникают независимо от файловой системы или операционной системы.
NTFS не имеет сведений о логической организации пользовательских данных. Независимо от местоположения файла на диске и его фрагментированности файловая система представляет его приложениям как одну непрерывную область хранения. Но приложение интерпретирует данные файла как логическую структуру. Для программы почтовой рассылки файл – это группа фамилий, имен, адресов и т.д. Для NTFS это просто группа кластеров данных.
Приложения, имея собственную организацию данных, могут создавать неиспользуемые промежутки в данных, что фактически фрагментирует эти данные. Как и в файловой системе, удаление данных в приложении не обязательно является их фактическим удалением; эти данные только маркируются как удаленные. Появление промежутков в логическом хранилище данных называют внутренней фрагментацией. Чтобы избежать внутренней фрагментации данных, в некоторые приложения, такие как Microsoft Access, включаются утилиты сжатия данных в файле, то есть фактически происходит дефрагментация внутреннего файла. К сожалению, эти утилиты сжатия часто увеличивают степень фрагментированности на уровне файловой системы, поскольку они обычно создают совершенно новую копию этого файла, используя большие объемы пространства на диске в этом процессе. Таким образом, частая дефрагментация ваших файлов данных может увеличить степень фрагментированности вашей файловой системы.
Приложения часто создают временные файлы, которые занимают определенное пространство, когда пользователь работает с этим ПО, открывая и сохраняя файлы. При закрытии приложения временные файлы удаляются, оставляя после себя пустое выделявшееся пространство. Файлы данных могут также иметь занятое, но неиспользуемое пространство, поскольку программы занимают такое пространство для своих организационных целей или для повышения производительности. Кроме того, отдельные файлы, связанные с каким-либо приложением, со временем могут оказаться физически разбросанными по всему диску. Этот тип фрагментации, известной также под названием фрагментации использования, представляет особенно сложную проблему для программы дефрагментации, поскольку обычные методы анализа фрагментации могут не выявить ее.
Фрагментация и дефрагментация папок (директорий) происходит аналогично файлам. Дело в том, что для NTFS папка – это еще один файл, хотя папки имеют особые типы атрибутов в своих записях MFT. В то время как приложения управляют содержимым файлов данных, NTFS управляет содержимым папок, то есть деревьями b+, которые обеспечивают индексированный доступ к файлам, содержащимся в папках.
Папки, содержащие программные файлы, мало увеличиваются или уменьшаются в течение периода их использования. Но папки пользовательских документов и системная папка TEMP изменяют свои размеры весьма существенно. По мере роста числа файлов в папке NTFS может реагировать на этот рост путем увеличения пространства хранения папки. Если содержимое папки становится меньше, то NTFS может также освобождать неиспользуемое пространство в папке, но это происходит не всегда, поскольку является достаточно сложной операцией. Папки, которые, скорее всего, будут расти или сжиматься, создаются обычно на стадии конфигурирования системы (например, папки My Documents и TEMP). Эти папки разрастаются, занимая, скорее всего, область, которая не является непрерывной. Поскольку такие папки интенсивно используются, их фрагментация оказывает реальное влияние на производительность компьютера.
Что касается производительности, то вам следует знать, что большая вложенность папок может быть удобной с организационной точки зрения, но за это вы платите снижением производительности. Когда NTFS выполняет поиск данных в своих деревьях b+, то она проходит с самого начала через все уровни поддерева данной папки. Поэтому производительность для деревьев с меньшей вложенностью, имеющих большее число файлов, будет выше, чем для деревьев с большей вложенностью и меньшим числом файлов. Поддеревья с очень большими уровнями вложенности могут также представлять проблемы для приложений, которые имеют ограничение на общее число символов в полном пути к файлу (обычно это предел в 255 символов).