Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

2.10 Восстановление файловой системы

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

  • некоторый блок может быть вне системы, т.е. не являться частью файла и не быть в списке свободных блоков;

  • могут появиться дубли i-узлов, т.е. описывать один и тот же файл дважды;

  • некоторый блок может одновременно быть частью файла и быть в списке свободных блоков;

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

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

Вот некоторые виды избыточности:

  • блок данных, являющийся каталогом, содержит имена файлов и номера i-узлов; где-то есть i-узел, соответствующий этому каталогу, и этот i-узел должен быть каталогом, а не обычным файлом;

  • блок, включенный в список свободных блоков, теоретически не может быть частью какого-либо файла; для проверки этого достаточно сканировать все i-узлы для просмотра всех блоков, занятых файлами, и сканировать список свободных блоков;

  • аналогично, блок, принадлежащий файлу, должен принадлежать только одному файлу; это легко проверить.

Эти и другие виды избыточности использует программа проверки файловой системы, запускаемая командой fsck (file system check)

Из примера видно, что fsck выполняется в несколько фаз.

На этих фазах производится следующая работа:

  • проверка целостности i-узлов (счетчик связи, тип и формат i-узла);

  • проверка каталогов, указывающих на i-узлы, содержащие ошибки;

  • проверка каталогов, на которые нет ссылок;

  • проверка счетчиков связей в каталогах и файлах;

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

После выполнения fsck, связанного с "починкой" файловой системы, может появиться сообщение: ***** BOOT UNIX (NO SYNC!) *****, требующее перезагрузки системы без выполнения команды sync.

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

2.11 Типы файловых систем unix

По предназначению файловые системы можно классифицировать на следующие категории:

  1. Физические файловые системы (так называемых disk-based) расположены в основной памяти и остаются там после выключения компьютера

    1. Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых системах применяется асинхронная запись изменений на диск. Для этого применяется либо журналирование, например в ext3, ReiserFS, JFS, NTFS, XFS, либо механизм soft_updates и др. Журналирование широко распространено в Linux, применяется в NTFS. Soft_updates - в BSD системах. Reiser4 не применяет журналирование, все операции в ней атомарны.

    2. Для носителей с последовательным доступом (например, магнитные ленты): QIC, fifofs - эта новая файловая система использует механизм VFS для и др.

    3. Для оптических носителей — CD и DVD: ISO9660, ISO9690, HFS, UDF и др.

  2. Виртуальные файловые системы расположенs в виртуальной памяти и существуют только на время активности операционной системы. Такими являются: /proc - файловая система организации процессов,

/pipefs – для организации программных каналов, bfs - загрузочная файловая система, предназначенная для быстрой и простой загрузки и поэтому представляет собой очень простую плоскую файловую систему, состоящую из одного каталога;

  1. Сетевые файловые системы: NFS, SMBFS, SSHFS, GmailFS и др.

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

Кроме перечисленных, существуют специфические файловые системы, разработанные коммерческими фирмами.

Кроме родных систем, UNIX поддерживают файловые системы FAT NTFS.

2.12 VFS

Для поддержки различных файловых систем UNIX предоставляет специальный интерфейс уровня ядра, который называется VFS (Virtual Filesystem Switch). Виртуальная файловая система VFS, расположенная как бы между приложениями и конкретными файловыми системами, позволяет пользовательским приложениям получать доступ к множеству файловых систем разных типов.

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

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

Рисунок 2.6 – Архитектура виртуальной файловой системы

VFS содержит набор функций, которые должна поддерживать любая файловая система. Функции управляют тремя типами объектов: файловые системы, индексные дескрипторы и открытые файлы.

VFS содержит информацию о всех типах поддерживаемых файловых систем в специальной таблице, которая создается во время компиляции ядра.

VFS оперирует тремя структурами, связанными к файлам

  1. vnode - (от virtual inode - виртуальный индексный дескриптор) - не зависящую от типа файловой системы. Vnode одинакова для всех файлов, независимо от типа реальной файловой системы и содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.

  2. inode - зависящую от типа файловой системы, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Формат inode на уровне VFS не определен, а используется только ссылка на нее в структуре vnode.

  3. дескриптор открытого файла. В то время как дескриптор inode содержит указатели к функциям, используемым по отношению к любому файлу (например, create или unlink), то дескриптор файлов содержит указатели к функциям, оперирующим только с открытыми файлами (например, read или write).

При необходимости копия inode создаётся в памяти. Если она была изменена, то содержимое дискового и "виртуального" inode синхронизируется. Старое содержимое inode на диске заменятеся теми данными, которые находятся в памяти. VFS склонна рассматривать копии inode в памяти как свои, а не как inode какой-либо другой системы.

Виртуальная файловая система VFS поддерживает следующие типы файлов:

  • обычные файлы,

  • каталоги,

  • специальные файлы,

  • именованные конвейеры,

  • символьные связи.