Как делает Linux, ядро, монтируют файловые системы? Что на самом деле делает это?

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

Если Вы не можете изменить программу, чтобы сделать так, используйте сам cronjob. Что-то вроде:

test -e /path/to/tempfile || ( /path/to/program && touch -a /path/to/tempfile )

Из-за пути Unix оценивает проверки условия, когда-то левая сторона || условие оценивает к true, все выражение верно, и правая сторона никогда не оценивается - IE, программу не называют.

Затем в parens, && требует, чтобы обе стороны оценили к истинному, итак, если /path/to/program выходы с ненулевым кодом возврата, нет никакого смысла в оценке оператора справа - выражение уже оценивает ко лжи - и /path/to/tempfile никогда не создается.

5
15.08.2013, 00:49
3 ответа

Существует компонент в ядре (названный виртуальной файловой системой или VFS, если коротко), который предоставляет универсальный интерфейс всем файловым системам. Это понимает вещи как типы файлов (регулярные файлы, каталоги, символьные ссылки, …), метаданные (времена, полномочия, …) и содержание файла.

Каждый процесс Linux живет в пространстве имен, которое указывает, где файловые системы смонтированы. Часто все процессы живут в том же пространстве имен; пространства имен главным образом предназначаются для поддержки виртуализации. Пространство имен является по существу набором путей с внутренней ссылкой файловой системы, связанной с каждым путем. Монтирование и размонтирование состоят из изменения того пространства имен.

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

Это - задание драйвера файловой системы для перевода команды в хранение данных или извлечения. Каждый тип файловой системы. Большинство драйверов файловой системы не взаимодействует непосредственно с аппаратными средствами, но только с другими драйверами. Драйвер для поддержанной диском файловой системы (ext4, btrfs, vfat, …) переводит команду в операции блочной системы хранения (чтение и секторы записи от раздела или другого блочного устройства). Драйвер для поддержанной сетью файловой системы (nfs, cifs, …) переводит команду в коммуникацию по сетевому каналу. Драйвер для внутренней файловой системы ядра (proc, sysfs, …) работает самостоятельно. Драйвер файловой системы FUSE передает команду на процесс пространства пользователя.

10
27.01.2020, 20:32

Для каждой файловой системы существует драйвер, записанный с API, который может вызвать VFS Linux, когда это сталкивается с объектом, хранившим в файловой системе того типа. Это позволяет прозрачность через всю иерархию каталогов относительно файла Linux - и ориентированные на файловую систему системные вызовы (так же как возможный, например, никакие полномочия на VFAT, поэтому chown(2) перестанет работать).

6
27.01.2020, 20:32
  • 1
    Таким образом, там существует один драйвер основного устройства на файловую систему, потому что, т.е. сама файловая система может думаться так же просто спецификация абстракции, не обязательно, что получит доступ к носителям, как блочное устройство, несущее биты, и т.д., как привилегированный архитектурный код, было бы (например, x86, C, блок, и т.д.). –  Megaloma 15.08.2013, 00:51
  • 2
    Точно. Это позволяет Вам, например, поместило ext3 файловую систему на CD или в файле. –  Ignacio Vazquez-Abrams 15.08.2013, 00:51
  • 3
    Но от другого ядра, т.е. Windows, ядра или ОС не имеет возможности получить доступ обезжиренный или файловые системы NTFS, таким образом, любая ext3 файловая система, сохраненная на CD-ROM, не может быть смонтирована как доступный диск. –  Megaloma 15.08.2013, 00:54
  • 4
    Проблема на самом деле больше, чем это. Даже с ext3 драйвером, Windows предполагает, что оптические среды могут только иметь ISO9660 или файловые системы UDF; можно создать CD NTFS в соответствии с Linux, но Windows все еще не сможет считать его. –  Ignacio Vazquez-Abrams 15.08.2013, 01:09
  • 5
    Linux может получить доступ к любой файловой системе где угодно (принимающий соответствующие драйверы), из-за (по-видимому) бесконечной вложенной возможности ее VFS. Я не попробовал его в соответствии с Windows 8, но я не был бы удивлен, не работало ли это все еще. –  Ignacio Vazquez-Abrams 15.08.2013, 01:12

Каждый тип FileSystem является драйвером в ядре. Драйвер FileSystem называет дисковый драйвер для доступа к блочному устройству.

0
27.01.2020, 20:32
  • 1
    VFS, назовите дисковый драйвер к аппаратным средствам. –  Edward Shen 15.08.2013, 04:42
  • 2
    не обязательно живет на блочных устройствах. Рассмотрите сетевые файловые системы, procfs, sysfs, возможно tmpfs/shmfs... –  a CVn 15.08.2013, 10:32

Теги

Похожие вопросы