Project #2: File Systems (zip file) Due April 4th
- Understand the mechanisms behind a full-featured Linux filesystem
- Write code that conforms to a robust and complex API
- Make a cool and useful filesystem Project Details:
The goal of this project is to implement a file system. We will be using the FUSE userspace filesystem module in Linux. The code I am providing is a reference to help you get started, and it has pointers to additional (and better) additional information. Reading the man pages for the POSIX operations that your code mimics is a good idea too.
Before you get started, note that you will need to install some fuse development packages, via 'apt-get':
Part 1 (50pts): Extend (or completely rewrite) the given implementation to support the following:
Persistence: When mounting your filesystem, please give the name of a file. The filesystem should be stored, in its entirety, inside this file, so that you can unmount and remount the filesystem without losing work.
Part 2 (40pts): Add the following:
Directories: The current filesystem is flat: all files are in the root directory. Extend the code so that you can have directories within directories, without a bound on the maximum depth.
Permissions: The current filesystem has incomplete support for read/write/execute permissions. Please update this.
Part 3 (10 pts): Add the following:
Large File Support: The current filesystem caps file sizes at 64KB. Create a mechanism (such as inodes, FAT, or some other option of your choosing) so that files can be at least 64MB (or larger, if you wish).
Part 4 (Bonus 10pts): Make your system robust:
Interactivity: One should be able to run a simple sequence of instructions from within emacs, using your filesystem, and have everything work correctly.
Robustness: One should be able to run 'make' to build your code from within your filesystem.
Additional Information: http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/
Note: Homework is collected at the beginning of class on the due date.