[РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

[РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение IMB »

Доброго дня!
Необходимо монтировать SD-карту для записи файлов, для этого думаю использовать mount из libc (http://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html#Mount_002dUnmount_002dRemount)
Проблема в том, что одним из параметров команда принимает тип файловой системы. Пока сделал два вызова mount для vfat и ext3, буду проверять как работает.
Как возможно узнать тип файловой системы на сменном носителе до его монтирования?
Спасибо.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение rm_ »

Код: Выделить всё

$ sudo file -s /dev/md0
/dev/md0: sticky Linux rev 1.0 ext4 filesystem data

$ sudo file -s /dev/md3
/dev/md3: sticky BTRFS Filesystem (label "home", sectorsize 4096, nodesize 16384, leafsize 16384)

Но по-моему то, что вы делаете, это какой-то корявый подход.
почему бы просто не вызывать "/bin/mount -t auto ..."?
в *NIX-системах вызов внешних программ для выполнения отдельных задач является нормой, не обязательно ограничивать себя строго библиотеками.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение IMB »

Возможно Вы и правы.
Просто всё это будет работать на встраиваемой системе и чем меньше внешних зависимостей, тем меньше вероятность забыть собрать эту зависимость. А отлавливать проблему на готов изделии удовольствие меньше среднего.
Что ж, не буду не забывать о "запасном аэродроме" в виде system()
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение liaonau »

udev, например, использует blkid.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение rm_ »

IMB писал(а):
25.02.2013 15:55
Возможно Вы и правы.
Просто всё это будет работать на встраиваемой системе и чем меньше внешних зависимостей, тем меньше вероятность забыть собрать эту зависимость. А отлавливать проблему на готов изделии удовольствие меньше среднего.
Что ж, не буду не забывать о "запасном аэродроме" в виде system()

Уж mount всегда есть, а вот "file" может и не быть.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение bormant »

IMB писал(а):
25.02.2013 15:30
Проблема в том, что одним из параметров команда принимает тип файловой системы.
man mount
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
...
-t, --types vfstype
...
If no -t option is given, or if the auto type is specified, mount will try to guess the desired
type. Mount uses the blkid library for guessing the filesystem type; if that does not turn up
anything that looks familiar, mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there will be tried, except for
those that are labeled "nodev" (e.g., devpts, proc and nfs). If /etc/filesystems ends in a line
with a single * only, mount will read /proc/filesystems afterwards.

The auto type may be useful for user-mounted floppies. Creating a file /etc/filesystems can be
useful to change the probe order (e.g., to try vfat before msdos or ext3 before ext2) or if you
use a kernel module autoloader.

More than one type may be specified in a comma separated list. The list of filesystem types can
be prefixed with no to specify the filesystem types on which no action should be taken. (This can
be meaningful with the -a option.) For example, the command:

mount -a -t nomsdos,ext

mounts all filesystems except those of type msdos and ext.
Так в чём же, с учётом процитированного, проблема?

ps. Параметры в квадратных скобках не являются обязательными.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение serzh-z »

bormant писал(а):
26.02.2013 12:33
Так в чём же, с учётом процитированного, проблема?
В эффекте Даннинга - Крюгера, полагаю.

IMB писал(а):
25.02.2013 15:30
Как возможно узнать тип файловой системы на сменном носителе до его монтирования?

Используя libblkid из util-linux. Примерно так:

Код: Выделить всё

fd = open(devname, O_RDONLY);
blprobe = blkid_new_probe();
blkid_probe_set_device(blprobe, fd, 0, 0);
blkid_probe_enable_superblocks(blprobe, 1);
blkid_probe_set_superblocks_flags(blprobe, BLKID_SUBLKS_TYPE);
blkid_do_safeprobe(blprobe);
blkid_probe_lookup_value(blprobe, "FSTYPE", &data, NULL);

// data содержит тип ФС
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение drBatty »

IMB писал(а):
25.02.2013 15:30
Необходимо монтировать SD-карту для записи файлов, для этого думаю использовать mount из libc (http://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html#Mount_002dUnmount_002dRemount)

bormant писал(а):
26.02.2013 12:33
ps. Параметры в квадратных скобках не являются обязательными.

вообще-то для man 2 mount такого не написано. Там написано

Код: Выделить всё

       Values  for  the  filesystemtype argument supported by the kernel are listed in /proc/filesystems (e.g., "minix", "ext2",
       "ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660").  Further types may become available when the appro‐
       priate modules are loaded.

и я что-то не нашёл там тип auto.

Т.ч. вопрос открыт.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение rm_ »

drBatty писал(а):
27.02.2013 11:07
IMB писал(а):
25.02.2013 15:30
Необходимо монтировать SD-карту для записи файлов, для этого думаю использовать mount из libc (http://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html#Mount_002dUnmount_002dRemount)

bormant писал(а):
26.02.2013 12:33
ps. Параметры в квадратных скобках не являются обязательными.

вообще-то для man 2 mount такого не написано. Там написано

Код: Выделить всё

       Values  for  the  filesystemtype argument supported by the kernel are listed in /proc/filesystems (e.g., "minix", "ext2",
       "ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660").  Further types may become available when the appro‐
       priate modules are loaded.

и я что-то не нашёл там тип auto.

Т.ч. вопрос открыт.

man mount
или если угодно man 8 mount
же.
If no -t option is given, or if the auto type is specified,
mount will try to guess the desired type.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение drBatty »

rm_ писал(а):
27.02.2013 11:26
или если угодно man 8 mount

что, в mount(2) мне NULL передать можно? Пруфлинк можно? Я не нашёл.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение bormant »

drBatty писал(а):
27.02.2013 11:07
вообще-то для man 2 mount такого не написано. Там написано
...
и я что-то не нашёл там тип auto.
mount(2) (man 2 mount) документирует системный вызов mount(), mount(8) документирует команду пространства пользователя mount, отсылка к которой в этом разделе (Программирование) была ради указания на относительно стандартное поведение юзерспесной утилиты и способы его достижения
... mount will try to guess the desired
type. Mount uses the blkid library for guessing the filesystem type; if that does not turn up
anything that looks familiar, mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there will be tried, except for
those that are labeled "nodev" (e.g., devpts, proc and nfs). If /etc/filesystems ends in a line
with a single * only, mount will read /proc/filesystems afterwards.
, которые более подробно можно рассмотреть в исходном коде утилиты mount.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования

Сообщение IMB »

serzh-z писал(а):
26.02.2013 14:49
Используя libblkid из util-linux. Примерно так:

Код: Выделить всё

................
blkid_probe_lookup_value(blprobe, "FSTYPE", &data, NULL);

Только одно уточнение, необходимо использовать параметр "TYPE", я проверял на util-linux-2.22-rc1.
Спасибо сказали: