RemoteSyncFS is a distributed file system implementation using FUSE (Filesystem in Userspace) that provides transparent access to remote files. It automatically synchronizes file contents between local and remote machines, giving users the illusion of working with local files while keeping the content synchronized across systems.
- Transparent file access through FUSE file system interface
- Automatic file synchronization between machines using SCP
- Support for standard file operations (read, write, open, etc.)
- Performance measurement tools for distributed file system evaluation
RemoteSyncFS implements a FUSE-based file system that intercepts standard file operations:
- When a file is read, it first fetches the latest version from the remote server
- When a file is written, it synchronizes those changes back to the remote server
- All operations appear transparent to applications accessing the files
- Linux-based operating system
- FUSE development libraries (libfuse-dev)
- SSH access with key-based authentication to remote machines
- C/C++ compiler (gcc/g++)
-
Ensure you have FUSE installed:
sudo apt-get install libfuse-dev -
Configure SSH key-based authentication to the remote server
-
Create necessary directories:
mkdir -p /tmp/FUSE_REAL /tmp/FUSE_MOUNT -
Compile and run:
make assignment
The system mounts a FUSE filesystem at /tmp/FUSE_MOUNT, which provides access to files from the remote server. Any changes made to files in this directory are automatically synchronized with the remote server.
The codebase includes several experiment files to measure performance metrics:
- experiment_1.cpp: Measures latency for repeated write-read operations
- experiment_2.cpp: Additional performance measurements
- experiment_3.cpp: Additional performance measurements
To unmount the filesystem and clean up:
make clean
The implementation uses:
- FUSE API to implement file system operations
- SCP for secure file transfers between machines
- Standard C/C++ I/O operations for local file handling
This implementation currently supports a single file named "foo" as a proof of concept. The paths for local and remote files are configured in the source code.