All Projects → Hexilee → Tifs

Hexilee / Tifs

Licence: apache-2.0
A distributed POSIX filesystem based on TiKV, with partition tolerance and strict consistency.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Tifs

Phoenixfs
🔥 a versioning filesystem inspired by git
Stars: ✭ 191 (-8.61%)
Mutual labels:  fuse, filesystem
Gocryptfs
Encrypted overlay filesystem written in Go
Stars: ✭ 2,088 (+899.04%)
Mutual labels:  fuse, filesystem
Cryfs
Cryptographic filesystem for the cloud
Stars: ✭ 1,560 (+646.41%)
Mutual labels:  fuse, filesystem
Kbfs
Keybase Filesystem (KBFS)
Stars: ✭ 1,218 (+482.78%)
Mutual labels:  fuse, distributed-systems
Containerfs
a cluster filesystem for containers
Stars: ✭ 264 (+26.32%)
Mutual labels:  fuse, filesystem
Go Fuse
FUSE bindings for Go
Stars: ✭ 1,267 (+506.22%)
Mutual labels:  fuse, filesystem
Mergerfs
a featureful union filesystem
Stars: ✭ 2,114 (+911.48%)
Mutual labels:  fuse, filesystem
Moosefs
MooseFS – Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System (Software-Defined Storage)
Stars: ✭ 1,025 (+390.43%)
Mutual labels:  fuse, filesystem
Python Fuse
Python 2.x/3.x bindings for libfuse 2.x
Stars: ✭ 171 (-18.18%)
Mutual labels:  fuse, filesystem
Onedriver
A native Linux filesystem for Microsoft OneDrive
Stars: ✭ 163 (-22.01%)
Mutual labels:  fuse, filesystem
Polyfuse
A FUSE (Filesystem in Userspace) library for Rust
Stars: ✭ 76 (-63.64%)
Mutual labels:  fuse, filesystem
Gotenksfs
A file system on top of your file system
Stars: ✭ 203 (-2.87%)
Mutual labels:  fuse, filesystem
Onedrive Fuse Fs
Script to mount Microsoft OneDrive (formerly known as SkyDrive) folder as a FUSE filesystem
Stars: ✭ 68 (-67.46%)
Mutual labels:  fuse, filesystem
Docker Volume Ipfs
🐳 This is an open source volume plugin that allows using an ipfs filesystem as a volume.
Stars: ✭ 99 (-52.63%)
Mutual labels:  fuse, filesystem
Kaitai fs
KaitaiFS: mount any filesystem specified with a .ksy as a real file system
Stars: ✭ 45 (-78.47%)
Mutual labels:  fuse, filesystem
Litfs
A FUSE file system in Go extended with persistent file storage
Stars: ✭ 116 (-44.5%)
Mutual labels:  fuse, filesystem
Fuse Copyfs
CopyFS is the copy-on-write (COW) versioned filesystem for FUSE. Years ago I added features to CopyFS 1.0, then 1.0.1 came out and I never bothered to forward-port my changes. Now I have. Master is 1.3.1M, which is CopyFS 1.0.1 + 1.3M
Stars: ✭ 24 (-88.52%)
Mutual labels:  fuse, filesystem
Fusell Seed
FUSE (the low-level interface) file system boilerplate 📂 🔌 💾
Stars: ✭ 9 (-95.69%)
Mutual labels:  fuse, filesystem
Seaweedfs
SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.
Stars: ✭ 13,380 (+6301.91%)
Mutual labels:  fuse, distributed-systems
Supertag
A tag-based filesystem
Stars: ✭ 207 (-0.96%)
Mutual labels:  fuse, filesystem

TiFS

A distributed POSIX filesystem based on TiKV, with partition tolerance and strict consistency.

pjdfstest

Installation

Container

You can use the image on docker hub or build from the Dockerfile.

Binary(linux-amd64 only)

mkdir tmp
cd tmp
wget https://github.com/Hexilee/tifs/releases/download/v0.1.0/tifs-linux-amd64.tar.gz
tar -xvf tifs-linux-amd64.tar.gz
sudo ./install.sh

Source code

git clone https://github.com/Hexilee/tifs.git
cd tifs
cargo build --features "binc" --no-default-features --release
sudo install target/release/mount /sbin/mount.tifs

Usage

You need a tikv cluster to run tifs. tiup is convenient to deploy one, just install it and run tiup playground.

Container

docker run -d --device /dev/fuse \
    --cap-add SYS_ADMIN \
    -v <mount point>:/mnt:shared \
    hexilee/tifs:0.1.0 --mount-point /mnt --pd-endpoints <endpoints>

Binary

mkdir <mount point>
mount -t tifs tifs:<pd endpoints> <mount point>

Development

cargo build
mkdir ~/mnt
RUST_LOG=debug target/debug/tifs --mount-point ~/mnt

Then you can open another shell and play with tifs in ~/mnt.

Maybe you should enable user_allow_other in /etc/fuse.conf.

for developing under FreeBSD, make sure the following dependencies are met.

pkg install llvm protobuf pkgconf fusefs-libs3 cmake

for now, user_allow_other and auto unmount does not work for FreeBSD, using as root and manually umount is needed.

Contribution

Design

Please refer to the design.md

FUSE

There are little docs about FUSE, refer to the example for the meaning of FUSE API.

Deploy TiKV

Please refer to the tikv-deploy.md.

TODO

  • [x] FUSE API

    • [x] init
    • [x] lookup
    • [x] getattr
    • [x] setattr
    • [x] readlink
    • [x] readdir
    • [x] open
    • [x] release
    • [x] read
    • [x] write
    • [x] mkdir
    • [x] rmdir
    • [x] mknod
    • [x] lseek
    • [x] unlink
    • [x] symlink
    • [x] rename
    • [x] link
    • [x] statfs
    • [x] create
    • [x] fallocate
    • [x] getlk
    • [x] setlk
  • [ ] Testing and Benchmarking

    • [x] pjdfstest
    • [ ] fio
  • [ ] Real-world usage

    • [x] vim
    • [x] emacs
    • [x] git
    • [x] gcc
    • [x] rustc
    • [x] cargo build
    • [x] npm install
    • [x] sqlite
    • [ ] tikv on tifs
    • [x] client runs on FreeBSD: simple case works
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].