Что такое монтирование файловой системы
Физический диск состоит из нескольких логических разделов, на которые он разбит дисковым драйвером, причем каждому разделу соответствует файл устройства, имеющий определенное имя. Процессы обращаются к данным раздела, открывая соответствующий файл устройства и затем ведя запись и чтение из этого "файла", представляя его себе в виде последовательности дисковых блоков. Это взаимодействие во всех деталях рассматривается в главе 10. Раздел диска может содержать логическую файловую систему, состоящую из блока начальной загрузки, суперблока, списка индексов и информационных блоков (см. главу 2). Системная функция mount (монтировать) связывает файловую систему из указанного раздела на диске с существующей иерархией файловых систем, а функция umount (демонтировать) выключает файловую систему из иерархии. Функция mount, таким образом, дает пользователям возможность обращаться к данным в дисковом разделе как к файловой системе, а не как к последовательности дисковых блоков.
Синтаксис вызова функции mount:
где special pathname - имя специального файла устройства, соответствующего дисковому разделу с монтируемой файловой системой, directory pathname - каталог в существующей иерархии, где будет монтироваться файловая система (другими словами, точка или место монтирования), а options указывает, следует ли монтировать файловую систему "только для чтения" (при этом не будут выполняться такие функции, как write и creat, которые производят запись в файловую систему). Например, если процесс вызывает функцию mount следующим образом:
ядро присоединяет файловую систему, находящуюся в дисковом разделе с именем "/dev/dsk1", к каталогу "/usr" в существующем дереве файловых систем (см. Рисунок 5.22). Файл "/dev/dsk1" является блочным специальным файлом, т.е. он носит имя устройства блочного типа, обычно имя раздела на диске. Ядро предполагает, что раздел на диске с указанным именем содержит файловую систему с суперблоком, списком индексов и корневым индексом. После выполнения функции mount к корню смонтированной файловой системы можно обращаться по имени "/usr". Процессы могут обращаться к файлам в монтированной файловой системе и игнорировать тот факт, что система может отсоединяться. Только системная функция link контролирует файловую систему, так как в версии V не разрешаются связи между файлами, принадлежащими разным файловым системам (см. раздел 5.15).
Рисунок 5.22. Дерево файловых систем до и после выполнения функции mount
- номер устройства, идентифицирующий монтированную файловую систему (упомянутый выше логический номер файловой системы);
- указатель на буфер, где находится суперблок файловой системы;
- указатель на корневой индекс монтированной файловой системы ("/" для файловой системы с именем "/dev/dsk1" на Рисунке 5.22);
- указатель на индекс каталога, ставшего точкой монтирования (на Рисунке 5.22 это каталог "usr", принадлежащий корневой файловой системе).
Связь индекса точки монтирования с корневым индексом монтированной файловой системы, возникшая в результате выполнения системной функции mount, дает ядру возможность легко двигаться по иерархии файловых систем без получения от пользователей дополнительных сведений.
Рисунок 5.23. Алгоритм монтирования файловой системы
На Рисунке 5.23 показан алгоритм монтирования файловой системы. Ядро позволяет монтировать и демонтировать файловые системы только тем процессам, владельцем которых является суперпользователь. Предоставление возможности выполнять функции mount и umount всем пользователям привело бы к внесению с их стороны хаоса в работу файловой системы, как умышленному, так и явившемуся результатом неосторожности. Суперпользователи могут разрушить систему только случайно.
Ядро находит индекс специального файла, представляющего файловую систему, подлежащую монтированию, извлекает старший и младший номера, которые идентифицируют соответствующий дисковый раздел, и выбирает индекс каталога, в котором файловая система будет смонтирована. Счетчик ссылок в индексе каталога должен иметь значение, не превышающее 1 (и меньше 1 он не должен быть - почему?), в связи с наличием потенциально опасных побочных эффектов (см. упражнение 5.27). Затем ядро назначает свободное место в таблице монтирования, помечает его для использования и присваивает значение полю номера устройства в таблице. Вышеуказанные назначения производятся немедленно, поскольку вызывающий процесс может приостановиться, следуя процедуре открытия устройства или считывая суперблок файловой системы, а другой процесс тем временем попытался бы смонтировать файловую систему. Пометив для использования запись в таблице монтирования, ядро не допускает использования в двух вызовах функции mount одной и той же записи таблицы. Запоминая номер устройства с монтируемой системой, ядро может воспрепятствовать повторному монтированию одной и той же системы другими процессами, которое, будь оно допущено, могло бы привести к непредсказуемым последствиям (см. упражнение 5.26).
Ядро вызывает процедуру открытия для блочного устройства, содержащего файловую систему, точно так же, как оно делает это при непосредственном открытии блочного устройства (глава 10). Процедура открытия устройства обычно проверяет существование такого устройства, иногда производя инициализацию структур данных драйвера и посылая команды инициализации аппаратуре. Затем ядро выделяет из буферного пула свободный буфер (вариант алгоритма getblk) для хранения суперблока монтируемой файловой системы и считывает суперблок, используя один из вариантов алгоритма read. Ядро сохраняет указатель на индекс каталога, в котором монтируется система, давая возможность маршрутам поиска файловых имен, содержащих имя "..", пересекать точку монтирования, как мы увидим дальше. Оно находит корневой индекс монтируемой файловой системы и запоминает указатель на индекс в таблице монтирования. С точки зрения пользователя, место (точка) монтирования и корень файловой системы логически эквивалентны, и ядро упрочивает эту эквивалентность благодаря их сосуществованию в одной записи таблицы монтирования. Процессы больше не могут обращаться к индексу каталога - точки монтирования.
Ядро инициализирует поля в суперблоке файловой системы, очищая поля для списка свободных блоков и списка свободных индексов и устанавливая число свободных индексов в суперблоке равным 0. Целью инициализации (задания начальных значений полей) является сведение к минимуму опасности разрушить файловую систему, если монтирование осуществляется после аварийного завершения работы системы. Если ядро заставить думать, что в суперблоке отсутствуют свободные индексы, то это приведет к запуску алгоритма ialloc, ведущего поиск на диске свободных индексов. К сожалению, если список свободных дисковых блоков испорчен, ядро не исправляет этот список изнутри (см. раздел 5.17 о сопровождении файловой системы). Если пользователь монтирует файловую систему только для чтения, запрещая проведение всех операций записи в системе, ядро устанавливает в суперблоке соответствующий флаг. Наконец, ядро помечает индекс каталога как "точку монтирования", чтобы другие процессы позднее могли ссылаться на нее. На Рисунке 5.24 представлен вид различных структур данных по завершении выполнения функции mount.
5.14.1 Пересечение точек монтирования в маршрутах поиска имен файлов
Давайте повторно рассмотрим поведение алгоритмов namei и iget в случаях, когда маршрут поиска файлов проходит через точку монтирования. Точку монтирования можно пересечь двумя способами: из файловой системы, где производится монтирование, в файловую систему, которая монтируется (в направлении от глобального корня к листу), и в обратном направлении. Эти способы иллюстрирует следующая последовательность команд shell'а.
По команде mount после выполнения некоторых логических проверок запускается системная функция mount, которая монтирует файловую систему в дисковом разделе с именем "/dev/dsk1" под управлением каталога "/usr". Первая из команд cd (сменить каталог) побуждает командный процессор shell вызвать системную функцию chdir, выполняя которую, ядро анализирует имя пути поиска, пересекающего точку монтирования в "/usr". Вторая из команд cd приводит к тому, что ядро анализирует имя пути поиска и пересекает точку монтирования в третьей компоненте ".." имени.
Рисунок 5.24. Структуры данных после монтирования
Для случая пересечения точки монтирования в направлении из файловой системы, где производится монтирование, в файловую систему, которая монтируется, рассмотрим модификацию алгоритма iget (Рисунок 5.25), которая идентична версии алгоритма, приведенной на Рисунке 4.3, почти во всем, за исключением того, что в данной модификации производится проверка, является ли индекс индексом точки монтирования. Если индекс имеет соответствующую пометку, ядро соглашается, что это индекс точки монтирования. Оно обнаруживает в таблице монтирования запись с указанным индексом точки монтирования и запоминает номер устройства монтируемой файловой системы. Затем, используя номер устройства и номер индекса корня, общего для всех файловых систем, ядро обращается к индексу корня монтируемого устройства и возвращает при выходе из функции этот индекс. В первом примере смены каталога ядро обращается к индексу каталога "/usr" из файловой системы, в которой производится монтирование, обнаруживает, что этот индекс имеет пометку "точка монтирования", находит в таблице монтирования индекс корня монтируемой файловой системы и обращается к этому индексу.
Рисунок 5.25. Модификация алгоритма получения доступа к индексу
Для второго случая пересечения точки монтирования в направлении из файловой системы, которая монтируется, в файловую систему, где выполняется монтирование, рассмотрим модификацию алгоритма namei (Рисунок 5.26). Она похожа на версию алгоритма, приведенную на Рисунке 4.11. Однако, после обнаружения в каталоге номера индекса для данной компоненты пути поиска ядро проверяет, не указывает ли номер индекса на то, что это корневой индекс файловой системы. Если это так и если текущий рабочий индекс так же является корневым, а компонента пути поиска, в свою очередь, имеет имя "..", ядро идентифицирует индекс как точку монтирования. Оно находит в таблице монтирования запись, номер устройства в которой совпадает с номером устройства для последнего из найденных индексов, получает индекс для каталога, в котором производится монтирование, и продолжает поиск компоненты с именем "..", используя только что полученный индекс в качестве рабочего. В корне файловой системы, тем не менее, корневым каталогом является ".."
Рисунок 5.26. Модификация алгоритма синтаксического анализа имени файла
В вышеприведенном примере (cd "../../..") предполагается, что в начале процесс имеет текущий каталог с именем "/usr/src/uts". Когда имя пути поиска подвергается анализу в алгоритме namei, начальным рабочим индексом является индекс текущего каталога. Ядро меняет текущий рабочий индекс на индекс каталога с именем "/usr/src" в результате расшифровки первой компоненты ".." в имени пути поиска. Затем ядро анализирует вторую компоненту ".." в имени пути поиска, находит корневой индекс смонтированной (перед этим) файловой системы - индекс каталога "usr" - и делает его рабочим индексом при анализе имени с помощью алгоритма namei. Наконец, оно расшифровывает третью компоненту ".." в имени пути поиска. Ядро обнаруживает, что номер индекса для ".." совпадает с номером корневого индекса, рабочим индексом является корневой индекс, а ".." является текущей компонентой имени пути поиска. Ядро находит запись в таблице монтирования, соответствующую точке монтирования "usr", освобождает текущий рабочий индекс (корень файловой системы, смонтированной в каталоге "usr") и назначает индекс точки монтирования (каталога "usr" в корневой файловой системе) в качестве нового рабочего индекса. Затем оно просматривает записи в каталоге точки монтирования "/usr" в поисках имени ".." и находит номер индекса для корня файловой системы ("/"). После этого системная функция chdir завершается как обычно, вызывающий процесс не обращает внимания на тот факт, что он пересек точку монтирования.
5.14.2 Демонтирование файловой системы
Синтаксис вызова системной функции umount:
где special filename указывает демонтируемую файловую систему. При демонтировании файловой системы (Рисунок 5.27) ядро обращается к индексу демонтируемого устройства, восстанавливает номер устройства для специального файла, освобождает индекс (алгоритм iput) и находит в таблице монтирования запись с номером устройства, равным номеру устройства для специального файла. Прежде чем ядро действительно демонтирует файловую систему, оно должно удостовериться в том, что в системе не осталось используемых файлов, для этого ядро просматривает таблицу индексов в поисках всех файлов, чей номер устройства совпадает с номером демонтируемой системы. Активным файлам соответствует положительное значение счетчика ссылок и в их число входят текущий каталог процесса, файлы с разделяемым текстом, которые исполняются в текущий момент (глава 7), и открытые когда-то файлы, которые потом не были закрыты. Если какие-нибудь файлы из файловой системы активны, функция umount завершается неудачно: если бы она прошла успешно, активные файлы сделались бы недоступными.
Буферный пул все еще содержит блоки с "отложенной записью", не переписанные на диск, поэтому ядро "вымывает" их из буферного пула. Ядро удаляет записи с разделяемым текстом, которые находятся в таблице областей, но не являются действующими (подробности в главе 7), записывает на диск все недавно скорректированные суперблоки и корректирует дисковые копии всех индексов, которые требуют этого. Казалось, было бы достаточно откорректировать дисковые блоки, суперблок и индексы только для демонтируемой файловой системы, однако в целях сохранения преемственности изменений ядро выполняет аналогичные действия для всей системы в целом. Затем ядро освобождает корневой индекс монтированной файловой системы, удерживаемый с момента первого обращения к нему во время выполнения функции mount, и запускает из драйвера процедуру закрытия устройства, содержащего файловую систему. Впоследствии ядро просматривает буферы в буферном кеше и делает недействительными те из них, в которых находятся блоки демонтируемой файловой системы; в хранении информации из этих блоков в кеше больше нет необходимости. Делая буферы недействительными, ядро вставляет их в начало списка свободных буферов, в то время как блоки с актуальной информацией остаются в буферном кеше. Ядро сбрасывает в индексе системы, где производилось монтирование, флаг "точки монтирования", установленный функцией mount, и освобождает индекс. Пометив запись в таблице монтирования свободной для общего использования, функция umount завершает работу.
Рисунок 5.27. Алгоритм демонтирования файловой системы
Рисунок 5.28. Файлы в дереве файловой системы, связанные с помощью функции link
Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой. Операция монтирования состоит из нескольких этапов:
- определение типа монтируемой системы;
- проверка целостности монтируемой системы;
- считывание системных структур данных и инициализация соответствующего модуля файлового менеджера (драйвера файловой системы);
- установка флага, сообщающего об окончании монтирования. При корректном размонтировании этот флаг сбрасывается. Если при загрузке система определяет, что флаг не сброшен, значит работа была завершена некорректно, и возможно ФС нуждается в починке;
- включение новой файловой системы в общее пространство имен.
Содержание
Обзор
Точка подключения-это физическое расположение в разделе, используемой в качестве корневой файловой системы. Существует много различных типов хранения, в том числе магнитных, магнитооптических, оптических и полупроводниковых (твердотельных) накопителей. В настоящее время, магнитные носители по-прежнему являются одними из самых распространенными и выпускаются как жесткие диски и, реже, дискеты. Прежде чем любой из них будет использоваться для хранения, средства, с помощью которых информация считывается и записывается должны быть распознаны и информация об этом должна быть доступна для операционной системы. Каждый тип файловой системы характеризуется метаданными, так что операционная система знает как читать и записывать данные. Когда носитель установлен, эти метаданные считываются операционной системой таким образом, чтобы его можно использовать для хранения. UNIX-подобные операционные системы часто включают в себя программное обеспечение и инструменты, которые помогают в процессе монтажа и предоставляют новые функциональные возможности. Некоторые из этих возможностей предоставляют "авто-монтирование".
Во многих ситуациях, файловые системы, кроме корневого каталог должны быть доступны, как только операционная система загрузится. Поэтому все UNIX-подобных системы предоставляют возможность для монтирования файловых систем во время загрузки. Системные администраторы определяют эти файловые системы в конфигурационном файле fstab (vfstab в Solaris), что также указывает на варианты и точки монтирования. В некоторых ситуациях нет необходимости монтировать определенные файловые системы во время загрузки системы, хотя их применение может потребоваться в дальнейшем. Существует несколько утилит для UNIX-подобных систем, которые позволяют монтировать стандартных файловых систем по запросу.
Утилита mount
mount — утилита командной строки в UNIX-подобных операционных системах. Применяется для монтирования файловых систем.
Использование
Устройство /dev/cdrom монтируется в каталог /mnt/cdrom, если он существует. Начиная от момента монтирования и пока пользователь не отмонтирует файловую систему (или туда не будет смонтировано что-то иное) в каталоге /mnt/cdrom будет содержаться дерево каталогов устройства /dev/cdrom; те файлы, и подкаталоги, которые раньше находились в /mnt/cdrom, сохранятся, но будут недоступны до размонтирования устройства /dev/cdrom.
Размонтирование командой 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
(Утилита 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 ) добавляется буква раздела.
Рис. 12.10. Общая файловая система после монтирования
Ядро поддерживает таблицу монтирования с записями о каждой смонтированной файловой системе. В каждой записи содержится информация о вновь смонтированном устройстве, о его суперблоке и корневом каталоге, а также сведения о точке монтирования . Для устранения потенциально опасных побочных эффектов число линков (см. следующий раздел) к каталогу - точке монтирования - должно быть равно 1. Занесение информации в таблицу монтирования производится немедленно, поскольку может возникнуть конфликт между двумя процессами. Например, если монтирующий процесс приостановлен для открытия устройства или считывания суперблока файловой системы, а тем временем другой процесс может попытаться смонтировать файловую систему.
Наличие в логической структуре файлового архива точек монтирования требует аккуратной реализации алгоритмов, осуществляющих навигацию по каталогам. Точку монтирования можно пересечь двумя способами: из файловой системы, где производится монтирование , в файловую систему, которая монтируется (в направлении от глобального корня к листу), и в обратном направлении. Алгоритмы поиска файлов должны предусматривать ситуации, в которых очередной компонент пути к файлу является точкой монтирования , когда вместо анализа индексного узла очередной директории приходится осуществлять обработку суперблока монтированной системы.
Связывание файлов
Иерархическая организация, положенная в основу древовидной структуры файловой системы современных ОС, не предусматривает выражения отношений, в которых потомки связываются более чем с одним предком. Такая негибкость частично устраняется возможностью реализации связывания файлов или организации линков ( link ).
Ядро позволяет пользователю связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы (см. рис. 12.11). Часто имеет смысл хранить под разными именами одну и ту же команду (выполняемый файл ). Например, выполняемый файл традиционного текстового редактора ОС Unix vi обычно может вызываться под именами ex , edit , vi , view и vedit файловой системы. Соединение между директорией и разделяемым файлом называется "связью" или "ссылкой" ( link ). Дерево файловой системы превращается в циклический граф .
Это удобно, но создает ряд дополнительных проблем.
Простейший способ реализовать связывание файла - просто дублировать информацию о нем в обеих директориях. При этом, однако, может возникнуть проблема совместимости в случае, если владельцы этих директорий попытаются независимо друг от друга изменить содержимое файла. Например, в ОС CP/M запись в директории о файле непосредственно содержит адреса дисковых блоков. Поэтому копии тех же дисковых адресов должны быть сделаны и в другой директории, куда файл линкуется. Если один из пользователей что-то добавляет к файлу, новые блоки будут перечислены только у него в директории и не будут "видны" другому пользователю.
Рис. 12.11. Структура файловой системы с возможностью связывания файла с новым именем
Проблема такого рода может быть решена двумя способами. Первый из них - так называемая жесткая связь ( hard link). Если блоки данных файла перечислены не в директории, а в небольшой структуре данных (например, в индексном узле ), связанной собственно с файлом, то второй пользователь может связаться непосредственно с этой, уже существующей структурой.
Альтернативное решение - создание нового файла, который содержит путь к связываемому файлу. Такой подход называется символической линковкой ( soft или symbolic link ). При этом в соответствующем каталоге создается элемент, в котором имени связи сопоставляется некоторое имя файла (этот файл даже не обязан существовать к моменту создания символической связи ). Для символической связи может создаваться отдельный индексный узел и даже заводиться отдельный блок данных для хранения потенциально длинного имени файла.
Каждый из этих методов имеет свои минусы. В случае жесткой связи возникает необходимость поддержки счетчика ссылок на файл для корректной реализации операции удаления файла. Например, в Unix такой счетчик является одним из атрибутов, хранящихся в индексном узле . Удаление файла одним из пользователей уменьшает количество ссылок на файл на 1. Реальное удаление файла происходит, когда число ссылок на файл становится равным 0.
В случае символической линковки такая проблема не возникает, так как только реальный владелец имеет ссылку на индексный узел файла. Если собственник удаляет файл , то он разрушается, и попытки других пользователей работать с ним закончатся провалом. Удаление символического линка на файл никак не влияет. Проблема организации символической связи - потенциальное снижение скорости доступа к файлу. Файл символического линка хранит путь к файлу, содержащий список вложенных директорий, для прохождения по которому необходимо осуществить несколько обращений к диску.
Символический линк имеет то преимущество, что он может использоваться для организации удобного доступа к файлам удаленных компьютеров, если, например, добавить к пути сетевой адрес удаленной машины.
Циклический граф - структура более гибкая, нежели простое дерево , но работа с ней требует большой аккуратности. Поскольку теперь к файлу существует несколько путей, программа поиска файла может найти его на диске несколько раз. Простейшее практическое решение данной проблемы - ограничить число директорий при поиске. Полное устранение циклов при поиске - довольно трудоемкая процедура, выполняемая специальными утилитами и связанная с многократной трассировкой директорий файловой системы.
В ОС Linux команда mount используется для подключения (монтирования) файловых систем и переносных накопителей (например, USB-флешек) к конкретным точкам монтирования в дереве директорий. Команда umount отключает (размонтирует) смонтированную файловую систему от дерева директорий. В данном руководстве мы рассмотрим основы подключения и отключения различных файловых систем при помощи команд mount и umount.
Вывод списка смонтированных файловых систем(ФС)
При выполнении без аргументов команда mount выведет все подключенные в данный момент ФС:
По умолчанию результат будет содержать все ФС, в том числе виртуальные, такие как cgroup, sysfs и т. д. Каждая строка содержит информацию об имени устройства, директории, в которой оно смонтировано, типе и опциях монтирования в следующей форме:
Для отображения только ФС определенного типа используется опция -t. Например, так можно отобразить только разделы ext4:
Монтирование файловой системы
Для подключения файловой системы к конкретному местоположению (точке монтирования) команда mount используется в следующей форме:
После подключения точка монтирования становится корневой директорией смонтированной ФС. Например, смонтировать жесткий диск /dev/sdb1 в директорию /mnt/media можно следующим образом:
Обычно при монтировании устройства с распространенной ФС, например, ext4 или xfs, команда mount автоматически определяет ее тип. Однако, некоторые ФС не распознаются. Их тип нужно указывать в явном виде. Для этого используется опция -t:
Чтобы указать дополнительные опции монтирования, используется флаг -o:
Можно указать несколько опций, разделенных запятыми (после запятых не должно быть пробелов). Ниже предоставлены основные опции команды
Полный список опций можно получить, выполнив команду man mount.
Примеры использования mount
Давайте рассмотрим несколько примеров использования утилиты. Как правило для монтирования нужно выполнить всего два действия
- Создать точку монтирования
- Примонтировать файловую систему
Монтирование USB-накопителя/жесткого диска
В большинстве современных дистрибутивов Linux, например, Ubuntu, USB-накопители автоматически монтируются при подключении, но иногда может потребоваться ручное монтирование устройства. Чтобы смонтировать USB-накопитель, выполните следующие действия.
Создайте точку монтирования
Если USB-накопитель использует устройство /dev/sdd1, его можно смонтировать в директорию /media/usb следующей командой:
Для поиска устройства и типа файловой системы можно воспользоваться любой из следующих команд:
-
-l
- ls -l /dev/disk/by-id/usb*
- dmesg
- lsblk
Монтирование файлов ISO
Сначала нужно создать точку монтирования в любой желаемой директории:
Смонтируйте файл ISO следующей командой:
Не забудьте заменить /path/to/image.iso на путь к вашему файлу ISO.
Монтирование NFS
Для монтирования системы NFS требуется установить клиент NFS. Установка клиента NFS в Ubuntu и Debian:
Установка клиента NFS в CentOS и Fedora:
Создайте директорию, которая будет точкой монтирования удаленной файловой системы:
Обычно требуется автоматическое монтирование удаленной директории NFS при загрузке. Для этого нужно изменить файл конфигурации /etc/fstab. Откройте его в любом текстовом редакторе, например:
Добавьте в файл следующую строку, заменив сервер:/директория на имя или IP-адрес сервера NFS и экспортируемую директорию:
Смонтируйте ресурс NFS следующей командой:
Размонтирование файловой системы
Для отключения смонтированной файловой системы используется команда umount, в качестве аргумента которой указывается директория, в которую она была смонтирована (точка монтирования) или имя устройства:
Если файловая система используется, umount не сможет ее отключить. В таких ситуациях можно воспользоваться командой fuser, чтобы выяснить, какие процессы осуществляют доступ к файловой системе:
Во всех остальных случаях принудительное отключение нежелательно, так как может привести к повреждению данных в файловой системе.
Сохранение параметров mount после перезагрузки
Для того, что бы устройства при перезагрузки системы монтировались автоматически, необходимо прописать инструкции монтирования в файл /etc/fstab. Файл /etc/fstab содержит список записей в следующем формате:
Подключит устройство /dev/sdb1 (например жесткий диск) в директорию /home
После того как инструкция для mount прописаны в /etc/fstab, что бы проверить правильность написания дайте команду
Если команда отработает без ошибок, то все устройства прописанные в /etc/fstab будут подключены, а также изменения не потеряются после перезагрузки.
Заключение
Мы рассмотрели наиболее распространенные примеры подключения различных файловых систем к дереву директорий при помощи команды mount и их отключения командой umount. Для получения более подробной информации об опциях команд mount и umount можно обратиться к соответствующим man-страницам.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Читайте также: