Go-FUSE
Go native bindings for the FUSE kernel module.
Use github.com/hanwen/go-fuse/v2/fs library. It follows the wire protocol closely, but provides convenient abstractions for building both node and path based file systems
Release notes
v2.11:
- fuse: added MountOptions.PanicHandler; panics no longer crash the server.
- fuse: expose CongestionThreshold as a separate MountOption
- fuse: MountOption.MaxInflightRequestBytes
- fs: NewLoopbackFileFromOS
- fs: LoopbackFile is now public.
- fuse: ReadResultPipe allows more flexibility for zero-copy read results, eg. concatenate data from multiple files at the same time.
- fuse: Options.ExtraCapabilities/DisabledCapabilities allows generically en/disabling kernel features
- fuse, fs: PruneNotify support. This lets the file system force the kernel to forget nodes.
- fuse: type ProtocolServer. This enables running the FUSE protocol over transports that are not the standard kernel connection
- virtiofs: serve FUSE file system to VMs directly as virtiofs servers.
- general: require go 1.21
- fs: NodeWrapChilder interface
- fs: FileLookuper interface
- fuse, fs: support IOCTL
- fuse: add RawFileSystem.OnUnmount
- fs: symlink safety for fs.LoopbackRoot
- fuse: ID mapped mounts
- fs: NewLoopbackDirStreamFd
- fuse, fs: support STATX
- general:
- fuse:
- fs:
v2.5
- Support for RenameExchange on Darwin
Comparison with other FUSE libraries
Further highlights of this library is
- Comprehensive and up to date protocol support (up to 7.12.28).
- Performance that is competitive with libfuse.
Examples
- example/hello/ contains a 60-line "hello world" filesystem
- zipfs/zipfs contains a small and simple read-only filesystem for
mkdir /tmp/mountpoint
example/zipfs/zipfs /tmp/mountpoint file.zip &
ls /tmp/mountpoint
fusermount -u /tmp/mountpoint
- zipfs/multizipfs shows how to use combine
simple Go-FUSE filesystems into a larger filesystem.
- example/loopback mounts another piece of the filesystem.
Functionally, it is similar to a symlink. A binary to run is in
example/loopback/ . For example
mkdir /tmp/mountpoint
example/loopback/loopback -debug /tmp/mountpoint /some/other/directory &
ls /tmp/mountpoint
fusermount -u /tmp/mountpoint
macOS Support
The main developer (hanwen@) does not own a Mac to test, but accepts
patches to make Go-FUSE work on Mac.
- All of the limitations of OSXFUSE, including lack of support for
NOTIFY.
- OSX issues STATFS calls continuously (leading to performance
concerns).
- OSX has trouble with concurrent reads from the FUSE device, leading
to performance concerns.
- Tests are expected to pass; report any failure as a bug!
Credits
- Inspired by Taru Karttunen's package, https://bitbucket.org/taruti/go-extra.
- Originally based on Ivan Krasin's https://github.com/krasin/go-fuse-zip
Bugs
Report them through https://github.com/hanwen/go-fuse/issues. Please
include a debug trace (set
fuse.MountOptions.Debug to true`).
License
Like Go, this library is distributed under the new BSD license. See accompanying LICENSE file.