Функции монтирования файловых систем

12 января 2026

ID vfs_mount_func

Функция mount()

Функция mount() предназначена для монтирования файловых систем. При использовании этой функции в KasperskyOS важно учитывать следующие особенности её реализации:

  • В KasperskyOS запрещено перемонтирование корневой файловой системы, если IPC-запрос на перемонтирование поступает от прикладной программы, а не от системной программы, реализующей виртуальную файловую систему. Этот запрос будет отклонен с ошибкой EACCES в IPC-ответе.
  • Для указания типов файловых систем доступно дополнительное значение auto для монтирования файловой системы, поддерживающей автоматическое монтирование.
  • Количество монтируемых файловых систем и поддерживаемых флагов монтирования в KasperskyOS ограничено по сравнению с реализацией функции в библиотеке libc.
  • Источник монтирования не может быть директорией.

В KasperskyOS работа с файловыми системами и сетью выполняется через отдельную системную программу, реализующую виртуальную файловую систему (англ. Virtual File System, VFS). По умолчанию программе VFS не сопоставляется программа, реализующая блочное устройство. Чтобы связать процесс используемой виртуальной файловой системы с требуемым блочным устройством, необходимо в файле CMakeLists.txt для сборки программы Einit использовать свойство blkdev::entity_REPLACEMENT функции set_target_properties. Возможные значения для свойства blkdev::entity_REPLACEMENT (реализации блочных устройств):

  • ramdisk_entity – RAM-диск, который считывает из ROMFS файлы ramdisk<N>.img и предоставляет их как файловые системы ramdisk<N>, где N – целое положительное число.
  • sdcard_ENTITY – драйвер SD-карты (MMC).
  • ata_ENTITY – драйвер AHCI (ATA).
  • "" (пустая строка) – взаимодействие между блочным устройством и виртуальной файловой системой не требуется.

Функция mount() объявлена в заголовочном файле sysroot-*-kos/include/sys/mount.h из состава KasperskyOS SDK:

int mount(const char *source, const char *target,

const char *filesystemtype, unsigned long mountflags,

const void *data);

Параметры функции:

  • source

    Источник монтирования: устройство или виртуальный объект (dummy). Поддерживаемые форматы:

    • <имя_устройства>[_p<номер_тома>] – полное имя устройства.
    • PARTLABEL=<метка>, где метка – метка раздела GPT (Globally Unique Identifier Partition Table).
    • PARTUUID=<uuid>, где uuid – GUID раздела GPT.

    При монтировании файловых систем, которым не требуется физическое устройство (например, ROMFS, ramfs, devfs), параметр source игнорируется.

  • target

    Директория, в которую будет смонтирована файловая система. Эта директория должна быть создана к моменту вызова функции mount().

  • filesystemtype

    Тип файловой системы. Допустимые значения:

    • romfs – файловая система только для чтения.
    • ramfs – файловая система, работающая в оперативной памяти. Используется по умолчанию для корневой файловой системы.
    • devfs – виртуальная файловая система для управления устройствами. Поддерживаемые устройства:
      • log – аналог /dev/log для системного журналирования;
      • null – аналог /dev/null для перенаправления и игнорирования вывода;
      • urandom – аналог /dev/random для генерации псевдослучайных чисел;
      • bpf, npf, tun0/1/2/3 – сетевые устройства для работы с сетевыми интерфейсами и фильтрами.
    • fat12, fat16, fat32, vfat – файловые системы семейства FAT. Одна реализация для всего семейства.
    • ext, ext2, ext3, ext4 – файловые системы семейства ext. Одна реализация для всего семейства.
    • ffs – файловая система, используемая в NetBSD.
    • auto – автоматические монтирование первой файловой системы из списка зарегистрированных, которая удовлетворяет условиям: требует наличие устройства и может быть смонтирована в автоматическом режиме (например, fat32, ext и ffs).
  • mountflags

    Флаги монтирования. Доступные значения:

    • MS_RDONLY – монтировать файловую систему в режиме только для чтения.
    • MS_STRICTATIME – всегда обновлять время последнего доступа к файлам при изменении их содержимого.
    • MS_SYNCHRONOUS – синхронная запись в файловую систему.
  • data

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

    • expand – расширить файловую систему на всё доступное пространство тома, если это разрешено структурой раздела;
    • check – инициировать полное автовосстановление файловой системы при монтировании.

В случае успеха функция возвращает 0, иначе возвращает -1. Если произошла ошибка, переменная errno устанавливается в значение, указывающее на причину ошибки. Возможные значения errno соответствуют стандартным значениям, определённым в библиотеке libc.

Функция umount()

Функция предназначена для размонтирования файловых систем и объявлена в заголовочном файле sysroot-*-kos/include/sys/mount.h из состава KasperskyOS SDK:

int umount(const char *target);

Параметры функции:

  • target

    Директория, из которой будет размонтирована файловая система.

В случае успеха функция возвращает 0, иначе возвращает -1. Если произошла ошибка, переменная errno устанавливается в значение, указывающее на причину ошибки. Возможные значения errno соответствуют стандартным значениям, определённым в библиотеке libc.

Пример вызова функций:

#include <sys/mount.h>

int main(void)

{

// Создать директорию /c с указанием

// прав доступа для всех пользователей

if (mkdir("/c", S_IRWXU | S_IRWXG | S_IRWXO)) {

fprintf(stderr, "Failed to create dir\n");

return -1;

}

// Смонтировать файловую систему ext2 с блочного устройства Ahci0Port0,0

// в директорию /c с использованием стандартных флагов монтирования

// и без дополнительных данных

if (mount("Ahci0Port0,0", "/c", "ext2", 0, "")) {

fprintf(stderr, "Failed to mount 'ext2'\n");

return -1;

}

// Создать директорию /c/ram с указанием

// прав доступа для всех пользователей

if (mkdir("/c/ram", S_IRWXU | S_IRWXG | S_IRWXO) != 0)

{

printf("Failed to create \"/c/ram\" dir\n");

return EXIT_FAILURE;

}

// Смонтировать файловую систему ramfs в директорию /c/ram

// с использованием стандартных флагов монтирования

// и без дополнительных данных

if (mount("nodev", "/c/ram", "ramfs", 0, "") != 0)

{

printf("Failed to mount ramfs, /c/ram (error %d: \"%s\")\n",

errno,

strerror(errno));

return EXIT_FAILURE;

}

// ...

// Размонтировать файловую систему из директории /c/ram

if (umount("/c/ram")) {

fprintf(stderr, "Failed to umount 'ramfs'\n");

return -1;

}

return 0;

}

Другие способы монтирования файловых систем см. в разделе "Монтирование файловых систем при запуске VFS".

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!