Intereting Posts
Субдомен для Nagios Удалить токен перед курсором Как работает этот скрипт svn? Как перезапустить поток отфильтрованного видео с помощью VLC? Как подсчитать вхождение строки, искать между шаблоном для определенной строки Live Linux Distro, который как можно меньше (нет X, нет сетей, bash) getty начать с командной строки? ПУТЬ env var объявлен в / etc / environment не наследуется? Как захватить ввод командной строки в файл журнала и выполнить его одновременно? Где находятся файлы конфигурации systemd? Недостаточно места на диске: удалите первые n строк текстового файла без копирования файла переключиться на существующий эмулятор терминала с помощью команды (wmctrl) или сочетания клавиш Поведение bash при удалении каталога, в котором вы находитесь Два раздела жесткого диска с тем же именем приводят к неопределенным каталогам Почему «Завершение всех оставшихся процессов завершается» при завершении работы?

Что происходит, когда диск смонтирован?

Когда флэш-диск / жесткий диск подключен к системе, он должен быть установлен. Что именно происходит в процессе монтажа? Как система / kernel ​​отслеживает содержимое флешки?

Прежде всего, если у вас не запущено программное обеспечение для этого, оно на самом деле не будет подключено автоматически. Такое поведение полностью обрабатывается из пользовательского пространства, а не в ядре, что довольно важно, поскольку автоматическое монтирование – это кошмар для безопасности (возможно сбой или, по крайней мере, DoS большинства систем с тщательно созданным образом файловой системы).

Теперь, что касается того, что на самом деле происходит, она представляет собой общую последовательность в Linux, использующую стандартную комбинацию udev и udisks для запуска автомонтирования:

  1. Устройство физически подключено и перечисляется kernelм. Ядро распознает его как какое-то блочное устройство, устанавливает соответствующие драйверы для предоставления этого интерфейса пользовательскому пространству, а затем запускает событие, сообщающее всем, кто прослушивает в пользовательском пространстве, что новое оборудование подключено.
  2. Ядро сканирует устройство на наличие разделов.
  3. Udev видит это событие и настраивает различные узлы устройства и ссылки в /dev для устройства. Затем он сканирует устройство и его разделы, чтобы увидеть, какие файловые системы присутствуют и где, и сохраняет эти данные там, где другие программы могут запросить его.
  4. Udisks видит событие в ядре, проверяет, что udev завершил настройку, и затем проверяет, обнаружила ли сканирование, выполненное udev на шаге 3, какие-либо файловые системы. Если это так, и udisks настроен на автоматическое монтирование вновь подключенных файловых систем, он выдает ядру запрос на монтирование для каждой файловой системы.
  5. Ядро монтирует файловую систему, выполняя внутренне следующее (значительно упрощенное):
    • Сначала он проверяет наличие соответствующего драйвера для типа файловой системы и, если нет, пытается загрузить его.
    • Драйвер файловой системы анализирует все необходимые метаданные из суперблока файловой системы (именно здесь хранятся все метаданные о самой файловой системе).
    • Копия суперблока в памяти создается и заполняется данными, предоставленными драйвером файловой системы и командой mount. Эта структура данных используется kernelм для внутреннего обращения к файловой системе. Любые другие внутренние ссылки на файловую систему внутри ядра в конечном итоге указывают на это.
    • Затем kernel ​​обновляет свою внутреннюю таблицу монтирования со ссылкой на этот суперблок в памяти.

Что касается того, как kernel ​​«следит за контентом», то это намного сложнее объяснить правильно. Короче говоря, это не так. Всякий раз, когда вы пытаетесь получить доступ к файлу на устройстве, kernel ​​ищет его в корне файловой системы. Для ускорения этого процесса используется кэш, но он не критичен ни для чего, кроме производительности.

Он отслеживает содержимое флэш-накопителя, сохраняя его на флэш-накопителе.

Он также имеет таблицу монтирования (в ядре). Он знает, что /dev/disk/by-label/home (ссылка на реальное устройство) монтируется в /home . Он знает, что usb-flash монтируется на /media/my-flash Когда вы переключаете dir в эти каталоги, он перемещается на другое устройство.

