FUSE #9: unionfs-fuse — накладываем директории друг на друга

mergerfs из восьмого выпуска складывает несколько дисков в один пул по свободному месту — а unionfs-fuse решает другую задачу: накладывает каталоги друг на друга по приоритету, как слои. Файл ищется сначала в верхней ветке, и только если его там нет — в следующей, и так вниз по списку. ...

October 23, 2026 · llexa

FUSE #8: borgfs — смотрим внутрь бэкапа без полного восстановления

Классический сценарий: кто-то случайно удалил конфиг неделю назад, а бэкапится всё через Borg. Самый прямой путь — borg extract всего снапшота в отдельную директорию и выковыривать нужный файл руками, но для одного файла это избыточно, особенно если архив весит сотни гигабайт. У borg для этого есть mount — он поднимает FUSE-драйвер и отдаёт содержимое архива как обычную read-only файловую систему. ...

October 16, 2026 · llexa

FUSE #7: archivemount — монтируем архив как файловую систему

sshfs монтирует удалённую папку, gocryptfs — зашифрованный контейнер, mergerfs — несколько дисков разом. archivemount монтирует сам файл архива: .tar.gz, .zip, .cpio, ISO9660-образ — и внутри точки монтирования это обычное дерево каталогов, без распаковки на диск и без tar xf во временную папку. ...

October 9, 2026 · llexa

FUSE #6: mergerfs — объединяем несколько дисков в одну точку монтирования

RAID объединяет диски на уровне блоков — один упавший диск может утянуть за собой весь массив, в зависимости от уровня. mergerfs работает иначе: это FUSE-файловая система, которая просто логически сливает несколько независимых путей в одну точку монтирования, каждый диск остаётся отдельной файловой системой сам по себе. ...

October 2, 2026 · llexa

FUSE #5: sshfs — монтируем удалённую папку по SSH

sshfs монтирует удалённую директорию как обычную папку через FUSE — без NFS, без Samba, только существующий SSH-доступ: sshfs user@host:/remote/path /local/mountpoint Голое подключение отваливается при обрыве сети — в man прямо указан этот кейс с решением: -o reconnect вместе с keepalive держат сессию живой: sshfs user@host:/remote/path /mnt -o reconnect,ServerAliveInterval=15 Отмонтировать — не umount (это для BSD/macOS), на Linux актуальная команда fusermount3 -u /local/mountpoint. Многие дистрибутивы держат fusermount как симлинк для совместимости, но полагаться на него не стоит — под новым libfuse его может не быть. ...

September 25, 2026 · llexa

FUSE с нуля #4: gocryptfs — шифрованный маунт поверх обычной ФС

encfs долгое время был стандартным выбором для шифрованного FUSE-маунта, пока в нём не нашли структурные уязвимости (утечка метаданных, уязвимость к атакам по объёму файла). gocryptfs написан позже с учётом этих проблем — тоже FUSE, тоже пофайловое шифрование, но с современной криптографией (AES-256-GCM) и явным аудитом на старте проекта. mkdir cipher plain gocryptfs -init cipher gocryptfs cipher plain После -init в cipher/ создаётся мастер-ключ, зашифрованный паролем; gocryptfs cipher plain монтирует расшифрованное представление в plain/ — файлы внутри лежат как обычно, а в cipher/ физически видны только зашифрованные блобы с именами тоже зашифрованными. ...

September 18, 2026 · llexa

FUSE с нуля #3: пишем свою мини-ФС на Python

В прошлых выпусках мы монтировали готовые FUSE-реализации (sshfs, rclone) — теперь свою, минимальную. fusepy оборачивает /dev/fuse питоновским классом: переопределяешь VFS-методы, остальное берёт libfuse. class HelloFS(Operations): def getattr(self, path, fh=None): return dict(st_mode=0o40755) if path == '/' else dict(st_mode=0o100644, st_size=13) def readdir(self, path, fh): return ['.', '..', 'hello.txt'] def read(self, path, size, offset, fh): return b'Hello, FUSE!\n'[offset:offset+size] FUSE(HelloFS(), '/mnt/hello', foreground=True) getattr отвечает на stat(), readdir — список файлов, read — байты по смещению. #fuse

September 11, 2026 · llexa

FUSE с нуля #2: монтируем облако через rclone

В прошлом выпуске серии sshfs показал главную идею FUSE — файловая система в userspace без единой строчки кода ядра. rclone расширяет это на облако: 40+ бэкендов (S3, Google Drive, WebDAV, Backblaze и т.д.) через один и тот же FUSE-интерфейс. # примонтировать заранее настроенный rclone remote rclone mount remote:bucket /mnt/cloud --daemon # с кэшем на чтение — критично для WebDAV/GDrive, где листинг медленный rclone mount remote:bucket /mnt/cloud --vfs-cache-mode writes --daemon # отмонтировать fusermount -u /mnt/cloud После монтирования каталог ведёт себя как обычная ФС — cp, ls, tail -f работают без клиента. Разница с sshfs: под капотом не SSH-сессия, а HTTP API облака, и --vfs-cache-mode решает, что кэшировать локально. ...

September 4, 2026 · llexa

FUSE с нуля #1: файловая система без правки ядра

FUSE позволяет писать файловую систему обычной программой в userspace — ядро только проксирует VFS-вызовы демону через /dev/fuse, без строчки кода в ядре. Практичный пример — sshfs, который уже реализует это за тебя. sshfs user@host:/remote/path /local/mnt -o reconnect,ServerAliveInterval=15 ls /local/mnt # трафик идёт через ssh fusermount -u /local/mnt # отмонтировать — не umount sshfs user@host:/path /local/mnt -o allow_other # доступ другим локальным юзерам По умолчанию FUSE-ФС видна только тому, кто её примонтировал — allow_other (плюс user_allow_other в /etc/fuse.conf) открывает доступ остальным. Отключать — fusermount -u, не umount: демон живёт в userspace, обычный umount про него не знает. ...

July 31, 2026 · llexa