DalFs icon indicating copy to clipboard operation
DalFs copied to clipboard

DalFs: a Userspace filesystem based on OpenDAL

Could be buggy and risky, please use a VM to test. Take your own risk.

Update:

  • 2024/03/11: Not continue anymore. Any further efforts are welcomed in OpenDAL ofs.

Currently, it can provide a Userspace filesystem backing by OpenDAL, thus supports the following backend as data sources:

  • Atomicserver
  • Azblob
  • Azdls
  • Cacache
  • Cos
  • Dashmap
  • Etcd
  • Foundationdb
  • Fs
  • Ftp
  • Gcs
  • Ghac
  • Hdfs
  • Http
  • Ipfs
  • Ipmfs
  • Memcached
  • Memory
  • MiniMoka
  • Moka
  • Obs
  • Onedrive
  • Gdrive
  • Dropbox
  • Oss
  • Persy
  • Redis
  • Postgresql
  • Rocksdb
  • S3
  • Sftp
  • Sled
  • Supabase
  • VercelArtifacts
  • Wasabi
  • Webdav
  • Webhdfs
  • Redb
  • Tikv

The functionnality is very limited right now, because I just use several hours to come up with the idea and implement it.

Here are the main fs functionnalities implemented:

  • Read directory
  • Read file
  • Read attributes (not well implemented)
  • Create directory
  • Create file
  • Write file

or not yet implemented:

  • Permission (?)
  • Fsync (?)
  • ...

Build

You might need to install libfuse-dev in order to use Rust fuser crate.

Just run the following command to build it:

cargo build

Run

To run, you will need to provide a series of

cargo run --release -- <mount-point> -t <scheme> ...

where the mount-point is a path to mount the filesystem; scheme is an OpenDAL scheme, all in lowercase (e.g. "ftp", "s3", "fs", etc.).

The remaining parameters are <key>=<value>[,<key>=<value>] pairs needed by OpenDAL schemes.

Currently fs and s3 backends are tested. For example, the following command will mount a filesystem using the data in your /tmp directory to the mount-point.

cargo run --release -- <mount-point> -t fs -o root=/tmp
image

And the following mount a filesystem backed by s3:

cargo run --release <mount-point> -t s3 -o root=<s3-root-path>,endpoint=<end-point-url>,bucket=<bucket>,access_key_id=<access-key-id>,secret_access_key=<secret-access-key>,region=auto

For more details and more backends, please check OpenDAL scheme doc.

Contribution

All kinds of contributions are welcomed. But I will firstly work on the functionnalities.