Точка монтирования linux что это такое

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Монтирование и демонтирование файловых систем в Linux

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

  1. Подключение и отключение файловых систем вручную.
  2. Управление автоматическим монтированием файловых систем.
  3. Подключение съемных носителей информации.

Основные команды, которые позволяют решать вопросы указанные выше:

Данный файл – это файл настройки автоматического подключения файловых систем. Точкой монтирования, является пустой каталог на нашей файловой системе.

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

К виртуальной машине подключен диск, определяемый операционной системой /dev/sdc , а на нем создан раздел /dev/sdc1 с файловой системой ext4. Мы можем посмотреть, что на нем ls –l /dev/sdc1 .

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

Правилом хорошего тона является монтирование файловых систем в папки mnt и media . Обычно папку mnt используют для монтирования разделов, а папку media для монтирования съемных носителей информации. Т.е папка mnt пустая и туда у нас ничего не монтируется, можно создать внутри папку mkdir /mnt/hard . Теперь мы можем смонтировать в данную папку наш жесткий диск, подключенный к виртуальной машине. Монтирование осуществляется следующим образом mount /dev/sdc1 /mnt/hard или mount –t ext4 /dev/sdc1 /mnt/hard . Linux очень хорошо самостоятельно определяет тип файловой системы и в написании команд можно данную опцию опустить.

Как мы видим все смонтировалось и так как файловая система журналируемая появилась папочка lost+found .

Вообще в линуксе вся файловая система –это такое иерархическое дерево с файлами и папками, подпапками. Все эти файлы и папки вообще могут находится на разных устройствах, в том числе и на сетевых устройствах. Это может быть даже сетевая папка, подключенная к нашей системе. Мы подключили /dev/sdc1 в папку /mnt/hard .

Мы можем выполнить команду mount , которая покажет нам, что и куда смонтированно.

Мы видим все файловые системы смонтированные. В том числе только, что примонтированный жесткий диск. Так же мы можем увидеть виртуальные файловые системы, типа proc .

Виртуальная файловая система proc содержит все запущенные процессы и смонтирована в папку /proc . Как мы видим из скриншота их достаточно много. Помимо тех файловых систем, которые созданы на носителях, примонтированно много виртуальных файловых систем. Можно увидеть, что они смонтированы в разные папки согласно их предназначению.

Отмонтировать можно командой umount /dev/sdc1 . Следовательно мы можем увидеть ls /mnt/hard , что папка пустая. Иногда при выполнении команды на отмонтирование система ругается, это происходит если мы данную файловую систему, каким-нибудь образом используем, например, если открыт файл с данной папки или подпапки. Следовательно, необходимо завершить все операции, после этого система нам даст отмонтировать.

Чтобы вот так вручную не подключать или не отключать разделы, есть файлик /etc/fstab . В нем находятся настройки автоматического монтирования файловых систем.

Если в данном файлике не сделать запись, то после перезагрузки система не подключит подмонтированную файловую систему, автоматически. Что касается настройки: в файле мы указываем устройство с файловой системой, затем точку монтирования, тип файловой системы, опции и пара настроек. Dump – говорит нам о том, сохранять ли файлы автоматом на данной файловой системе при отключении системы. Т.е если у нас пропало питание или идет завершение работы. Принимаемые значения 1 — файлики будут сохранятся, 0 не будет сохранятся. Параметр Pass указывает порядок проверки файловых систем. Обычно 1 у корневой файловой системы, у всех последующих 2, у съемных носителей 0. Операционная система Linux обычно позволяет смонтировать файловую систему по UUID. Т.е устройство можно указывать не только в явном виде, но и по метке, и по идентификатору. Указывать по идентификатору надежнее мы можем переименовать устройство или переставить жесткие диски и тогда загрузочный раздел окажется не /dev/sda1 , а например /dev/sdc1 . Чтобы подобного не произошло, лучше файловые системы прописывать с помощью идентификатора. Потому, что идентификаторы прописаны жестко к каждому разделу и изменить мы их не можем. И это будет более стабильная работа. В нашем же случае мы видим, что основной раздел смонтирован. Имеет файловую систему ext4 . Про опции монтирования можно прочитать в мануале к файлу fstab .

Ну и как можно увидеть примонтирован еще один раздел без точки монтирования – это раздел подкачки swap .

Можно еще одну интересную вещь заметить, при попытке нового монтирования файловой системы от обычного пользователя операционная система ругнется, что только пользователь root может это сделать, но как только мы пропишем данное монтирование в файл /etc/fstab и скажем, что пользователь обычный имеет право монтировать данную файловую систему, то система совершенно спокойно даст примонтировать без повышения привилегий. Соответственно редактировать данный файл совершенно просто. Открываем его любым редактором в режиме суперпользователя и добавляем данные по монтируемой файловой системе. Если при монтировании вы не знаете какой тип файловой системы, можно просто указать auto и операционная система автоматически ее определит тип файловой системы при монтировании. Далее интересная вещь – это опции при монтировании можно указать defaults (чтение ( ro ), запись ( rw ), выполнение ( execute ), nouser ). Параметр user- т.е любой пользователь может монтировать и демонтировать данную файловую систему, если данные параметр не указать, тогда только суперпользователь сможет выполнять данные действия. Параметр auto – т.е данный параметр будет автоматически подключать данную файловую систему при старте компьютера или сервера. Параметр noexec — данный параметр запрещает запуск исполняемых файлов на данной файловой системе. После добавления записи в файл /etc/fstab , мы можем примонтировать файловую систему командой от обычного пользователя mount /mnt/hard . Система обратится к файлу /etc/fstab проверит запись и опции, если есть указанная точка монтирования и в опциях запись user система успешно подмонтирует файловую систему. Аналогично можно провести обратную операцию размонтирования unmount /mnt/hard .

Читайте также:  Как отключить графический интерфейс windows

Есть хорошая команда, которой приходится пользоваться, особенно если создаем raid массивы – это blkid . Данная команда позволяет посмотреть блочные устройства. Работает от суперпользователя sudo blkid /dev/sdc1 .

Команда показывает, какой uuid имеется у устройства. И мы можем в файле /etc/fstab , можем указать не имя устройства, а UUID = a783a365-3758-47bd-9f2d-1f5b4155f4ca. И это будет надежнее указание UUID, чем имена дисков, потому что имена дисков могут меняться.

Раньше в файле /etc/fstab так же прописывалось монтирование съемных носителей USB флешки, CD-ROM и т.д создавалась запись для файловой системы с правами read-only и что при необходимости смонтировать могут любые пользователи, автоматически флопик и CD-ROM не монтировались. Современные дистрибутивы, включаю Ubuntu последних версий, в том числе пользовательские, с красивыми оболочками Gnome и KDE есть файловый менеджер Nautilus. У данного файлового менеджера есть свои настройки, которые позволяют автоматически монтировать, все что мы подключаем.

В случае если мы работаем на серверной операционной системе, например, Ubuntu или CentOS, то понятно в дефолтной конфигурации у нас нету авто монтирования и прочих радостей десктопной версии. Поэтому делаем простую вещь. Вставляем носитель с файловой системой, второй шаг blkid находим наше устройство и третий шаг монтируем, командой mount .

Правилом хорошего тона является монтирование всех устройств в папку /media . Здесь обычно располагаются папки cdrom, можно создать папки floppy или usb . И последний нюанс, после того, как вы поработали с флешкой и от монтировали, необходимо корректно ее вытащить. Даем команду eject .

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Источник

Что такое точки монтирования в Linux и как их посмотреть

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

Итак, вряд ли для кого-то станет сюрпризом то, что Linux позволяет разбивать накопитель (HDD или SSD) на разделы. Мы можем установить файловую систему без журналирования на раздел с каталогом /boot, отдельную файловую систему для корня и для каталога /home. Количество разделов в данном случае не важно, ведь получить доступ к данным всё равно возможно только через корневой каталог /. Именно в него монтируются все разделы — либо непосредственно в корень, либо в одну из папок, которые и называются точками монтирования.

Посмотреть точки монтирования несложно. Для этого используем команду

Команда mount в Linux.

Нужно отметить, что вывод команды mount не особо удобно читать. Связано это с тем, что snap и flatpack несколько засоряют этот перечень своими точками монтирования. Поэтому воспользуемся командой grep , которая выведет только нужные нам строки. Например, мы хотим посмотреть устройства. Для этого нам надо найти строки, в которых упоминается каталог /dev:

Что касается накопителей, то посмотреть точки монтирования можно и через

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

Точки монтирования — удобный инструмент настройки структуры каталогов Linux. Прозрачный процесс управления монтированием разделов можно считать преимуществом, которое выгодно отличает Linux от Windows.

Источник

Глубокое погружение в Linux namespaces, часть 3

Mount namespaces изолируют ресурсы файловых систем. Это по большей части включает всё, что имеет отношение к файлам в системе. Среди охватываемых ресурсов есть файл, содержащий список точек монтирования, которые видны процессу, и, как мы намекали во вступительном посте, изолирование может обеспечить такое поведение, что изменение списка (или любого другого файла) в пределах некоторого mount namespace инстанса M не будет влиять на этот список в другом инстансе (так что только процессы в M увидят изменения)

Точки монтирования

Вам может быть интересно, почему мы так сфокусировались на кажущимся произвольно выбранном файле, содержащим в себе список точек монтрирования. Что в нём такого особенного? Список точек монтирования даёт процессу полное описание доступных файловых систем в системе и, поскольку мы пребываем на территории Linux с мантрой всё есть файл, видимость почти каждого ресурса диктуется этим описанием: от фактических файлов и устройств до информации о том, какие другие процессы также запущены в системе. Таким образом, это даёт огромный выигрыш в безопасности для isolate , позволяющий точно указывать о каких именно частях системы будут в курсе команды, которые мы хотим выполнить. Пространства имён mount в сочетании с точками монтирования являются очень мощным инструментом, который позволит нам этого достичь.

Читайте также:  There is problem with this windows installer package как решить

Мы можем видеть точки монтирования, видимые для процесса с id $pid посредством файла /proc/$pid/mounts — его содержимое одинаково для всех процессов, принадлежащих к тому же mount namespace, что и $pid :

В списке, полученном на моей системе, видно устройство /dev/sda1 , смонтированное в / (ваше может быть другим). Это дисковое устройство, на котором размещена корневая файловая система, которая содержит всё что нужно для запуска и правильной работы системы, поэтому было бы здорово, если бы isolate запускала команды без ведома о таких файловых системах.

Давайте начнём с запуска терминала в его собственном mount namespace:

Строго говоря, нам не понадобится доступ уровня суперпользователя для работы с новыми пространствами имён mount, поскольку мы добавим процедуры настройки user namespace из предыдущего поста. В результате в этом посте мы предполагаем, что только команды unshare в терминале выполняются от суперпользователя. Для isolate в таком предположении необходимости нет.

Хммм, мы всё еще можем видеть тот же самый список, что и в корневом mount namespace. Особенно после того, как в предыдущем посте стало ясно, что новый user namepace начинается с чистого листа, может показаться, что флаг -m , который мы передали unshare , не дал никакого эффекта.
Процесс шелла фактически выполняется в другом mount namespace (мы можем убедиться в этом, сравнив файл симлинка ls -l /proc/$$/mnt с файлом другой копии шелла, работающей в корневом mount namespace). Причина, по которой мы все еще видим тот же список, заключается в том, что всякий раз, когда мы создаем новый mount namespace (дочерний), в качестве дочернего списка используется копия точек монтирования mount namespace, в котором происходило создание (родительского). Теперь любые изменения, которые мы вносим в этот файл (например, путём монтирования файловой системы), будут невидимы для всех других процессов.
Однако изменение практически любого другого файла на этом этапе будет влиять на другие процессы, поскольку мы всё ещё ссылаемся на те же самые файлы (Linux только делает копии особых файлов, таких как список точек монтирования). Это означает, что сейчас у нас минимальная изолированность. Если мы хотим ограничить то, что будет видеть наш командный процесс, мы должны сами обновить этот список.

Теперь, с одной стороны, поскольку мы пытаемся позаботиться о безопасности, мы могли бы просто сказать нах* всё и сделать в isolate полную очистку содержимого этого списка перед выполнение команды. Но это сделает запуск команды бесполезным, поскольку каждая программа, по крайней мере, зависит от ресурсов, вроде файлов операционной системы, которые, в свою очередь, обеспеченны какой-то файловой системой. С другой стороны, мы могли бы просто выполнить команду как есть, расшарив на неё те же файловые системы, что содержат необходимые системные файлы. Но это сводит на нет цель этого производимого нами дальше изолирования.

Лучшее решение — предоставить программе собственную копию зависимостей и системных файлов, которые требуются для запуска целиком в «песочнице», чтобы она могла вносить в них какие-либо изменения, не влияя на другие программы в системе. По лучшему сценарию мы можем поместить эти файлы в файловую систему и смонтировать её как корневую файловую систему (в корневой каталог / ) до выполнения ничего не подозревающей программы. Идея заключается в том, что поскольку всё, что доступно процессу, должно достигаться через корневую файловую систему, и поскольку мы будем точно знать, какие файлы мы туда помещаем для командного процесса, мы будем спокойны, зная, что он должным образом изолирован от остальной системы.

Хорошо, в теории это звучит хорошо и для реализации этого мы сделаем следующее:

  1. Создадим копию зависимостей и системных файлов, необходимых команде.
  2. Создадим новый mount namespace.
  3. Заменим корневую файловую систему в новом mount namespace на ту, которая содержит копии наших системных файлов.
  4. Выполним программу в новом mount namespace.

Корневые файловые системы

Уже на шаге 1 возникает вопрос: какие системные файлы нужны команде, которую мы хотим запустить? Мы могли бы порыться в нашей собственной корневой файловой системе и, задаваясь этим вопросом по каждому файлу, с которым мы столкнемся, брать только те, на которые ответ положительный, но это выглядит больно и излишне. Кроме того, какую команду будет выполнять isolate , мы изначально не знаем.

Вот если бы только у людей уже была такая же проблема и они собрали набор системных файлов, в целом достаточный, чтобы служить базой прямо из коробки для большинства программ? К счастью, есть много проектов, что реализовали это! Одним из них является проект Alpine Linux (его основное предназначение, это когда вы начинаете свой Dockerfile с FROM alpine:xxx ). Alpine предоставляет корневые файловые системы, которые мы можем использовать для наших целей. Если вы последуете инструкциями, то сможете получить копию их минимальной корневой файловой системы ( MINI ROOT FILESYSTEM ) для x86_64 здесь. Последней версией на момент написания поста и которую мы будем использовать, является v3.10.1 .

В каталоге rootfs есть знакомые файлы, прям как в нашей собственной корневой файловой системе в / , но убедитесь, насколько он минимален — многие из этих каталогов пусты:

Читайте также:  Линукс read only file system

Отлично! Мы можем дать команду, которая запустится в копии этого окружения, и она может быть даже sudo rm -rf / , но нас это не будет волновать, а никто другой не пострадает.

Pivot root

Имея наш новый mount namespace и копию системных файлов, мы хотели бы смонтировать эти файлы в корневом каталоге нового mount namespace не выбивая землю из под наших ног. Linux предлагает нам системный вызов pivot_root (есть соответствующая команда), который позволяет нам контролировать то, что именно процессы видят как корневую файловую систему.
Команда принимает два аргумента: pivot_root new_root put_old , где new_root — это путь к файловой системе, будущей вскоре корневой файловой системой, а put_old — путь к каталогу. Это работает так:

  1. Монтирование корневой файловой системы вызывающего процесса в put_old .
  2. Монтирование new_root в качестве корневой файловой системы в / .

Давайте посмотрим на это в действии. В нашем новом mount namespace мы начинаем с создания файловой системы из наших файлов alpine:

Затем мы делаем pivot root:

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

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

Реализация

Мы можем повторить в коде то, что делали выше, заменив команду pivot_root соответствующим системным вызовом. Сначала мы создаем наш команды процесс в новом mount namespace, добавляя флаг CLONE_NEWNS для clone .

Затем мы создаём функцию prepare_mntns которая, получив путь до каталога, содержащего системные файлы ( rootfs ), настраивает текущий mount namespace посредством pivoting’а корневого каталога текущего процесса на rootfs , что мы создали ранее.

Нам нужно вызвать эту функцию из нашего кода и это должно быть выполнено нашим командным процессом в cmd_exec (поскольку он работает в новом mount namespace) до фактического начала выполнения команды.

Давайте попробуем это:

Этот вывод показывает что-то странное: мы не можем проверить список монтирования, за который так тяжело боролись, и ps говорит нам, что нет процессов, запущенных в системе (нет даже текущего процесса или самого ps ?). Более вероятно, что мы что-то сломали при настройке mount namespace.

PID Namespaces

Мы уже несколько раз упоминали каталог /proc в этой серии постов, и если вы были знакомы с ним, то, вероятно, не будете удивлены тому, что вывод ps оказался пустым, поскольку мы видели ранее, что каталог был пуст в этом mount namespace (когда мы получили его из корневой файловой системы alpine).

Каталог /proc в Linux обычно используется для доступа к специальной файловой системе (называемой файловой системой proc), которой управляет сам Linux. Linux использует его для предоставления информации обо всех процессах, запущенных в системе, а также другой системной информации, касающейся устройств, прерываний и так далее. Всякий раз, когда мы запускаем такую команду, как ps , выдающую сведения о процессах в системе, она обращается к этой файловой системе для получения информации.
Другими словами, нам нужно завести файловую систему proc . К счастью, в основном для это потребуется лишь сообщить Linux, что она нам нужна, причем желательно смонтированная в /proc. Но пока мы не можем этого сделать, поскольку наш командный процесс всё ещё зависит от той же файловой системы proc , что и isolate и любой другой обычный процесс в системе. Чтобы избавиться от этой зависимости, нам нужно запустить его внутри собственного PID namespace.

PID namespace изолирует ID процессов в системе. Одним из следствий тут является то, что выполняющиеся в разных пространствах имён PID процессы могут иметь одинаковые идентификаторы процесса, не конфликтуя друг с другом. Допусти, мы изолируем это пространство имён потому, что мы хотим обеспечить как можно большую изолированность нашей запущенной команде. Однако более интересная причина, по которой мы рассматриваем это здесь, заключается в том, что монтирование файловой системы proc требует привилегий пользователя root, а текущий PID namespace принадлежит пользователю root, где у нас нет достаточных привилегий (если вы помните из предыдущего поста, root у командного процесса на самом деле не root). Итак, мы должны работать в PID namespace, владельцем которого является пользователь пространства имён, которое считает наш командный процесс запущенным от root.

Мы можем создать новый PID namespace, передав CLONE_NEWPID для clone :

Затем мы добавляем функцию prepare_procfs , которая настраивает файловую систему proc, монтируя её в текущих пространствах имён mount и pid.

Наконец, мы вызываем функцию прямо перед размонтированием put_old в нашей функции prepare_mntns , после того, как мы настроили mount namespace и перешли в корневой каталог.

Мы можем воспользоваться isolate для очередного запуска:

Это выглядит намного лучше! Шелл считает себя единственным процессом, запущенным в системе и работающем с PID 1(поскольку это был первый процесс, запущенный в этом новом PID namespace)

В этом посте были рассмотрены два пространства имён и isoated получил в итоге две новые фичи. В следующем посте мы посмотрим на изолирование в пространствах имён Network . Там нам придётся иметь дело с некоторой сложной низкоуровневой сетевой конфигурацией, чтобы попытаться включить сетевое взаимодействие между процессами в разных пространствах имён network.

Источник

Оцените статью