Skip to content

A FUSE file system in Go extended with persistent file storage

License

Notifications You must be signed in to change notification settings

anaskhan96/litfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

litfs

Image of litfs at work

This FUSE filesystem, apart from providing the normal file I/O operations, implements persistence by emulating a single binary Unix file as disk and performing read/writes on it.

Build and Run

go get github.com/anaskhan96/litfs
cd $GOPATH/src/github.com/anaskhan96/litfs
go run main.go data # data/ is the directory on which to mount the filesystem on

Run umount <path-to-directory> to unmount the filesystem.

File System Characteristics

  • Create, remove a directory
  • Create, remove, read from, and write to files inside a directory
  • Copy, move the contents of a file to another, across directories

Persistence Implementation

disklib/sda is the created binary file emulating a disk. Keeping a block size of 4096 bytes:

  • A serialized form of the tree representation of the filesystem is stored in the first block
  • A structure containing two components - a bitmap indicating free and allocated blocks in the filesystem and an integer containing the lowest free block at the moment - is serialized and stored in the second block
  • File data is stored from the third block onwards, with a block as a whole being allocated to/deallocated from the file

This project was built under the course Unix Systems Programming at PES University.

About

A FUSE file system in Go extended with persistent file storage

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages