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

Санкт-Петербургский  Государственный Университет 
 
 
 
 

КУРСОВАЯ РАБОТА

по дисциплине

«Безопасность операционных систем» 

На тему: Файловая система NTFS 
 
 
 

Научный руководитель:

____________________________

Выполнил  студент группы

________

____________________________

«___» _________________201__ 

Решение о допуске к защите:

____________________________

_____________________(подпись)

Дата  рецензирования

«___» _________________201__

Дата  защиты

«___» _________________201__

Оценка:

«___» _________________201__

Подпись:

«___» _________________201__ 

                                                                  
 
 
 

Санкт-Петербург 

2011

Оглавление

  1. Введение3
  2. Структура3
    1. Основа4
    2. MFT4
    3. Метафайлы6
    4. Файлы и каталоги7
    5. Атрибуты файла9
    6. Системные файлы11
  3. Конфиденциальность и сохранность данных12
    1. Журналирование13

    3.1.1. Отложенная  запись и контрольные точки  журналирования14

    3.1.2. Проблемы  отложенного журналирования: концепция дублирования информации15

    1. Сжатие16
    2. Безопасность17

    3.3.1. Допущения,  обеспечивающие надежность18

  1. Преимущества и недостатки20
  2. Надежность21
  3. Заключение22
  4. Список литературы23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  1. Введение

    Файловая система - это методы и структуры данных, которые используются операционной системой для хранения файлов на диске или его разделе. О файловой системе также упоминают, когда ссылаются на диск (или раздел диска), служащий для хранения файлов. Необходима файловая система для того, чтобы ОС имела возможность работать с данными на жестком диске.

    До  того как будет рассмотрено устройство и принцип работы файловой системы, важно определить, что такое кластер  и сектор и чем они друг от друга  отличаются.

    Сектор - минимальная единица пользовательских данных, которую могут использовать программы, работающие с жестким  диском напрямую, в обход операционной системы.

    Кластер - минимальная единица пользовательских данных, которую могут использовать программы, работающие с жестким  диском посредством операционной системы. И хотя размеры кластера и сектора  могут совпадать, это все же разные понятия.

     Файловая  система NTFS - одна из самых сложных и удачных из существующих на данный момент файловых систем.

     NTFS заменила использовавшуюся в  MS-DOS и Microsoft Windows файловую систему  FAT. NTFS поддерживает систему метаданных  и использует специализированные  структуры данных для хранения  информации о файлах для улучшения  производительности, надёжности и  эффективности использования дискового  пространства.

     NTFS разработана на основе файловой  системы HPFS (от англ. High Performance File System — высокопроизводительная файловая  система), создававшейся Microsoft совместно  с IBM для операционной системы  OS/2. Но, получив такие, несомненно, полезные новшества, как квотирование, журналируемость, разграничение  доступа и аудит, в значительной  степени утратила присущую прародительнице  (HPFS) весьма высокую производительность  файловых операций. 

  1. СТРУКТУРА NTFS

     Раздел NTFS, теоретически, может быть почти  какого угодно размера. Практически, максимальный размер раздела NTFS в данный момент ограничен  лишь размерами жестких дисков.

     Структура NTFS довольно проста, хотя и сложнее, чем в FAT. Каждый распределенный на томе сектор принадлежит некоторому файлу, даже метаданные — информация, описывающая саму файловую систему. NTFS основана на атрибутах и обрабатывает все файлы как объекты с набором атрибутов, определенных как системой, так и пользователем. Каждый файл на томе с NTFS представлен записью в главной файловой таблице (MFT — Master File Table), аналоге FAT. Записи в MFT сортируются по алфавиту, что позволяет использовать двоичный поиск, существенно ускоряющий работу файловой системы. Для еще большей оптимизации диспетчером кэша используется алгоритм отложенной записи, когда данные не пишутся сразу на диск, а хранятся в памяти до тех пор, пока нагрузка на процессор не уменьшиться, а затем сбрасываются на диск фоновым процессом. Однако подобная практика чревата нехорошими последствиями в случае отказа питания. Журналирование не спасет пользовательских данных, хотя и обеспечит целостность структуры файловой системы. Вот почему любой уважающий себя администратор не ставит сервер без ИБП (Источник Бесперебойного Питания). В итоге, согласно авторитетным тестам, по быстродействию FAT выигрывает только на небольших томах с небольшим количеством файлов, в остальных случаях пальма лидерства остается за NTFS.

    1. Основа  NTFS

    Базисом NTFS является главная таблица файлов (Master File Table, MFT). MFT изначально резервирует под себя одну восьмую часть раздела (примерно 12%). Если место на разделе заканчивается, MFT сокращается в два раза, освобождая для файлов пользователя свободное пространство. Процедура может повторяться несколько раз. При появлении незанятого места MFT снова резервирует под себя 12% от объема раздела, что приводит к нежелательному эффекту - фрагментации MFT. При этом эффективность работы с NTFS-диском падает. 

    1. MFT и его  структура (Главная файловая таблица)

     Каждый  файл на томе NTFS представлен записью  в специальном файле, называемом главной файловой таблицей (MFТ — master file table). NTFS резервирует первые 16 записей таблицы для специальной информации. Первая запись этой таблицы описывает непосредственно главную файловую таблицу; за ней следует зеркальная запись (mirror record) MFT. Если первая запись MFT разрушена, то NTFS читает вторую запись для отыскания зеркального файла MFT, первая запись которого идентична первой записи MFT. Местоположения сегментов данных MFT и зеркального файла MFT записаны в секторе начальной загрузки. Дубликат сектора начальной загрузки находится в логическом центре диска. Третья запись MFT — файл регистрации (log file); используется для восстановления файлов. Файл регистрации подробно описан в настоящей главе ниже. Семнадцатая и последующие записи главной файловой таблицы используются собственно файлами и каталогами (также рассматриваются как файлы NTFS) на томе. На рис. 1. показана упрощенная структура MFT. 

     

 

       Рис. 1. Организация главной файловой  таблицы 

     Главная файловая таблица отводит определенное количество пространства дтя каждой записи файла. Атрибуты файла записываются в распределенное пространство MFT. Небольшие файлы и каталоги (обычно до 1500 байт или меньше), типа файла, показанного на рис. 5.6, могут полностью содержать. внутри записи главной файловой таблицы.

     Подобный  подход обеспечивает очень быстрый  доступ к файлам. Рассмотрим. например, файловую систему FAT, которая использует таблицу размещения файлов, в которой перечисляются имена и адрес каждого файла. Элементы каталога FAT содержат индекс в таблице размещения файла. В случае, если 

Стандартная информация Имя файла или каталога Дескриптор безопасности Данные или указатель

     Рис. 2 Запись MFT для небольшого файла или каталога 

     необходимо  просмотреть содержимое файла, FAT сначала читает таблицу размещения файлов и убеждается в существовании файла. Далее FAT восстанавливает файл, ища цепочку распределенных блоков, относящихся к этому файлу. В NTFS поиск файла производится только для непосредственного его использования.

     Записи  каталога помещены внутри главной файловой таблицы так же, как записи файла. Вместо данных каталоги содержат индексную  информацию. Небольшие записи каталогов  находятся полностью внутри структуры  MFT. Большие каталоги организованы в B-tree, имея записи с указателями на внешние кластеры, содержащие элементы каталога, которые не могли быть записаны внутри структуры MFT. 

    1. Метафайлы

    Первые 16 файлов NTFS (метафайлы) носят служебный  характер. Каждый из них отвечает за какой-либо аспект работы системы. Преимущество настолько модульного подхода заключается  в поразительной гибкости - например, на FAT-е физическое повреждение в  самой области FAT фатально для функционирования всего диска, а NTFS может сместить, даже фрагментировать по диску, все  свои служебные области, обойдя любые  неисправности поверхности - кроме  первых 16 элементов MFT.

    Метафайлы находятся в корневом каталоге NTFS диска - они начинаются с символа имени \"$\", хотя получить какую-либо информацию о них стандартными средствами сложно. Любопытно, что и для этих файлов указан вполне реальный размер - можно узнать, например, сколько операционная система тратит на каталогизацию всего вашего диска, посмотрев размер файла $MFT. В следующей таблице приведены используемые в данный момент метафайлы и их назначение.

$MFT сам MFT
$MFTmirr копия первых 16 записей MFT, размещенная посередине диска
$LogFile файл поддержки  журналирования (см. ниже)
$Volume служебная информация - метка тома, версия файловой системы, т.д.
$AttrDef список стандартных  атрибутов файлов на томе
$. корневой каталог
$Bitmap карта свободного места тома
$Boot загрузочный сектор (если раздел загрузочный)
$Quota файл, в котором  записаны права пользователей на использование дискового пространства (начал работать лишь в NT5)
$Upcase файл - таблица  соответствия заглавных и прописных  букв в имен файлов на текущем томе. Нужен в основном потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных  символов, искать большие и малые  эквиваленты которых очень нетривиально.
    1. Файлы и каталоги

    В NTFS любой элемент является файлом, включая каталоги и главную таблицу  файлов. Элемент состоит из двух частей: обязательной записи о нем  в MFT и опциональных параметров, называемых потоками. Все данные файла представляют собой опциональные параметры (его  содержимое, версия, дата последней  модификации, автор и т. д.). Но наиболее известные файловые менеджеры дают пользователю информацию только об ограниченном и заранее определенном наборе потоков. А размер файла, показываемый пользователю, является объемом только одного потока, который, собственно, и представляет собой то, что мы привыкли традиционно  называть данными файла. Получается, что текстовый документ, состоящий  всего из нескольких страниц текста, может занимать не один гигабайт, скрытый  в другом потоке.

    Характерно  также, что файл, содержащий небольшие  по объему данные, может иметь только ссылку на запись в MFT. В этом случае данные хранятся в главной таблице  файлов вместе с информацией о  самом элементе. Грубо говоря, весь файл находится внутри MFT.

    Каталоги  в NTFS представляют собой ссылки на другие директории и файлы.

    Имя элемента данной файловой системы может  содержать до 255 символов в кодировке Unicode (количество возможных символов - 65 536). Данная кодировка, в частности, обеспечивает многоязычную поддержку.

    Есть  ли ограничения при создании логического  диска?

    Практически нет. Дело в том, что объем раздела NTFS теоретически не ограничен, так как  он может занимать до двух экзабайт (2 000 000 Гбайт). При этом логический диск может содержать до 224 файлов. А  кластер не зависит от объема раздела, и стандартом де-факто является объем  в 4 Кбайт.

    Понятие файла на NTFS включает в себя прежде всего, обязательный элемент - запись в MFT, ведь, как было сказано ранее, все файлы диска упоминаются в MFT. В этом месте хранится вся информация о файле, за исключением собственно данных. Имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд.

    Опциональный  элемент - потоки данных файла. Файл может не иметь данных - в таком случае на него не расходуется свободное место самого диска. Файл может иметь не очень большой размер. Тогда идет в ход довольно удачное решение: данные файла хранятся прямо в MFT, в оставшемся от основных данных месте в пределах одной записи MFT. Файлы, занимающие сотни байт, обычно не имеют своего \"физического\" воплощения в основной файловой области - все данные такого файла хранятся в одном месте - в MFT.

    Каждый файл на NTFS имеет несколько абстрактное строение - у него нет как таковых данных, а есть потоки (streams). Один из потоков и носит привычный нам смысл - данные файла. Но большинство атрибутов файла - тоже потоки! Таким образом, получается, что базовая сущность у файла только одна - номер в MFT, а всё остальное опционально. Данная абстракция может использоваться для создания довольно удобных вещей - например, файлу можно \"прилепить\" еще один поток, записав в него любые данные - например, информацию об авторе и содержании файла, как это сделано в Windows 2000 (самая правая закладка в свойствах файла, просматриваемых из проводника). Интересно, что эти дополнительные потоки не видны стандартными средствами: наблюдаемый размер файла - это лишь размер основного потока, который содержит традиционные данные. Можно, к примеру, иметь файл нулевой длины, при стирании которого освободится 1 Гбайт свободного места - просто потому, что какая-нибудь хитрая программа или технология прилепила в нему дополнительный поток (альтернативные данные) гигабайтового размера. Но на самом деле в текущий момент потоки практически не используются, так что опасаться подобных ситуаций не следует, хотя гипотетически они возможны.  

    Каталоги

    Каталог на NTFS представляет собой специфический  файл, хранящий ссылки на другие файлы  и каталоги, создавая иерархическое  строение данных на диске. Файл каталога поделен на блоки, каждый из которых  содержит имя файла, базовые атрибуты и ссылку на элемент MFT, который уже  предоставляет полную информацию об элементе каталога. Внутренняя структура  каталога представляет собой бинарное дерево. Вот что это означает: для поиска файла с данным именем в линейном каталоге, таком, например, как у FAT-а, операционной системе приходится просматривать все элементы каталога, пока она не найдет нужный. Бинарное же дерево располагает имена файлов таким образом, чтобы поиск файла осуществлялся более быстрым способом - с помощью получения двухзначных ответов на вопросы о положении файла. Вопрос, на который бинарное дерево способно дать ответ, таков: в какой группе, относительно данного элемента, находится искомое имя - выше или ниже? Мы начинаем с такого вопроса к среднему элементу, и каждый ответ сужает зону поиска в среднем в два раза. Файлы, скажем, просто отсортированы по алфавиту, и ответ на вопрос осуществляется очевидным способом - сравнением начальных букв. Область поиска, суженная в два раза, начинает исследоваться аналогичным образом, начиная опять же со среднего элемента.

    Вывод - для поиска одного файла среди 1000, например, FAT придется осуществить в  среднем 500 сравнений (наиболее вероятно, что файл будет найден на середине поиска), а системе на основе дерева - всего около 12-ти (2^10 = 1024). Экономия времени поиска налицо. Не стоит, однако думать, что в традиционных системах (FAT) всё так запущено: во-первых, поддержание  списка файлов в виде бинарного дерева довольно трудоемко, а во-вторых - даже FAT в исполнении современной системы (Windows2000 или Windows98) использует сходную  оптимизацию поиска. Это просто еще  один факт в вашу копилку знаний. Хочется также развеять распространенное заблуждение (которое я сам разделял совсем еще недавно) о том, что  добавлять файл в каталог в  виде дерева труднее, чем в линейный каталог: это достаточно сравнимые  по времени операции - дело в том, что для того, чтобы добавить файл в каталог, нужно сначала убедится, что файла с таким именем там  еще нет :) - и вот тут-то в линейной системе у нас будут трудности  с поиском файла, описанные выше, которые с лихвой компенсируют саму простоту добавления файла в каталог.

    Какую информацию можно получить, просто прочитав файл каталога? Ровно то, что  выдает команда dir. Для выполнения простейшей навигации по диску не нужно лазить в MFT за каждым файлом, надо лишь читать самую общую информацию о файлах из файлов каталогов. Главный каталог  диска - корневой - ничем не отличается об обычных каталогов, кроме специальной  ссылки на него из начала метафайла MFT.  

    1. Атрибуты  файла NTFS

     NTFS просматривает каждый файл (или  каталог) как набор атрибутов  файла. Такие элементы, как имя  файла, информация зашиты и  даже данные — все это атрибуты файла. Каждый атрибут идентифицирован кодом типа атрибута и, необязательно, именем атрибута.

     Если  атрибуты файла могут находится внутри записи файла MFT, они называются резидентными (resident) атрибутами. HanpHMqi, информация типа имени файла и отметки времени всегда включается в запись файла MFT. Если файл слишком большой, чтобы содержать все атрибуты в записи файла MFT, часть атрибутов является нерезидентной (nonresident). Нерезидентные атрибуты занимают один или несколько пробегов (run) дискового пространства в другом месте тома (пробег дискового пространства — непрерывная линейная область на диске).

     Вообще, все атрибуты могут быть вызваны  как поток бантов независимо от того, являются ли они резидентными или  нерезидентными.

     В табл. 1 представлен список всех атрибутов  файла, в настоящее время определенных для NTFS. Этот список расширяем, т. е. другие атрибуты файла в будущем могут  быть определены в случае необходимости. 

     Таблица 1. Атрибуты файла NTFS

Тип атрибута       Описание
Standard Information (стандартная информация) Включает бюджет связи и так далее
Attribute List (список атрибутов) Перечисляет все  другие атрибуты (только в больших  файлах)
Filename (имя файла) Атрибут, повторяющийся  для длинных и для коротких имен файлов Длинное имя файла  может содержать до 255 символов Unicode Короткое имя — доступно для MS-DOS, восемь плюс три символа, без учета регистра Дополнительные имена, или жесткие связи (hard links), используются POSIX и могут быть также включены в качестве дополнительных атрибутов имени файла
Security Descriptor (дескриптор безопасности) Фиксирует информацию о том, кто может обращаться к  файлу, кто является его владельцем и так далее
Data (данные) Содержит данные файла
Index Root (корень индексов) Используется  при работе с каталогами
Index Allocation (индексное размещение) Используется  при работе с каталогами
Volume Information (информация тома)       Используется  только в системном файле тома и включает в частности версию и имя тома
Bitmap (битовый массив) Предоставляет информацию об использовании записей  в MFT или каталоге
Extended Attribute Information (информация расширенного атрибута) Используется  файловыми серверами, которые связаны  с системами OS/2 Этот тип атрибута не используется Windows NT
Extended Attributes (расширенные атрибуты) Используется  файловыми серверами, которые связаны  с системами OS/2 Этот тип атрибута не используется Windows NT
 
 
    1. Системные файлы NTFS

     NTFS включает несколько системных  файлов, которые скрыты от просмотра  на томе. Системные файлы используются  только файловой системой для  хранения метаданных и поддержания  работы файловой системы. Системные  файлы записываются на том  утилитой Format. Список системных файлов NTFS представлен в табл. 5.2. 

     Таблица 2. Системные файлы NTFS

Системный файл Имя файла Описание
Master File Table

(главная файловая  таблица)

$Mft Список содержимого  тома NTFS
Master File Тablе2

(копия  главной файловой таблицы)

$MftMirr Зеркальное  отображение наиболее важных частей MFT, используется для гарантирования доступа к MFT в случае сбояодиночного сектора
Log File

(регистрационный  файл)

$LogFile Список шагов  транзакции, используемых Log File System для восстановления состо яния (recoverability)
Volume (том) $Volume Имя версия и  другая информация относительно тома
Attribute Definition

(определение  атрибутов)

$AttrDef Таблица имен атрибутов  номеров и дескрипторов
Root Filename Index (индекс корня файловых имен) $ Корневой каталог
Claster Bitmap

(битовый  массив кластеров)

$Bitmap Описание содержимого  тома, показывающее какие размещаемые  модули использованы
Boot File

(загрузочный  файл)

$Boot Содержит информацию начальной загрузки для тома если, том является загрузочным
Bad Cluster File

(файл плохих кластеров)

$BadClus Содержит указание положения плохих кластеров тома
  1. Конфиденциальность  и сохранность  данных

    Одним из важных преимуществ NTFS является разграничение  прав пользователей на файлы и  каталоги. Правильное применение этой возможности повысит стабильность системы. Стоит отметить, что разделение прав пользователей привязано к используемой операционной системе, и в другом семействе операционных систем права могут и не соблюдаться. В таком случае поможет шифрование.

    Возможность шифрования была введена в Windows 2000. Если вы опасаетесь за конфиденциальность своих данных, вы можете зашифровать  любой элемент файловой системы. Даже если ваш жесткий диск попадет  в руки людей, для которых информация не предназначалась, они не смогут ее извлечь. То есть, если выразиться корректно, они не будут иметь правомочного доступа к вашей информации. Взломать шифр, как известно, можно, и здесь уже вопрос лишь в том, насколько желанна ваша зашифрованная информация для взломщика.

    Однако  главное достоинство NTFS - журналирование и методы, которыми файловая система  проводит операции с данными. Любое  действие в разделе NTFS выполняется  транзакцией. Транзакция - это пакет  операций, который или выполняется  полностью или не выполняется  совсем, третьего не дано. Любое действие с данными записывается в журнал; из него в случае какого-либо сбоя в  дальнейшем можно узнать, какая транзакция не смогла успешно завершиться и  почему. Основные объекты NTFS ко всему  прочему зеркалируются, т. е. делается резервная копия загрузочной  записи и некоторых элементов MFT. Такая логика операций с данными  приводит к высокой стабильности файловой системы. Сбой во время дефрагментации, скорее всего, будет просто незаметен  для пользователя, в то время как  для FAT32 такая ошибка стала бы в  большинстве случаев фатальной.

    1. Журналирование NTFS

    Прежде  всего, мне хотелось бы рассказать о  том, какие именно операции журналируются. Совершенно очевидно, что полный undo-файл, способный откатить абсолютно все  операции, абсолютно невозможен как  с точки зрения быстродействия, так  и с точки зрения здравого смысла. Да, такое журналирование дало бы возможность  восстановить большее число данных - например, при осуществлении перезаписи трех мегабайт в середине файла мы могли бы сначала сохранить новые  данные в логе, затем переписать туда же предыдущие три мегабайта  файла, и уж только затем осуществлять операции с реальными данными. Такой  подход гарантировал бы полную определенность с судьбой информации - мы всегда смогли бы понять, какая часть данных уже записалась на диск, а какая  находится в исходном, не обновленном  состоянии. Он имеет всего один скромный недостаток - небольшая накладочка по быстродействию: для записи на диск трех мегабайт мы вынуждены будем  осуществить разнообразные дисковые операции на объем в три раза больший - девять мегабайт. Да, полное журналирование также применяется - но в основном при работе с базами данных. Если вы желаете обеспечить полное журналирование каких-либо данных, вы можете поставить MS SQL или даже Oracle, который вообще не будет пользоваться средствами какой  либо файловой системы и обеспечит  сохранность ваших данных в любых  разумных условиях.

    В NTFS применяется журналирование логических структур, а не данных пользователя - отсюда и идет фраза, что сохранность  данных не гарантируется, но, тем не менее, корректное состояние самой  системы будет поддерживаться. То, что NTFS не журналирует данные файлов, приводит на практике к одному варианту потери данных - в том же гипотетическом случае записи трех мегабайт, в случае сбоя в процессе записи никогда уже  не удастся установить, какая часть  данных записалась, а какая осталась неизменна. Операции, которые, тем не менее, журналируются системой - это  операции со структурами самой системы, то есть с файлами и каталогами: добавление файлов, переименование, перенос, создание и удаление (освобождение свободного места). Журналируются также  и операции дефрагментации - то есть перемещения фрагментов файлов. Одним  словом, все логические операции журналированы. 

      1. Отложенная  запись и контрольные точки журналирования

    Известно, что любая современная система  для ускорения файловых операций вынуждена использовать кэширование, в том числе - кэширование операций записи. Так называемая отложенная запись - принцип кэширования, при  котором данные, предназначенные  для записи на диск, некоторое время  сохраняются в КЭШе и лишь в  свободное от других занятий время  сохраняются физически. Отложенная запись существенно повышает эффективность  дисковых операций, так как такое  кэширование группирует множество  операций в одну - это особенно эффективно, если запись производится в компактные участки диска. Еще один плюс отложенной записи - не мешать более нужным операциям  чтения, и осуществлять запись только тогда, когда система свободна и  ей не требуется доступ к диску  для других нужд. Как согласовать  отложенную запись с журналированием? Это довольно сложный вопрос, так  как откладывание записи делает возможным  потерю тех данных, которые находились в очереди на физическую запись и  не успели записаться на диск до сбоя. Самое неприятное здесь даже не потеря данных, а то, что происходит рассогласование  времени записи: какие-то служебные  области могут быть обновлены, а  какие-то смежные по смыслу - еще  нет, так как их обновление могло  отложится еще на пару секунд и  не состоятся из-за сбоя.

    NTFS справляется с этими проблемами  с помощью смысловой интеграции  операций отложенной записи и  ведения журнала. При попытке  начать журналируемую операцию  в лог тут же записывается  намерение - например, стереть файл. Это случается без задержек - на  этом этапе отложенная запись  не работает: это плата за присутствие  журналирования, которой нельзя избежать. Но вот все остальные операции уже идут в задержанном режиме - то есть они могут состояться частично или не состоятся вообще. Единственная задержанная операция, работа которой несколько отличается от простой записи - запись в лог об удачном завершении предыдущих транзакций, так называемая контрольная точка. Через определенные промежутки времени - обычно через каждые несколько секунд - система в обязательном порядке сбрасывает абсолютно все задержанные операции на диск. После произведения этой операции в журнал записывается простейшая запись - контрольная точка, - которая говорит о том, что все предыдущие операции выполнены корректно на всех уровнях - как на логическом, так и на физическом.