Что такое монтирование файловой системы
Так же как файл должен быть открыт перед использованием, и файловая система , хранящаяся на разделе диска, должна быть смонтирована, чтобы стать доступной процессам системы.
Функция mount (монтировать) связывает файловую систему из указанного раздела на диске с существующей иерархией файловых систем, а функция umount (демонтировать) выключает файловую систему из иерархии. Функция mount , таким образом, дает пользователям возможность обращаться к данным в дисковом разделе как к файловой системе, а не как к последовательности дисковых блоков.
Процедура монтирования состоит в следующем. Пользователь (в Unix это суперпользователь) сообщает ОС имя устройства и место в файловой структуре (имя пустого каталога), куда нужно присоединить файловую систему (точка монтирования ) (см. рис. 12.9 и рис. 12.10). Hапример, в ОС Unix библиотечный вызов mount имеет вид:
где special pathname - имя специального файла устройства (в общем случае имя раздела), соответствующего дисковому разделу с монтируемой файловой системой, directory pathname - каталог в существующей иерархии, где будет монтироваться файловая система (другими словами, точка или место монтирования ), а options указывает, следует ли монтировать файловую систему "только для чтения" (при этом не будут выполняться такие функции, как write и create , которые производят запись в файловую систему). Затем ОС должна убедиться, что устройство содержит действительную файловую систему ожидаемого формата с суперблоком , списком индексов и корневым индексом.
Некоторые ОС осуществляют монтирование автоматически, как только встретят диск в первый раз (жесткие диски на этапе загрузки, гибкие - когда они вставлены в дисковод), ОС ищет файловую систему на устройстве. Если файловая система на устройстве имеется, она монтируется на корневом уровне, при этом к цепочке имен абсолютного имени файла ( pathname ) добавляется буква раздела.
Ядро поддерживает таблицу монтирования с записями о каждой смонтированной файловой системе. В каждой записи содержится информация о вновь смонтированном устройстве, о его суперблоке и корневом каталоге, а также сведения о точке монтирования . Для устранения потенциально опасных побочных эффектов число линков (см. следующий раздел) к каталогу - точке монтирования - должно быть равно 1. Занесение информации в таблицу монтирования производится немедленно, поскольку может возникнуть конфликт между двумя процессами. Например, если монтирующий процесс приостановлен для открытия устройства или считывания суперблока файловой системы, а тем временем другой процесс может попытаться смонтировать файловую систему.
Наличие в логической структуре файлового архива точек монтирования требует аккуратной реализации алгоритмов, осуществляющих навигацию по каталогам. Точку монтирования можно пересечь двумя способами: из файловой системы, где производится монтирование , в файловую систему, которая монтируется (в направлении от глобального корня к листу), и в обратном направлении. Алгоритмы поиска файлов должны предусматривать ситуации, в которых очередной компонент пути к файлу является точкой монтирования , когда вместо анализа индексного узла очередной директории приходится осуществлять обработку суперблока монтированной системы.
Обзор
Точка подключения-это физическое расположение в разделе, используемой в качестве корневой файловой системы. Существует много различных типов хранения, в том числе магнитных, магнитооптических, оптических и полупроводниковых (твердотельных) накопителей. В настоящее время, магнитные носители по-прежнему являются одними из самых распространенными и выпускаются как жесткие диски и, реже, дискеты. Прежде чем любой из них будет использоваться для хранения, средства, с помощью которых информация считывается и записывается должны быть распознаны и информация об этом должна быть доступна для операционной системы. Каждый тип файловой системы характеризуется метаданными, так что операционная система знает как читать и записывать данные. Когда носитель установлен, эти метаданные считываются операционной системой таким образом, чтобы его можно использовать для хранения. UNIX-подобные операционные системы часто включают в себя программное обеспечение и инструменты, которые помогают в процессе монтажа и предоставляют новые функциональные возможности. Некоторые из этих возможностей предоставляют "авто-монтирование".
Во многих ситуациях, файловые системы, кроме корневого каталог должны быть доступны, как только операционная система загрузится. Поэтому все UNIX-подобных системы предоставляют возможность для монтирования файловых систем во время загрузки. Системные администраторы определяют эти файловые системы в конфигурационном файле fstab (vfstab в Solaris), что также указывает на варианты и точки монтирования. В некоторых ситуациях нет необходимости монтировать определенные файловые системы во время загрузки системы, хотя их применение может потребоваться в дальнейшем. Существует несколько утилит для UNIX-подобных систем, которые позволяют монтировать стандартных файловых систем по запросу.
Использование
Устройство /dev/cdrom монтируется в каталог /mnt/cdrom, если он существует. Начиная от момента монтирования и пока пользователь не отмонтирует файловую систему (или туда не будет смонтировано что-то иное) в каталоге /mnt/cdrom будет содержаться дерево каталогов устройства /dev/cdrom; те файлы, и подкаталоги, которые раньше находились в /mnt/cdrom, сохранятся, но будут недоступны до размонтирования устройства /dev/cdrom.
Связывание файлов
Иерархическая организация, положенная в основу древовидной структуры файловой системы современных ОС, не предусматривает выражения отношений, в которых потомки связываются более чем с одним предком. Такая негибкость частично устраняется возможностью реализации связывания файлов или организации линков ( link ).
Ядро позволяет пользователю связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы (см. рис. 12.11). Часто имеет смысл хранить под разными именами одну и ту же команду (выполняемый файл ). Например, выполняемый файл традиционного текстового редактора ОС Unix vi обычно может вызываться под именами ex , edit , vi , view и vedit файловой системы. Соединение между директорией и разделяемым файлом называется "связью" или "ссылкой" ( link ). Дерево файловой системы превращается в циклический граф .
Это удобно, но создает ряд дополнительных проблем.
Простейший способ реализовать связывание файла - просто дублировать информацию о нем в обеих директориях. При этом, однако, может возникнуть проблема совместимости в случае, если владельцы этих директорий попытаются независимо друг от друга изменить содержимое файла. Например, в ОС CP/M запись в директории о файле непосредственно содержит адреса дисковых блоков. Поэтому копии тех же дисковых адресов должны быть сделаны и в другой директории, куда файл линкуется. Если один из пользователей что-то добавляет к файлу, новые блоки будут перечислены только у него в директории и не будут "видны" другому пользователю.
Проблема такого рода может быть решена двумя способами. Первый из них - так называемая жесткая связь ( hard link). Если блоки данных файла перечислены не в директории, а в небольшой структуре данных (например, в индексном узле ), связанной собственно с файлом, то второй пользователь может связаться непосредственно с этой, уже существующей структурой.
Альтернативное решение - создание нового файла, который содержит путь к связываемому файлу. Такой подход называется символической линковкой ( soft или symbolic link ). При этом в соответствующем каталоге создается элемент, в котором имени связи сопоставляется некоторое имя файла (этот файл даже не обязан существовать к моменту создания символической связи ). Для символической связи может создаваться отдельный индексный узел и даже заводиться отдельный блок данных для хранения потенциально длинного имени файла.
Каждый из этих методов имеет свои минусы. В случае жесткой связи возникает необходимость поддержки счетчика ссылок на файл для корректной реализации операции удаления файла. Например, в Unix такой счетчик является одним из атрибутов, хранящихся в индексном узле . Удаление файла одним из пользователей уменьшает количество ссылок на файл на 1. Реальное удаление файла происходит, когда число ссылок на файл становится равным 0.
В случае символической линковки такая проблема не возникает, так как только реальный владелец имеет ссылку на индексный узел файла. Если собственник удаляет файл , то он разрушается, и попытки других пользователей работать с ним закончатся провалом. Удаление символического линка на файл никак не влияет. Проблема организации символической связи - потенциальное снижение скорости доступа к файлу. Файл символического линка хранит путь к файлу, содержащий список вложенных директорий, для прохождения по которому необходимо осуществить несколько обращений к диску.
Символический линк имеет то преимущество, что он может использоваться для организации удобного доступа к файлам удаленных компьютеров, если, например, добавить к пути сетевой адрес удаленной машины.
Циклический граф - структура более гибкая, нежели простое дерево , но работа с ней требует большой аккуратности. Поскольку теперь к файлу существует несколько путей, программа поиска файла может найти его на диске несколько раз. Простейшее практическое решение данной проблемы - ограничить число директорий при поиске. Полное устранение циклов при поиске - довольно трудоемкая процедура, выполняемая специальными утилитами и связанная с многократной трассировкой директорий файловой системы.
При старте системы после загрузки ядра и запуска процесса init инициируется проверка тех файловых систем, которые следует проверить и смонтировать автоматически. Их список содержится в файле /etc/vfstab 1 Внимание! В других системах UNIX этот файл имеет другое название – /etc/fstab . Типичный файл /etc/vfstab выглядит так:
Те файловые системы , которые в столбце mount at boot отмечены как yes, будут проверены и смонтированы при старте системы. Файловую систему можно смонтировать в любой момент, надо лишь указать ей в качестве точки монтирования пустой каталог, который уже существует и доступен в системе. Операцию монтирования и демонтирования файловой системы может осуществить только root .
Монтирование файловой системы выполняется командой mount :
Для монтирования файловой системы , которая описана в /etc/vfstab , можно не указывать имя файла устройства , а сразу указать точку монтирования. Такую "сокращенную" команду mount можно применять только для монтирования файловых систем, перечисленных в /etc/vfstab .
При монтировании файловой системы следует явно указывать ее тип, если он отличается от UFS .
Файловые системы ZFS монтируются автоматически при загрузке, если при их настройке не было специально указано, что их не надо монтировать автоматически, и проверка файловой системы ZFS не требуется.
Демонтирование файловой системы делает ее недоступной для чтения и записи, но файлы, которые расположены на демонтируемом разделе, конечно же, остаются на месте. Просто после демонтирования они не видны: точка монтирования снова превращается в пустой каталог, как до монтирования в нее диска или раздела.
Нельзя демонтировать занятую файловую систему. Занятой считается такая файловая система , файл с которой открыт в настоящее время кем-то из пользователей или каталог которой является текущим каталогом кого-то из работающих в системе пользователей. В разделе " Определение процессов , занявших файл " обсуждается, как выяснить, какой именно процесс занял тот или иной файл в системе (см. также fuser (1M) ).
Чтобы все-таки демонтировать файловую систему, следует найти и устранить причину ее занятости. Часто для этого достаточно просто самому выйти из того каталога, который собираешься демонтировать. Это типичная ошибка системного администратора : пытаться демонтировать /usr в тот момент, когда находишься в /usr/ admin или подобном подкаталоге , который лежит в том же разделе, что и /usr .
Демонтирование файловой системы выполняется командой umount :
Размонтирование командой umount
Для размонтирования достаточно указать точку монтирования или имя устройства.
Монтирование USB-дисков
Для распространённого случая, когда USB-диск имеет файловую систему FAT32, команда монтирования выглядит так:
Параметр codepage необходим, чтобы имена созданных файлов корректно отображались в старых ОС (например, DOS). Если дистрибутив использует в качестве кодировки локали не UTF-8, то её необходимо указать в параметре iocharset так:
Реально используемую кодировку можно определить выполнив команду locale .
Полезными опциями при монтировании Flash-дисков являются sync и flush . Первая приводит к постоянному сбросу на диск буфера записи, так что данные не теряются при отсоединении flash-диска без размонтирования. Побочный эффект такого монтирования — значительное уменьшение в скорости записи. Вторая опция (доступна только в новых ядрах Linux) ведёт к сбросу буфера на диск после записи последнего файла. Это также способствует сохранению данных в случае удаления диска без размонтирования, но не приводит к падению скорости записи.
Монтирование NTFS дисков/разделов
Монтирование образов дисков
Если имеется образ диска в виде iso-файла, то для его монтирования нужно указать параметр -o loop и, обычно, тип файловой системы -t iso9660 (необязательно) ( file.iso — это имя файла образа, а /mnt/iso — точка монтирования):
Монтирование образов в форматах, отличных от iso потребует преобразования в iso-образ или использования эмулятора. Для преобразования можно использовать утилиты командой строки (см. ниже) или утилиту kiso с графическим интерфейсом. Монтирование образов дисков в Linux
Образы bin/cue
Для преобразования образа bin/cue в iso-образ можно воспользоваться конвертером bchunk :
Монтирование сетевых дисков NFS
Монтирование сетевых дисков SMB
Пример монтирования сетевых SMB-ресурсов :
(Утилита smbfs заменилась в ядре Linux на совместимую с ней cifs ) примечания:
- -t cifs можно иногда не указывать , если имя монтируемого устройства вида "//server/dir"
- если для авторизации необходимо указать доменное имя пользователя, то в параметрах команды mount оно указывается как -o username=domain\\user , однако при указании монтируемого ресурса в /etc/fstab имя пользователя указывается как domain/user :
Монтирование FTP серверов
Монтирование каталога файловой системы с другого компьютера через ssh
Модуль ядра FUSE (был принят в официальную ветку ядра начиная с 2.6) позволяет непривилегированным пользователям монтировать различные файловые системы. Для работы необходимо добавить пользователя в группу FUSE, сделать это можно вот так:
или вручную отредактировав файл /etc/group. Ещё необходимо, чтобы загружен был модуль ядра FUSE:
После этого, можно смонтировать каталог другого компьютера с помощью sshfs:
Так же как файл должен быть открыт перед использованием, и файловая система , хранящаяся на разделе диска, должна быть смонтирована, чтобы стать доступной процессам системы.
Функция mount (монтировать) связывает файловую систему из указанного раздела на диске с существующей иерархией файловых систем, а функция umount (демонтировать) выключает файловую систему из иерархии. Функция mount , таким образом, дает пользователям возможность обращаться к данным в дисковом разделе как к файловой системе, а не как к последовательности дисковых блоков.
Процедура монтирования состоит в следующем. Пользователь (в Unix это суперпользователь) сообщает ОС имя устройства и место в файловой структуре (имя пустого каталога), куда нужно присоединить файловую систему (точка монтирования ) (см. рис. 12.9 и рис. 12.10). Hапример, в ОС Unix библиотечный вызов mount имеет вид:
где special pathname - имя специального файла устройства (в общем случае имя раздела), соответствующего дисковому разделу с монтируемой файловой системой, directory pathname - каталог в существующей иерархии, где будет монтироваться файловая система (другими словами, точка или место монтирования ), а options указывает, следует ли монтировать файловую систему "только для чтения" (при этом не будут выполняться такие функции, как write и create , которые производят запись в файловую систему). Затем ОС должна убедиться, что устройство содержит действительную файловую систему ожидаемого формата с суперблоком , списком индексов и корневым индексом.
Некоторые ОС осуществляют монтирование автоматически, как только встретят диск в первый раз (жесткие диски на этапе загрузки, гибкие - когда они вставлены в дисковод), ОС ищет файловую систему на устройстве. Если файловая система на устройстве имеется, она монтируется на корневом уровне, при этом к цепочке имен абсолютного имени файла ( pathname ) добавляется буква раздела.
Ядро поддерживает таблицу монтирования с записями о каждой смонтированной файловой системе. В каждой записи содержится информация о вновь смонтированном устройстве, о его суперблоке и корневом каталоге, а также сведения о точке монтирования . Для устранения потенциально опасных побочных эффектов число линков (см. следующий раздел) к каталогу - точке монтирования - должно быть равно 1. Занесение информации в таблицу монтирования производится немедленно, поскольку может возникнуть конфликт между двумя процессами. Например, если монтирующий процесс приостановлен для открытия устройства или считывания суперблока файловой системы, а тем временем другой процесс может попытаться смонтировать файловую систему.
Наличие в логической структуре файлового архива точек монтирования требует аккуратной реализации алгоритмов, осуществляющих навигацию по каталогам. Точку монтирования можно пересечь двумя способами: из файловой системы, где производится монтирование , в файловую систему, которая монтируется (в направлении от глобального корня к листу), и в обратном направлении. Алгоритмы поиска файлов должны предусматривать ситуации, в которых очередной компонент пути к файлу является точкой монтирования , когда вместо анализа индексного узла очередной директории приходится осуществлять обработку суперблока монтированной системы.
Утилита mount
mount — утилита командной строки в UNIX-подобных операционных системах. Применяется для монтирования файловых систем.
Использование
Устройство /dev/cdrom монтируется в каталог /mnt/cdrom, если он существует. Начиная от момента монтирования и пока пользователь не отмонтирует файловую систему (или туда не будет смонтировано что-то иное) в каталоге /mnt/cdrom будет содержаться дерево каталогов устройства /dev/cdrom; те файлы, и подкаталоги, которые раньше находились в /mnt/cdrom, сохранятся, но будут недоступны до размонтирования устройства /dev/cdrom.
Утилита mount
mount — утилита командной строки в UNIX-подобных операционных системах. Применяется для монтирования файловых систем.
Содержание
Связывание файлов
Иерархическая организация, положенная в основу древовидной структуры файловой системы современных ОС, не предусматривает выражения отношений, в которых потомки связываются более чем с одним предком. Такая негибкость частично устраняется возможностью реализации связывания файлов или организации линков ( link ).
Ядро позволяет пользователю связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы (см. рис. 12.11). Часто имеет смысл хранить под разными именами одну и ту же команду (выполняемый файл ). Например, выполняемый файл традиционного текстового редактора ОС Unix vi обычно может вызываться под именами ex , edit , vi , view и vedit файловой системы. Соединение между директорией и разделяемым файлом называется "связью" или "ссылкой" ( link ). Дерево файловой системы превращается в циклический граф .
Это удобно, но создает ряд дополнительных проблем.
Простейший способ реализовать связывание файла - просто дублировать информацию о нем в обеих директориях. При этом, однако, может возникнуть проблема совместимости в случае, если владельцы этих директорий попытаются независимо друг от друга изменить содержимое файла. Например, в ОС CP/M запись в директории о файле непосредственно содержит адреса дисковых блоков. Поэтому копии тех же дисковых адресов должны быть сделаны и в другой директории, куда файл линкуется. Если один из пользователей что-то добавляет к файлу, новые блоки будут перечислены только у него в директории и не будут "видны" другому пользователю.
Проблема такого рода может быть решена двумя способами. Первый из них - так называемая жесткая связь ( hard link). Если блоки данных файла перечислены не в директории, а в небольшой структуре данных (например, в индексном узле ), связанной собственно с файлом, то второй пользователь может связаться непосредственно с этой, уже существующей структурой.
Альтернативное решение - создание нового файла, который содержит путь к связываемому файлу. Такой подход называется символической линковкой ( soft или symbolic link ). При этом в соответствующем каталоге создается элемент, в котором имени связи сопоставляется некоторое имя файла (этот файл даже не обязан существовать к моменту создания символической связи ). Для символической связи может создаваться отдельный индексный узел и даже заводиться отдельный блок данных для хранения потенциально длинного имени файла.
Каждый из этих методов имеет свои минусы. В случае жесткой связи возникает необходимость поддержки счетчика ссылок на файл для корректной реализации операции удаления файла. Например, в Unix такой счетчик является одним из атрибутов, хранящихся в индексном узле . Удаление файла одним из пользователей уменьшает количество ссылок на файл на 1. Реальное удаление файла происходит, когда число ссылок на файл становится равным 0.
В случае символической линковки такая проблема не возникает, так как только реальный владелец имеет ссылку на индексный узел файла. Если собственник удаляет файл , то он разрушается, и попытки других пользователей работать с ним закончатся провалом. Удаление символического линка на файл никак не влияет. Проблема организации символической связи - потенциальное снижение скорости доступа к файлу. Файл символического линка хранит путь к файлу, содержащий список вложенных директорий, для прохождения по которому необходимо осуществить несколько обращений к диску.
Символический линк имеет то преимущество, что он может использоваться для организации удобного доступа к файлам удаленных компьютеров, если, например, добавить к пути сетевой адрес удаленной машины.
Циклический граф - структура более гибкая, нежели простое дерево , но работа с ней требует большой аккуратности. Поскольку теперь к файлу существует несколько путей, программа поиска файла может найти его на диске несколько раз. Простейшее практическое решение данной проблемы - ограничить число директорий при поиске. Полное устранение циклов при поиске - довольно трудоемкая процедура, выполняемая специальными утилитами и связанная с многократной трассировкой директорий файловой системы.
Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой. Операция монтирования состоит из нескольких этапов:
- определение типа монтируемой системы;
- проверка целостности монтируемой системы;
- считывание системных структур данных и инициализация соответствующего модуля файлового менеджера (драйвера файловой системы);
- установка флага, сообщающего об окончании монтирования. При корректном размонтировании этот флаг сбрасывается. Если при загрузке система определяет, что флаг не сброшен, значит работа была завершена некорректно, и возможно ФС нуждается в починке;
- включение новой файловой системы в общее пространство имен.
Монтирование дискет и прочих сменных носителей
Для монтирования дискет, компакт-дисков и прочих сменных носителей в Solaris имеется специальная программа vold ( Volume Management daemon ). Она следит за тем, вставлены ли компакт- диск , дискета, или, к примеру, zip - диск в соответствующее устройство. Как только диск оказывается в устройстве, vold вызывает программу volcheck , чтобы проверить, действительно ли в привод установили новый диск , а затем программу rmmount для монтирования диска в заранее определенную точку монтирования. Программа rmmount выясняет тип файловой системы вставленного диска, и, если этот тип поддерживается, монтирует диск . Список предопределенных точек монтирования можно посмотреть с помощью
Поведение rmmount определяется файлом конфигурации /etc/rmmount.conf .
Программу rmmount можно запускать и вручную. Кроме того, можно применить команду volrmmount для форсирования перемонтирования или демонтирования файловой системы на сменном носителе. Детали ее использования следует почерпнуть в man volrmmount .
Функцию vold могут исполнять и другие компоненты системы, например, соответствующий компонент графической среды GNOME.
Содержание
Обзор
Точка подключения-это физическое расположение в разделе, используемой в качестве корневой файловой системы. Существует много различных типов хранения, в том числе магнитных, магнитооптических, оптических и полупроводниковых (твердотельных) накопителей. В настоящее время, магнитные носители по-прежнему являются одними из самых распространенными и выпускаются как жесткие диски и, реже, дискеты. Прежде чем любой из них будет использоваться для хранения, средства, с помощью которых информация считывается и записывается должны быть распознаны и информация об этом должна быть доступна для операционной системы. Каждый тип файловой системы характеризуется метаданными, так что операционная система знает как читать и записывать данные. Когда носитель установлен, эти метаданные считываются операционной системой таким образом, чтобы его можно использовать для хранения. UNIX-подобные операционные системы часто включают в себя программное обеспечение и инструменты, которые помогают в процессе монтажа и предоставляют новые функциональные возможности. Некоторые из этих возможностей предоставляют "авто-монтирование".
Во многих ситуациях, файловые системы, кроме корневого каталог должны быть доступны, как только операционная система загрузится. Поэтому все UNIX-подобных системы предоставляют возможность для монтирования файловых систем во время загрузки. Системные администраторы определяют эти файловые системы в конфигурационном файле fstab (vfstab в Solaris), что также указывает на варианты и точки монтирования. В некоторых ситуациях нет необходимости монтировать определенные файловые системы во время загрузки системы, хотя их применение может потребоваться в дальнейшем. Существует несколько утилит для UNIX-подобных систем, которые позволяют монтировать стандартных файловых систем по запросу.
Суперблок
Суперблок – это блок в начале диска, содержащий общую информацию о диске и файловой системе на ней. Роль суперблока в ZFS играет uber-блок, также содержащий информацию, необходимую ZFS для работы с этим диском как с элементом пула ZFS. Суперблок в UFS содержит общую информацию о файловой системе как совокупности файлов на данном разделе жесткого диска , в частности, размер раздела UNIX , число свободных и занятых блоков и индексных дескрипторов и флаг целостности файловой системы . Подробнее о суперблоке в UFS и uber-блоке в ZFS рассказано в лекциях "Устройство и администрирование файловой системы UFS" и "Концепция, устройство и администрирование файловой системы ZFS" соответственно.
Таблица индексных дескрипторов
В виртуальной файловой системе таблица индексных дескрипторов представляет собой таблицу, каждый элемент которой описывает одну логическую сущность. Как правило, такой сущностью является файл или каталог. Каталог по сути дела является файлом специального типа. Каждый индексный дескриптор содержит ряд полей: тип файла , который описывается данным дескриптором, время последней модификации файла, время последнего доступа к файлу , время модификации индексного дескриптора, права доступа к файлу, идентификаторы владельца файла и группы файла и ряд других. Вся информация о файле, кроме его имени, хранится в индексном дескрипторе, имя файла хранится в каталоге, в котором находится файл. Более подробно о таблице индексных дескрипторов в UFS рассказано в "Устройство и администрирование файловой системы UFS" .
Дерево каталогов
Файлы в UNIX'e разложены по каталогам. Каталоги образуют древовидную структуру: есть корневой каталог , который обозначается знаком "/" (слэш), и его подкаталоги . В каждом из последних есть свои подкаталоги и т.д. Ограничений на число файлов в каталоге нет. Разные каталоги ("ветви" дерева каталогов) могут размещаться на разных дисках, это незаметно для пользователя. Чтобы обратиться к файлу, не нужно знать о том, на каком физическом устройстве или разделе диска записан файл. Это значит, что лихорадочный поиск по дискам С:, D: E:, K:, R:, Y: не знаком человеку, работающему с UNIX'ом. Он лихорадочно ищет потерянные файлы в густой кроне UNIX-каталогов, начиная от корня.
Между прочим, забавно, что уже много лет все упорно называют деревом структуру каталогов, у которой корень находится наверху, а его ближайшие отростки- подкаталоги называются каталогами верхнего уровня. Кто из нас видел деревья, растущие кронами вниз?
Поддерживаемые типы файловых систем
Основными ("родными") файловыми системами Solaris являются UFS (Unix file system ) и ZFS ( Zettabyte File System ). Всего Solaris 10 поддерживает 14 файловых систем, перечисленных в табл. 6.2. Кроме этого, в кластерах поддерживается файловая система Lustre , разработанная компанией CFS , Inc. (от Cluster File System ). Компания CFS была куплена компанией Sun Microsystems в 2007 году.
В довольно старых версиях UNIX поддерживалась всего одна файловая система. С увеличением разнообразия носителей возникла необходимость поддержки разнородных файловых систем на носителях разной природы. Так в 1985 году компания Sun Microsystems пришла к реализации концепции виртуальной файловой системы.
Виртуальная файловая система представляет собой абстрактную файловую систему, которая позволяет операционной системе одинаковым образом обращаться к файловым системам разных типов.
Важно: системные вызовы, подобные fopen () и chmod() , а также команды манипулирования файлами ( cp , mv, rm и другие), по сути дела, работают именно с абстракцией файловой системы, т.е. с виртуальной файловой системой, которая имеет все свойства вышеописанной POSIX-совместимой файловой системы. От низкоуровневых действий и необходимости вникать в подробности реализации конкретной файловой системы на конкретном физическом устройстве их надежно защищает реализация виртуальной файловой системы.
К 1985 году операционные системы фирмы Sun использовали Berkeley fast filesystem ( FFS ). Эта файловая система базировалась на концепции индексных дескрипторов , которая органично трансформировалась в концепцию виртуальных индексных дескрипторов в новой файловой системе UFS , вобравшей в себя структуру FFS и новые идеи организации виртуальной файловой системы . Взаимодействие независимого от конкретного типа файловой системы уровня виртуальной файловой системы и файловых систем строго определенных типов иллюстрирует рис. 6.5.
Файловая система UFS претерпела некоторые изменения с 1985 года. Так, начиная с выпуска Solaris 9 8/03 поддерживаются многотерабайтные разделы, в то время как до этого UFS в Solaris могла работать только с разделами размером до 1 Тб. В настоящее время большие дисковые системы имеет смысл использовать в качестве элементов пула ZFS, так как файловая система ZFS лучше всего подходит для управления большими дисковыми пространствами.
Файловые системы UFS , VxFS и ZFS, поддерживаемые в Solaris , отличаются по некоторым важным параметрам, влияющим на их надежность и производительность . В табл. 6.3 показано, что различные файловые системы обладают разными алгоритмами выделения пространства под файлы, а также механизмом журналирования .
Выделение пространства блоками позволяет минимизировать фрагментацию файловой системы , а выделение пространства экстентами (большими частями пространства диска, состоящими из многих блоков) дает возможность снизить объем служебной информации, которая записывается на диск.
В файловой системе UFS размер блока может составлять от 512 до 8192 байт , по умолчанию в Solaris принят размер 8192 байт .
В Solaris поддерживается журналирование (logging) файловых систем UFS и VxFS. Журналирование позволяет записывать в журнал информацию обо всех начатых транзакциях . Если транзакция (т.е. операция записи на диск) по каким-то причинам не была завершена (например, отключилось питание), то после перезапуска системы файловая система будет автоматически возвращена в состояние, в котором она была до начала транзакции. Подобную функциональность предоставляет файловая система ext3fs в Linux , reiserfs для FreeBSD и Linux и некоторые другие.
В последние годы непременным условием использования файловой системы стала поддержка современных дисков больших объемов и больших файлов. Если несколько лет назад "большим" назывался диск объемом в 1 гигабайт , то сейчас дисковые массивы объемом в несколько терабайт становятся обычными для систем среднего класса. Скоро они придут в системы малых офисов и в дома, а сети предприятий начнут работать с серверами, в которых установлены дисковые массивы, содержащие десятки и сотни терабайт информации. Что на это отвечают создатели файловых систем для UNIX?
С 1991 года файловая система UFS претерпела заметные изменения, появилась версия UFS2, которая пока поддерживается только во FreeBSD 5.0. В Solaris модификация файловой системы позволила достичь предела поддерживаемого дискового объема одного раздела UFS в 1 терабайт.
Дерево каталогов
Все файлы в UNIX организованы древовидно: всегда существует корневой каталог , который обозначается "/". В нем есть подкаталоги . Обычно имеются подкаталоги , перечисленные в табл. 6.4.
Каталог / bin является символической ссылкой на каталог /usr/ bin : так бывает не всегда.
Характерным свойством Solaris является выделение отдельного каталога / exports , в котором сосредотачиваются разделяемые по сети подкаталоги , доступные для пользователей других компьютеров. Каталог / opt , куда устанавливается некоторое дополнительное программное обеспечение (от optional , необязательное), тоже есть в системах Solaris , но отсутствует во многих других системах UNIX.
Каталог для временных файлов /tmp монтируется в Solaris на отдельную виртуальную файловую систему типа tmpfs. Это особый тип файловой системы. Если в системе есть свободная оперативная память, то драйвер tmpfs хранит данные, записанные на файловую систему этого типа в оперативной памяти, а не диске. Если объем свободной памяти падает и она начинает требоваться другим программам, файлы из tmpfs записываются на раздел свопинга. Получается, что файлы, размещенные в файловой системе типа tmpfs, всегда занимают остаток оперативной памяти системы, чтобы она использовалась эффективно. Если свободной памяти нет, tmpfs размещается в пространстве свопинга.
Это автоматически приводит к тому, что записанные в файловую систему tmpfs файлы теряются после перезагрузки. Поэтому не следует записывать в /tmp какие-либо полезные файлы.
Скорость работы файловой системы tmpfs высока, т.к. часто все ее файлы физически расположены в оперативной памяти. Вследствие этого кэширование файлов на tmpfs не производится: они и так хранятся не на диске.
Казалось бы, использование tmpfs таит в себе резерв увеличения производительности любого приложения, поскольку достаточно записать данные в каталог /tmp и работать с ними там, чтобы скорость доступа к данным возросла многократно. На самом деле это не так, потому что чтение и запись любых дисков кэшируется, и лишь для некоторых приложений использование tmpfs оправдано. Несомненно увеличивается быстродействие компиляторов и других программ с большими объемами промежуточных файлов – но они и так используют /tmp для хранения временной информации в процессе работы.
По умолчанию Solaris применяет tmpfs только для / tmp . При этом система избегает существенного объема дискового ввода-вывода , так как / tmp используется для временных файлов различных программ.
Внимание: создание отдельного раздела / tmp на диске приведет к тому, что / tmp не будет создан системой автоматически с типом файловой системы tmpfs и производительность системы может уменьшиться!
Размонтирование командой umount
Для размонтирования достаточно указать точку монтирования или имя устройства.
Монтирование USB-дисков
Для распространённого случая, когда USB-диск имеет файловую систему FAT32, команда монтирования выглядит так:
Параметр codepage необходим, чтобы имена созданных файлов корректно отображались в старых ОС (например, DOS). Если дистрибутив использует в качестве кодировки локали не UTF-8, то её необходимо указать в параметре iocharset так:
Реально используемую кодировку можно определить выполнив команду locale .
Полезными опциями при монтировании Flash-дисков являются sync и flush . Первая приводит к постоянному сбросу на диск буфера записи, так что данные не теряются при отсоединении flash-диска без размонтирования. Побочный эффект такого монтирования — значительное уменьшение в скорости записи. Вторая опция (доступна только в новых ядрах Linux) ведёт к сбросу буфера на диск после записи последнего файла. Это также способствует сохранению данных в случае удаления диска без размонтирования, но не приводит к падению скорости записи.
Монтирование NTFS дисков/разделов
Монтирование образов дисков
Если имеется образ диска в виде iso-файла, то для его монтирования нужно указать параметр -o loop и, обычно, тип файловой системы -t iso9660 (необязательно) ( file.iso — это имя файла образа, а /mnt/iso — точка монтирования):
Монтирование образов в форматах, отличных от iso потребует преобразования в iso-образ или использования эмулятора. Для преобразования можно использовать утилиты командой строки (см. ниже) или утилиту kiso с графическим интерфейсом. Монтирование образов дисков в Linux
Образы bin/cue
Для преобразования образа bin/cue в iso-образ можно воспользоваться конвертером bchunk :
Монтирование сетевых дисков NFS
Монтирование сетевых дисков SMB
Пример монтирования сетевых SMB-ресурсов :
(Утилита smbfs заменилась в ядре Linux на совместимую с ней cifs ) примечания:
- -t cifs можно иногда не указывать , если имя монтируемого устройства вида "//server/dir"
- если для авторизации необходимо указать доменное имя пользователя, то в параметрах команды mount оно указывается как -o username=domain\\user , однако при указании монтируемого ресурса в /etc/fstab имя пользователя указывается как domain/user :
Монтирование FTP серверов
Монтирование каталога файловой системы с другого компьютера через ssh
Модуль ядра FUSE (был принят в официальную ветку ядра начиная с 2.6) позволяет непривилегированным пользователям монтировать различные файловые системы. Для работы необходимо добавить пользователя в группу FUSE, сделать это можно вот так:
или вручную отредактировав файл /etc/group. Ещё необходимо, чтобы загружен был модуль ядра FUSE:
После этого, можно смонтировать каталог другого компьютера с помощью sshfs:
Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой. Операция монтирования состоит из нескольких этапов:
- определение типа монтируемой системы;
- проверка целостности монтируемой системы;
- считывание системных структур данных и инициализация соответствующего модуля файлового менеджера (драйвера файловой системы);
- установка флага, сообщающего об окончании монтирования. При корректном размонтировании этот флаг сбрасывается. Если при загрузке система определяет, что флаг не сброшен, значит работа была завершена некорректно, и возможно ФС нуждается в починке;
- включение новой файловой системы в общее пространство имен.
Связывание файлов
Иерархическая организация, положенная в основу древовидной структуры файловой системы современных ОС, не предусматривает выражения отношений, в которых потомки связываются более чем с одним предком. Такая негибкость частично устраняется возможностью реализации связывания файлов или организации линков ( link ).
Ядро позволяет пользователю связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы (см. рис. 12.11). Часто имеет смысл хранить под разными именами одну и ту же команду (выполняемый файл ). Например, выполняемый файл традиционного текстового редактора ОС Unix vi обычно может вызываться под именами ex , edit , vi , view и vedit файловой системы. Соединение между директорией и разделяемым файлом называется "связью" или "ссылкой" ( link ). Дерево файловой системы превращается в циклический граф .
Это удобно, но создает ряд дополнительных проблем.
Простейший способ реализовать связывание файла - просто дублировать информацию о нем в обеих директориях. При этом, однако, может возникнуть проблема совместимости в случае, если владельцы этих директорий попытаются независимо друг от друга изменить содержимое файла. Например, в ОС CP/M запись в директории о файле непосредственно содержит адреса дисковых блоков. Поэтому копии тех же дисковых адресов должны быть сделаны и в другой директории, куда файл линкуется. Если один из пользователей что-то добавляет к файлу, новые блоки будут перечислены только у него в директории и не будут "видны" другому пользователю.
Проблема такого рода может быть решена двумя способами. Первый из них - так называемая жесткая связь ( hard link). Если блоки данных файла перечислены не в директории, а в небольшой структуре данных (например, в индексном узле ), связанной собственно с файлом, то второй пользователь может связаться непосредственно с этой, уже существующей структурой.
Альтернативное решение - создание нового файла, который содержит путь к связываемому файлу. Такой подход называется символической линковкой ( soft или symbolic link ). При этом в соответствующем каталоге создается элемент, в котором имени связи сопоставляется некоторое имя файла (этот файл даже не обязан существовать к моменту создания символической связи ). Для символической связи может создаваться отдельный индексный узел и даже заводиться отдельный блок данных для хранения потенциально длинного имени файла.
Каждый из этих методов имеет свои минусы. В случае жесткой связи возникает необходимость поддержки счетчика ссылок на файл для корректной реализации операции удаления файла. Например, в Unix такой счетчик является одним из атрибутов, хранящихся в индексном узле . Удаление файла одним из пользователей уменьшает количество ссылок на файл на 1. Реальное удаление файла происходит, когда число ссылок на файл становится равным 0.
В случае символической линковки такая проблема не возникает, так как только реальный владелец имеет ссылку на индексный узел файла. Если собственник удаляет файл , то он разрушается, и попытки других пользователей работать с ним закончатся провалом. Удаление символического линка на файл никак не влияет. Проблема организации символической связи - потенциальное снижение скорости доступа к файлу. Файл символического линка хранит путь к файлу, содержащий список вложенных директорий, для прохождения по которому необходимо осуществить несколько обращений к диску.
Символический линк имеет то преимущество, что он может использоваться для организации удобного доступа к файлам удаленных компьютеров, если, например, добавить к пути сетевой адрес удаленной машины.
Циклический граф - структура более гибкая, нежели простое дерево , но работа с ней требует большой аккуратности. Поскольку теперь к файлу существует несколько путей, программа поиска файла может найти его на диске несколько раз. Простейшее практическое решение данной проблемы - ограничить число директорий при поиске. Полное устранение циклов при поиске - довольно трудоемкая процедура, выполняемая специальными утилитами и связанная с многократной трассировкой директорий файловой системы.
Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой. Операция монтирования состоит из нескольких этапов:
- определение типа монтируемой системы;
- проверка целостности монтируемой системы;
- считывание системных структур данных и инициализация соответствующего модуля файлового менеджера (драйвера файловой системы);
- установка флага, сообщающего об окончании монтирования. При корректном размонтировании этот флаг сбрасывается. Если при загрузке система определяет, что флаг не сброшен, значит работа была завершена некорректно, и возможно ФС нуждается в починке;
- включение новой файловой системы в общее пространство имен.
Читайте также: