%20%D1%81%20%D0%BA%D1%80%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC(2).png)
У меня есть программное обеспечение, которое программно отмонтирует раздел (если он не занят) и монтирует его снова после того, как вся работа будет выполнена.
Если я запущу это в терминале:
sudo mount /dev/sdb1 /mnt/fat32 -o sync,dirsync,rw,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro -t vfat
Я получаю это в /proc/self/mountinfo
:
100 24 8:17 / /mnt/fat32 rw,relatime shared:61 - vfat /dev/sdb1 rw,sync,dirsync,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro
Поэтому я создал парсер mountinfo и получил данные для восстановления монтирования, но у меня возникли проблемы с преобразованием параметров монтирования ( rw,relatime
) и параметров super (последняя часть в /mountinfo
: rw,sync,dirsync,
...) с помощью mountoptions
и data
:
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
Мой подход заключался в том, чтобы преобразовать параметры монтирования в соответствующие mountflags
и указать специальные параметры непосредственно в data
, но затем я получаю эту ошибку:
[62857.390803] FAT-fs (sdb1): Unrecognized mount option "rw" or missing value
Поэтому я создал функцию для копирования атрибутов в super options, которая просто соответствует данным, специфичным для файловой системы, и теперь это работает. Но у меня все еще есть проблема: как мне установить, например, sync
и dirsync
если их нет в флагах mount options и если они не для vfat специфичных атрибутов?
Если это можно сделать через командную строку, то это можно сделать и в версии для командной строки, верно?
решение1
решение2
Поэтому я сделал
mountinfo
парсер[…]
Лучше использовать setmntent()
и getmntent()
, которые входят в библиотеку времени выполнения GNU C.
Мой подход заключался в том, чтобы преобразовать параметры монтирования в соответствующие
mountflags
и предоставить специальные параметры напрямуюdata
[…]
Что вам нужно сделать, так это взять mnt_opts
данные вам getmntent()
и обработать их в flags
и data
. mount
Команда из util-linux
пакета опирается на библиотеку для этого, названнуюlibmount. Часть из них основана на таблицах, специфичных для Linux.
дальнейшее чтение
- "Файл
mtab
".Справочное руководство по библиотеке GNU C. 2.23. Фонд свободного программного обеспечения. 2016. - Карел Зак (2012). "Варианты крепления".Справочное руководство по libmount2.21. Архивы ядра Linux.