-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Right now a hard drive is so cheap that I know several friends that have lot of hard drive space they dont use. The goal of FriendFS is to have a file system where redundancy is handled by the distribution of the same files to several places.
All files stored in the FriendFS is spread out to the storage servers available in an even manner. The files are split into blocks and these are encrypted before being stored in a storage. The file system handles the file system information but this is replicated to storage servers as well.
A storage server can be any supported form of storage, remote or local.
The servers are configured in the FriendFSConf.
Each storage server configuration contains information on
- how to reach the storage
- verification interval
- maximum storage capacity set.
Supported formats planned:
- Local directory
- FTP server
- WebDAV server
- SMB server
- SSH server
The file system is available as a FUSE file system that you can mount in any path.
The status if the file system is available in the file .friendfs_status in a mounted file system.
The file system is POSIX compatible and handles permission in the same way as ext2. All files are split into blocks and stored on the storage servers.
Each directory in the file system can have different configuration in regards to:
- Replication level
The replication level for a file is determined by the setting of the directory where the file is stored. The FriendFS will store the blocks in that number of storage servers as the redundancy level is set to. If a storage server is unavailable replication of the blocks will be scheduled.
- call to FriendFS FUSE: create
- create an entry in the file system for the file in the directory
- Schedule replication of File system
- Call to FUSE write
- If any data in that possition schedule removal of that block
- Split data into blocks
- Encrypt data with key
- Sign data using key
- Store signature for block in FS
- Store data in highest priority storage
- Store block data in file system
- Update mtime for file
- Schedule replication of file system
- Schedule replication of block
- Call FUSE read
- Fetch block from highest priority storage
- return data
- connect to storage
- store block as file using signature as filename
- Connect to storage
- Fetch file using signature as filename
- Connect to storage
- List files in dir
- Compare to signature list for storage
- Schedule delete of removed blocks
- Schedule replication of missing blocks
- Find highest priority storage
- Read block from storage
- Write block to new storage
- Add verification interval for each storage in queue
- Perform action in queue.