flapenguin.me

fuse - монтируем в фс что угодно

|

Оригинал https://t.me/bits_and_bicycles/7

Шок! read/write начинает ходить в user space, стоит только поставить один единственный пакет…

Завёл речь про файловые системы, так ещё и #fuse упомянул. Придётся теперь про него рассказывать.

Помнишь, я говорил, что ты можешь написать модуль ядра со своей файловой системой и делать в нём что угодно на read/write? Вот вообще всё что угодно. Что бы ты такое написал?

Скорее всего самое маргинальное, что ты придумал – ходить в сеть, чтобы смонтировать по NFS ту самую пекарню с фильмами 😏 в локалке. На заветной машине для этого запущен NFS сервер (в user space, как и любой другой приличный софт). Как он реализует NFS протокол, чтением с диска или генерацией "файлов" на лету, – его дело.

Что если мы случайно начнём ходить в ту же самую машину? В свой же user space? Смонтируем свои же файлы, что довольно бесполезно. Но мы всё ещё можем написать NFS сервер таким образом, чтобы он генерировал "файлы" на лету.

Собственно, мы в одном шаге от fuse'а. NFS подразумевает, что машины разные, а мы точно знаем, что машина одна. Значит байты можно перекладывать чуть более эффективно и чуть больше давать знать про систему.

Это и есть Filesystem in USErspace, что-то типа NFS, но со знанием, что машина на клиенте и сервере одна и та же. По сути, прокси между VFS и user space'ом, что позволяет писать файловые системы хоть в плагинах на lua для neovim'а. (Чтобы открывать их тем же neovim'ом, главное рекурсивно в самого себя не уйти.)

(NFS здесь для примера и наглядности, протокол у fuse совсем другой)

И в чём же профит? - Писать обычные user space программы гораздо проще, чем модули ядра. - Если у тебя есть готовая реализация какого-нибудь протокола, то не надо затаскивать его в kernel space с его малюсеньким стеком и без curl’а.

А как же безопасность? - Так у тебя теперь всё в user space запускается. Ты по определению более безопасный. Не можешь ни kernel panic'овать, ни игнорировать права доступа. И вообще молодец.

Что на этом уже понаписали? - sshfs, s3fs, restic-mount, WikipediaFS и т.д.