Возникли проблемы при экспорте FUSE через NFS

8

У меня есть самописная файловая система FUSE, которую я монтирую на сервере NFS в точке монтирования /export/example/mount. Затем я экспортирую родительский каталог FUSE через NFS. /etc/exportsСодержит параметры nohide,crossmnt,subtree_check,ro,no_root_squashи обеспечивает свободный доступ к каждому:

/export/example *(nohide,crossmnt,subtree_check,ro,no_root_squash)

Я могу смонтировать этот экспорт на моем клиенте NFS и получить к нему доступ. Как только я получаю доступ к FUSE в NFS, мой клиент зависает, пока я не umountNFS (и мне нужно использовать опцию -fдля этого).

Я попытался смонтировать FUSE как мой рабочий пользователь и как root. Результаты одинаковы.

Сервер работает под управлением Ubuntu 12.04, клиент - SuSE 9.3. FUSE написан на Python и работает локально без каких-либо проблем. Сбой экспорта только через NFS. У меня нет никаких ограничений безопасности, поскольку все это в частной сети только с доверенными пользователями.

У кого-нибудь есть идея, что может стать причиной моей проблемы или (еще лучше), как решить проблему?

Я думал о замене NFS на SSHFS, чтобы обойти эту проблему, но это не работает, поскольку клиентская система слишком старая для поддержки SSHFS (так как она основана на FUSE, а FUSE не поддерживается).

Альфей
источник
Вы пробовали allow_otherопцию sshfs mount?
скарап
Да, я сделал. К сожалению, безрезультатно. Но тем временем мы отключили старое оборудование со старой системой, поэтому этот вопрос больше не интересен. Возможно, мне следует закрыть его; ;-)
Alfe
Вы нашли решение ? Спустя 5 лет у меня возникла такая же проблема. Раздел fuse (s3fs), смонтированный в подкаталоге обслуживаемого каталога NFS, не может быть виден клиенту nfs (даже с nfs4) ...
Matthieu G
Вы использовали crossmnt? И позволяет ли сторона предохранителя (s3fs) использоваться другими пользователями (для этого тоже есть опция монтирования). Не забывайте, что fuse является пользовательским пространством (предназначенным для использования одним пользователем), в то время как nfs является многопользовательским.
Алфе

Ответы:

7

Большинство дистрибутивов Linux поставляются с ядром, которое не позволяет экспортировать смонтированную файловую систему FUSE с использованием NFSv2 или NFSv3. Ваш выбор: 1. Внедрить вашу файловую систему в пространство ядра. 2. Экспортируйте его в NFSv4, для чего потребуется fsid =

Я сам использую 2. На следующем рисунке команды, начинающиеся с #, запускаются на сервере, команды, начинающиеся с $, запускаются на клиенте.

Это моя конфигурация сервера, как вы можете видеть, я экспортирую точку монтирования FUSE:

# mount | tail -n1
convmvfs on /mnt/gb2312 type fuse.convmvfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
# grep gb2312 /etc/exports 
/mnt/gb2312     192.168.0.0/16(no_subtree_check,fsid=0)

Вот что я сделал на своем клиенте:

$ sudo mount -t nfs4 server:/ /mnt/
$ ls /mnt
Downloads  IMAGES  Library  lost+found

Чтобы убедиться, что ваша ошибка вызвана экспортом предохранителя в NFS v2 / v3, экспортируйте эту точку монтирования специально без NFS v4 (fsid) и посмотрите, не появляется ли ошибка:

# exportfs -a
exportfs: /mnt/gb2312 requires fsid= for NFS export

Если на сервере вы экспортируете точку монтирования с монтированием и позже монтируете ее с помощью fuse, вы должны увидеть в своем журнале, если вы пытаетесь использовать клиент nfs:

# tail /var/log/syslog
Aug 18 03:54:31 server rpc.mountd[17183]: Cannot export /mnt/gb2312, possibly unsupported filesystem or fsid= required
Aug 18 04:00:52 server rpc.mountd[17183]: Caught signal 15, un-registering and exiting.
Танкист 六四
источник
0

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

hildred
источник
Да, я знаю, но когда я писал, я пробовал различные комбинации параметров монтирования, которые должны позволять экспортировать содержимое подмонтирования. На самом деле, с простыми смонтированными ISO-образами это работает безупречно. Только с моим FUSE это не удается. И я не могу смонтировать этот FUSE на клиенте, потому что этот хост настолько стар, что не поддерживает FUSE. Вся идея этого FUSE-via-NFS заключается просто в том, чтобы позволить клиенту получить доступ к функциям этого FUSE, который он не может запустить сам.
Alfe
Вам необходимо экспортировать / export / example / mount и смонтировать его с клиента.
Hildred