A robust distributed Network File System implementation that enables seamless file operations across networked systems. Built as part of the Operating Systems and Networks course at IIIT Hyderabad.
-
Distributed Architecture 🏗️
- Naming Server for centralized coordination
- Multiple Storage Servers for distributed data storage
- Client interface for seamless interaction
-
Core Operations 📝
- File/Directory Creation and Deletion
- Synchronous and Asynchronous File Writing
- File Reading and Information Retrieval
- Audio File Streaming
- Inter-Server File/Directory Copying
-
Advanced Capabilities 🚀
- Multiple Client Support with Concurrency Control
- LRU Caching for Optimized Performance
- Efficient Search using Advanced Data Structures
- Comprehensive Error Handling
- Data Replication and Backup
- Server Recovery Management
-
Naming Server
- Central coordinator for the entire system
- Manages directory structure and file locations
- Handles client request routing
- Implements LRU caching and efficient search
-
Storage Servers
- Physical storage management
- File operations execution
- Data replication support
- Asynchronous write capabilities
-
Clients
- User interface for file system operations
- Direct communication with storage servers
- Support for concurrent operations
- C compiler (gcc recommended)
- POSIX-compliant system
- TCP/IP network connection
Basically any Unix-like system should work. If you're on Windows, you can use WSL or a virtual machine, but your mileage may vary.
make # Build the entire project
make clean # Clean up build artifacts-
Start the Naming Server
./naming_server.out
Enter the port and the naming server will start running.
-
Start the Storage Server
./storage_server.out <naming_server_ip> <naming_server_port>
You can start as many storage servers as you want. The naming server will automatically detect and register them.
-
Start the Client
./client.out <naming_server_ip> <naming_server_port>
Use the client interface to perform file operations.
.
├── LICENSE
├── Makefile
├── README.md
├── most_wanted
├── nfs
│ ├── client
│ │ ├── client.c
│ │ ├── client.h
│ │ └── revenge.sh
│ ├── common
│ │ ├── include
│ │ │ ├── colors.h
│ │ │ ├── dataTypes.h
│ │ │ ├── defs.h
│ │ │ ├── errors.h
│ │ │ ├── hashMap.h
│ │ │ ├── linkedList.h
│ │ │ └── network.h
│ │ └── src
│ │ ├── errors.c
│ │ ├── hashMap.c
│ │ ├── linkedList.c
│ │ └── network.c
│ ├── naming_server
│ │ ├── cluster.c
│ │ ├── cluster.h
│ │ ├── commSS.c
│ │ ├── commSS.h
│ │ ├── fileSystem.c
│ │ ├── fileSystem.h
│ │ ├── naming.c
│ │ └── naming.h
│ └── storage_server
│ ├── storage.c
│ └── storage.h
└── protocols.md
- Operating Systems and Networks Course, IIIT Hyderabad
- POSIX standards
- Claude and ChatGPT for inspiration
- Beyoncé
Distributed under the GNU General Public License v3.0. See LICENSE for more information.
Built with ❤️ at IIIT Hyderabad