Как зарегистрировать тип файловой системы FUSE с помощью mount(8) и fstab?

Я написал небольшую файловую систему на основе FUSE, и теперь единственной недостающей части является то, что я хочу зарегистрировать ее с помощью fstab(5), чтобы она автоматически монтировалась при запуске системы и/или монтировалась вручную с помощью всего лишь mount /srv/virtual-db. Как я могу этого добиться?

Я знаю, что могу просто запустить /usr/bin/vdbfs.py /srv/virtual-db из какого-нибудь сценария инициализации, но это не совсем красиво.

Мне очень жаль, потому что это может быть не совсем вопрос программирования, но он очень связан с этим, поскольку упаковка и развертывание по-прежнему являются работой программиста.


person drdaeman    schedule 12.10.2009    source источник
comment
Хороший вопрос, но не связанный с программированием, и теперь есть serverfault.com.   -  person ypnos    schedule 12.10.2009
comment
Если это только административная проблема (например, добавление записи в какой-то файл), то да, наверное. Но регистрация файловых систем в ядре, безусловно, проблема программирования (единственная административная часть - добавление модуля в modprobe.conf), и я не знаю о FUSE... Так что я не знаю, к чему это на самом деле относится.   -  person drdaeman    schedule 12.10.2009
comment
О, это принадлежит SO, определенно!   -  person Matt Joiner    schedule 02.09.2010


Ответы (5)


Как правило, новый тип файловой системы монтирования «регистрируется» путем создания исполняемого файла mount.fstype.

$ ln -s /usr/bin/vdbfs.py /usr/sbin/mount.vdbfs

Если vdbfs.py принимает mount аргументы (то есть dev path [-o opts]), то mount -t vdbfs и использование vdbfs в качестве третьего поля в fstab будут работать. Если это не так, вы можете создать оболочку, которая принимает аргументы этой формы и сопоставляет их с тем, что принимает ваш vdbfs.py.

FUSE также должен установить исполняемый файл mount.fuse; mount.fuse 'vdbfs.py#dev' path -o opts продолжит и позвонит vdbfs.py dev path -o opts. В этом случае вы можете использовать fuse в качестве типа вашей файловой системы и префикс вашего устройства с префиксом vdbfs.py#.

person ephemient    schedule 12.10.2009
comment
Обратите внимание, что автор FUSE — Миклош Шередиустарел, кодируя реальный тип файловой системы. в источнике монтирования. Цитата из руководства mount: Программы монтирования и размонтирования поддерживают подтипы файловой системы. Подтип определяется суффиксом «.subtype». Например, «предохранитель.sshfs». Рекомендуется использовать обозначение подтипа, а не добавлять какой-либо префикс к источнику монтирования (например, 'sshfs#example.com' устарел). - person patryk.beza; 26.04.2019

Итак, чтобы уточнить ответ эфемиента, есть два варианта:

  1. Отредактируйте /etc/fstab следующим образом:

    # <file system>   <mount point>      <type>  <options>         <dump>  <pass>
    # ...
    vdbfs.py#<dev>    /srv/virtual-db    fuse    user,<other-opts>    0    0
    

    Or,

  2. Создайте исполняемый файл с префиксом «mount». (убедившись, что его можно использовать с mount-подобными параметрами):

    $ ln -s /usr/bin/vdbfs.py /usr/sbin/mount.vdbfs
    

    И отредактируйте /etc/fstab следующим образом:

    # <file system> <mount point> <type>    <options>         <dump>  <pass>
    # ...
    <dev>    /srv/virtual-db    vdbfs.py    user,<other-opts>    0    0
    

Что касается автоматического монтирования при запуске и ручного монтирования с помощью mount, параметры user и noauto актуальны и полностью поддерживаются самим fuse, поэтому вам не нужно реализовывать их самостоятельно. Параметр user позволяет непривилегированному пользователю, который является членом группы «fuse», монтировать вашу файловую систему с помощью команды mount, а noauto предписывает вашей файловой системе не монтироваться автоматически при запуске. Если вы не укажете noauto, он будет автоматически смонтирован.

person ejm    schedule 12.11.2011

Чтобы уточнить комментарий @patryk.beza к принятому ответу, правильный способ смонтировать файловую систему FUSE — установить тип файловой системы на fuse.<subtype>.

Например, для монтирования реализации s3fs-fuse, которая не предоставляет конкретного /sbin/mount.* оболочка и обычно использует пользовательскую команду s3fs для монтирования корзин S3, эту команду можно использовать как root:

mount -t fuse.s3fs bucket-name /path/to/dir -o <some,options>

или эта строка в /etc/fstab:

bucket-name /path/to/dir fuse.s3fs <some,options> 0 0

или этот блок монтирования SystemD (например, /etc/systemd/system/path-to-dir.mount):

[Unit]
Description=S3 Storage
After=network.target

[Mount]
What=bucket-name
Where=/path/to/dir
Type=fuse.s3fs
Options=<some,options>

[Install]
WantedBy=multi-user.target

Как это работает: mount распознает концепцию подтипов файловой системы, когда тип отформатирован с точкой (например, <type>.<subtype>), так что тип с форматом fuse.someimpl распознается как ответственность помощника монтирования FUSE /sbin/mount.fuse. Помощник монтирования FUSE затем разрешает часть someimpl в реализацию FUSE, так же, как формат # используется в исходном ответе (я думаю, что это просто поиск пути для программы с именем <subtype>, но я не на 100% уверен в этом).

person Guss    schedule 06.05.2020

Вы можете просто использовать тип файловой системы предохранителя. В моей системе работает следующее:

smbnetfs    /media/netbios    fuse    defaults,allow_other    0    0

Другой пример:

sshfs#[email protected]:/    /mnt    fuse    user,noauto    0    0
person Community    schedule 21.12.2012
comment
Возникает еще один вопрос: как зарегистрировать пользовательское приложение в FUSE в качестве поставщика файловой системы? - person jpaugh; 27.11.2017
comment
На самом деле, это по-прежнему требует добавления решения mount.type, упомянутого ephemient. - person jpaugh; 27.11.2017

После многих исследований было найдено это решение для монтирования файловой системы предохранителей с использованием записи fstab. Я использовал предохранитель для s3bucket для установки на локальную машину Linux.

  • .passwd-s3fs: содержит учетные данные для доступа к вашей учетной записи aws 1] Секретный ключ и 2] Ключ доступа.
  • uid : идентификатор пользователя. Вы можете ввести команду linux id и получить uid

Синтаксис:

s3fs#<Bucket_Name> <Mounted_Direcotry_Path> fuse _netdev,allow_other,passwd_file=/home/ubuntu/.passwd-s3fs,use_cache=/tmp,umask=002,uid=<User_Id> 0 0

Пример:

s3fs#myawsbucket /home/ubuntu/s3bucket/mys3bucket fuse _netdev,allow_other,passwd_file=/home/ubuntu/.passwd-s3fs,use_cache=/tmp,umask=002,uid=1000 0 0

Для монтирования вам нужно выполнить следующую команду.

mount -a

Чтобы убедиться, что ваш ковш смонтирован правильно или нет, используйте следующую команду, чтобы проверить, какие точки смонтированы.

df -h
person Viraj Wadate    schedule 27.05.2019