TFS - A File System
Posted: Sun Jun 07, 2009 10:24 am
I have designed a new filesystem, TFS. It is designed to be flexible, and to be implemented easily (like, very easily, I found).
It's basic workings include a variable index entry size, with slightly differing specs for each size (this allows one to create implementations very easily, as you can chose the level of complexity). Also, one of these index entry sizes (256) allows for storing file information directly inside the entry. There is no fragmentation support. Each index entry points to it's parent index entry, based on a simple static number assignment system. The first entry is 0 (root), the second is 2. This isn't based on creation order, but actual order on the disk.
This file system is loosely based upon SFS (mostly, the superblock format, and a couple other things), with permissions i got from the Ext2 entry on the wiki
This Filesystem also supports unix permissions, time stamps, user stuff, etc.
Index Entry sizes are as follows:
64 bytes - Basic file info (type, name, starting block in data area, length, and pointer to parent)
128 bytes - The above + Permissions, time, user stuff, OS ID, pointer to continuation entry (extra long file names). This entry also supports longer filenames than 64 bytes, even without a continuation.
256 bytes - Allows for everything above + storing 127 bytes of the file data in the entry.
Now, you may make the entry size above 256 (actually, the only other option is 512) and that can be used for whatever.
Less than 64 bytes entry is not supported.
If the size is 64 bytes, then files must be block aligned. If they are 128 bytes, then you can have data that says what the offset inside a block is.
Anyway, the full specification is here: http://microsea.googlecode.com/files/tfs_03.doc
Edit: Fixed a few things...lol
Please, comments? Suggestions? Criticisms?
this is my first serious attempt at a filesystem
-JL
It's basic workings include a variable index entry size, with slightly differing specs for each size (this allows one to create implementations very easily, as you can chose the level of complexity). Also, one of these index entry sizes (256) allows for storing file information directly inside the entry. There is no fragmentation support. Each index entry points to it's parent index entry, based on a simple static number assignment system. The first entry is 0 (root), the second is 2. This isn't based on creation order, but actual order on the disk.
This file system is loosely based upon SFS (mostly, the superblock format, and a couple other things), with permissions i got from the Ext2 entry on the wiki
This Filesystem also supports unix permissions, time stamps, user stuff, etc.
Index Entry sizes are as follows:
64 bytes - Basic file info (type, name, starting block in data area, length, and pointer to parent)
128 bytes - The above + Permissions, time, user stuff, OS ID, pointer to continuation entry (extra long file names). This entry also supports longer filenames than 64 bytes, even without a continuation.
256 bytes - Allows for everything above + storing 127 bytes of the file data in the entry.
Now, you may make the entry size above 256 (actually, the only other option is 512) and that can be used for whatever.
Less than 64 bytes entry is not supported.
If the size is 64 bytes, then files must be block aligned. If they are 128 bytes, then you can have data that says what the offset inside a block is.
Anyway, the full specification is here: http://microsea.googlecode.com/files/tfs_03.doc
Edit: Fixed a few things...lol
Please, comments? Suggestions? Criticisms?
this is my first serious attempt at a filesystem
-JL