Каковы преимущества и недостатки использования файловых систем FuseFS?

19

Я знаю, что некоторые файловые системы представляются через Fuse, и мне было интересно узнать о плюсах и минусах этого подхода.

geoffc
источник

Ответы:

17

Я не уверен, если вы имеете в виду настоящие файловые системы на диске или любую файловую систему. Я никогда не видел, чтобы обычная файловая система использовала FUSE, хотя полагаю, что это возможно; Основное преимущество FUSE состоит в том, что он позволяет вам представить приложения (или пользователю) что-то похожее на файловую систему, но на самом деле просто вызывает функции в вашем приложении, когда пользователь пытается сделать что-то вроде списка файлов в каталоге или создать новый файл. Plan9 хорошо известен тем, что пытается сделать все доступным через файловую систему, и /procпсевдофайловая система происходит от них; FUSE - это способ, которым приложения легко следуют этому шаблону.

Например, вот скриншот (очень безликой) файловой системы FUSE, которая предоставляет доступ к данным сайта SE:

Скриншот файловой системы FUSE в действии

Естественно, ни один из этих файлов на самом деле не существует; когда lsменя спросили о списке файлов в каталоге, FUSE вызвал функцию в моей программе, которая сделала запрос API на этот сайт, чтобы загрузить информацию о пользователе 73 (я); catпытаясь читать display_nameи website_urlвызывать больше функций, которые возвращали кешированные данные из памяти, без чего-либо реально существующего на диске

Михаил Мрозек
источник
3
Существуют FUSE реализации FAT , NTFS , iso9660 , ext2 и других .
Жиль "ТАК - перестань быть злым"
2
Вы найдете мощные файловые системы, реализованные в fuse: LessFS, GlusterFS, MooseFS. Google GFS (не POSIX) также работает в пространстве пользователя.
Тобу
Где вы нашли это приложение?!?!
Натан Осман
4
@ Джордж Я написал это, когда возился с SO API. Он не использует никаких маршрутов, кроме / users, поэтому вы в основном видите все реализованные функции на этом скриншоте; это было просто посмотреть, как тяжело это будет
Майкл Мрозек
5
@ Джордж Я положил это на github
Майкл Мрозек
19

Файловые системы Unix традиционно реализованы в ядре. FUSE позволяет файловой системе быть реализованной пользовательской программой.

Встроенные в ядро ​​файловые системы лучше подходят для основных файловых систем для программ и данных:

  • Их можно использовать на загрузочном носителе (программа, реализующая файловую систему FUSE, должна быть откуда-то загружена).
  • Они более надежны в том смысле, что они не исчезнут из-за сбоя процесса или его смерти по ошибке.
  • Они несколько быстрее.

Файловые системы FUSE имеют и другие преимущества, в основном вращающиеся вокруг своей гибкости:

  • Их могут загружать и монтировать обычные пользователи, поэтому они удобны для файловых систем, которые пользователи обычно монтируют самостоятельно: для доступа к сети, для просмотра архивных файлов, для съемных носителей и т. Д.
  • В случае сбоя драйвера файловой системы FUSE это не вызовет паники в вашем ядре: вы не увидите ничего хуже, чем ошибки ввода-вывода в приложениях, обращающихся к файловой системе.
  • Они могут быть запрограммированы очень быстро; Есть привязки FUSE для многих языков сценариев, где полезный драйвер файловой системы FUSE может быть записан в несколько сотен строк кода.
  • Они могут быть развернуты очень быстро как потому, что для их установки не требуется вмешательство администратора, так и потому, что их легко переносить между поддерживаемыми операционными системами .
  • Нет проблем с лицензированием, связанных со статической связью с ядром (это влияет на zfs ).
Жиль "ТАК - перестань быть злым"
источник
7

FUSE - это не файловая система как таковая, а код, который позволяет реализовывать файловые системы в виде процессов вместо модулей ядра.

Одним из наиболее полезных преимуществ FUSE является возможность «смешивать» код GPL с кодом не-GPL. Например, Gnu / Linux и ZFS http://zfs-fuse.net/ или NTFS-3G во многих ОС, таких как OpenSolaris и * BSD http://www.tuxera.com/community/ntfs-3g-download/

Основным недостатком является влияние на производительность по сравнению с родными (ядро) драйверами.

jlliagre
источник