All Projects → zargony → Fuse Rs

zargony / Fuse Rs

Licence: mit
Rust library for filesystems in userspace (FUSE)

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Fuse Rs

Exfat
Free exFAT file system implementation
Stars: ✭ 528 (-28.16%)
Mutual labels:  fuse, filesystem
Dbxfs
User-space file system for Dropbox
Stars: ✭ 673 (-8.44%)
Mutual labels:  fuse, filesystem
Btfs
A bittorrent filesystem based on FUSE.
Stars: ✭ 2,984 (+305.99%)
Mutual labels:  fuse, filesystem
ext2py
The slowest ext2fs driver ever! (in Python)
Stars: ✭ 14 (-98.1%)
Mutual labels:  fuse, filesystem
S3fs Fuse
FUSE-based file system backed by Amazon S3
Stars: ✭ 5,733 (+680%)
Mutual labels:  fuse, filesystem
redis-fs
Mount a Redis database as a filesystem using fuse.
Stars: ✭ 76 (-89.66%)
Mutual labels:  fuse, filesystem
Securefs
Filesystem in userspace (FUSE) with transparent authenticated encryption
Stars: ✭ 518 (-29.52%)
Mutual labels:  fuse, filesystem
webfuse
websocket filesystem based on libfuse
Stars: ✭ 23 (-96.87%)
Mutual labels:  fuse, filesystem
Svfs
The Swift Virtual File System
Stars: ✭ 375 (-48.98%)
Mutual labels:  fuse, filesystem
Infinit
The Infinit policy-based software-defined storage platform.
Stars: ✭ 363 (-50.61%)
Mutual labels:  fuse, filesystem
ratarmount
Random Access Read-Only Tar Mount
Stars: ✭ 217 (-70.48%)
Mutual labels:  fuse, filesystem
Catfs
Cache AnyThing filesystem written in Rust
Stars: ✭ 404 (-45.03%)
Mutual labels:  fuse, filesystem
acid-store
A library for secure, deduplicated, transactional, and verifiable data storage
Stars: ✭ 48 (-93.47%)
Mutual labels:  fuse, filesystem
Jnr Fuse
FUSE implementation in Java using Java Native Runtime (JNR)
Stars: ✭ 266 (-63.81%)
Mutual labels:  fuse, filesystem
fuse xattrs
add xattrs support using sidecar files.
Stars: ✭ 28 (-96.19%)
Mutual labels:  fuse, filesystem
Winfsp
Windows File System Proxy - FUSE for Windows
Stars: ✭ 4,071 (+453.88%)
Mutual labels:  fuse, filesystem
vk-music-fs
FUSE file system for VK audios
Stars: ✭ 34 (-95.37%)
Mutual labels:  fuse, filesystem
loggedfs-python
Filesystem monitoring with Fuse and Python
Stars: ✭ 21 (-97.14%)
Mutual labels:  fuse, filesystem
Goofys
a high-performance, POSIX-ish Amazon S3 file system written in Go
Stars: ✭ 3,932 (+434.97%)
Mutual labels:  fuse, filesystem
Dokany
User mode file system library for windows with FUSE Wrapper
Stars: ✭ 4,055 (+451.7%)
Mutual labels:  fuse, filesystem

Rust FUSE - Filesystem in Userspace

Crates.io Crates.io

About

fuse-rs is a Rust library crate for easy implementation of FUSE filesystems in userspace.

fuse-rs does not just provide bindings, it is a rewrite of the original FUSE C library to fully take advantage of Rust's architecture.

Documentation

Crate documentation

Details

A working FUSE filesystem consists of three parts:

  1. The kernel driver that registers as a filesystem and forwards operations into a communication channel to a userspace process that handles them.
  2. The userspace library (libfuse) that helps the userspace process to establish and run communication with the kernel driver.
  3. The userspace implementation that actually processes the filesystem operations.

The kernel driver is provided by the FUSE project, the userspace implementation needs to be provided by the developer. fuse-rs provides a replacement for the libfuse userspace library between these two. This way, a developer can fully take advantage of the Rust type interface and runtime features when building a FUSE filesystem in Rust.

Except for a single setup (mount) function call and a final teardown (unmount) function call to libfuse, everything runs in Rust.

Dependencies

FUSE must be installed to build or run programs that use fuse-rs (i.e. kernel driver and libraries. Some platforms may also require userland utils like fusermount). A default installation of FUSE is usually sufficient.

To build fuse-rs or any program that depends on it, pkg-config needs to be installed as well.

Linux

FUSE for Linux is available in most Linux distributions and usually called fuse. To install on a Debian based system:

sudo apt-get install fuse

Install on CentOS:

sudo yum install fuse

To build, FUSE libraries and headers are required. The package is usually called libfuse-dev or fuse-devel. Also pkg-config is required for locating libraries and headers.

sudo apt-get install libfuse-dev pkg-config
sudo yum install fuse-devel pkgconfig

macOS

Installer packages can be downloaded from the FUSE for macOS homepage.

To install using Homebrew:

brew cask install osxfuse

To install pkg-config (required for building only):

brew install pkg-config

FreeBSD

Install packages fusefs-libs and pkgconf.

pkg install fusefs-libs pkgconf

Usage

Put this in your Cargo.toml:

[dependencies]
fuse = "0.4"

To create a new filesystem, implement the trait fuse::Filesystem. See the documentation for details or the examples directory for some basic examples.

To Do

There's still a lot of stuff to be done. Feel free to contribute. See the list of issues on GitHub and search the source files for comments containing "TODO" or "FIXME" to see what's still missing.

Compatibility

Developed and tested on macOS. Tested under Linux, macOS and FreeBSD using stable, beta and nightly Rust versions (see CI for details).

Contribution

Fork, hack, submit pull request. Make sure to make it useful for the target audience, keep the project's philosophy and Rust coding standards in mind. For larger or essential changes, you may want to open an issue for discussion first. Also remember to update the Changelog if your changes are relevant to the users.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].