Используйте mount и df -h для просмотра текущего состояния монтирования.

Современные графические интерфейсы Linux, такие как GNOME, монтируют файловые системы, отправляя запросы в фоновый процесс udisks («служба»). Как правило, они делают это автоматически, когда вы подключаете диск. Может быть трудно найти способ остановить их, чтобы вы могли проверить эффект таких команд, как mount для себя. Один из простых способов избежать этого – войти в текстовую консоль. (Для получения дополнительной информации о входе в систему на текстовой консоли см. Здесь )

Также есть команда, которую вы можете использовать для отправки запросов на udisks . Текущая версия этой команды называется udisksctl .

Когда вы подключаете USB-накопитель, (обычно) драйвер USB-накопителя «привязывается» к нему и создает блочное устройство . [*] В Linux: смотрите lsblk (список блочных устройств).

Точно так же, когда вы mount блочное устройство, вы привязываете к нему некоторое программное обеспечение файловой системы. Существует разное программное обеспечение для разных форматов файловой системы. Например, файловая система FAT32 часто используется на флэш-накопителях; Linux называет эту файловую систему типом vfat . Когда вы запускаете mount , вы должны указать два параметра: устройство и имя каталога, в который будет монтироваться файловая система. Когда вы получаете доступ к этому имени каталога (например, ls /mnt ), вы увидите смонтированную файловую систему вместо исходного каталога.

Если вы запустите mount без параметров, он выведет список ваших смонтированных файловых систем. В Linux, однако, man mount скажет вам, что лучше использовать findmnt для findmnt списка файловых систем. findmnt хороший вывод, который помогает организовать множество виртуальных файловых систем, которые вы смонтировали в Linux (хотя он не сортирует их по алфавиту, как ls ).

df -h также хороший вывод, поскольку он исключает многие виртуальные файловые системы, которые есть в Linux, и показывает доступное пространство в каждой файловой системе. (Строго говоря, некоторые сложные настройки файловой системы Linux могут иметь более сложную обработку доступного пространства, чем показано, например, они могут потребовать меньше места для данных файла, сжимая его).

Все файлы, к которым вы можете получить доступ, хранятся в некоторой смонтированной файловой системе. Обратите внимание, что / отображается в списке смонтированных файловых систем. / – это корневой каталог. / – это первая часть полного «пути» (местоположения) любого файла. (Примечание: полный путь к файлу описывается как «абсолютный» путь).


В корневой файловой системе есть одна особенность: umount (un-mount) не может работать на ней. Корневая файловая система всегда считается используемой.

Последовательность завершения работы системы перемонтирует корневую файловую систему только для чтения ( mount / -o remount,ro ). Перемонтирование файловой системы только для чтения – это способ запросить, чтобы она записала все измененные файлы, например, на блочное устройство, которое является вашим жестким диском, и подготовилась к чистому отключению. В этом смысле он служит той же цели, что и размонтирование.

Некоторое низкоуровневое программное обеспечение Linux может заменить корневую файловую систему другой монтированной файловой системой; это называется pivot_root . Тогда старая корневая файловая система может быть размонтирована. Для этого требуется ряд конкретных условий, которые я не буду пытаться объяснить здесь. Эта функция была создана для обслуживания процесса загрузки универсальных дистрибутивов Linux, где монтируется исходная файловая система на базе оперативной памяти (initramfs), а затем поворачивается к реальной корневой файловой системе. Здесь есть объяснение, почему они это делают.

[*] В Linux первому устройству, использующему драйвер sd присваивается имя sda и т. Д.

USB-устройства хранения принимают некоторые формы SCSI. Таким образом, драйвер USB-накопителя предоставляет устройство SCSI; Драйвер sd (диск SCSI) связывается с устройством SCSI и предоставляет блочное устройство.

sd используется для многих типов блочных устройств. Это не обязательно физические диски, а также оборудование может использовать различные команды, которые должны быть переведены из SCSI. Компьютеры странные; причина таких моделей может зависеть от многих исторических деталей, которые не обязательно имеют отношение к делу .