File Systems: Difference between revisions

Undo revision 28897 by Drkeph (talk) duplicate line removed
[unchecked revision][unchecked revision]
(Re-add USTAR. It's just as much a filesystem as ISO9660 and is a very viable choice for a read-only ramdisk.)
(Undo revision 28897 by Drkeph (talk) duplicate line removed)
 
(15 intermediate revisions by 6 users not shown)
Line 80:
 
'''[[USTAR]]'''
* <code>+</code> Of these beginner "filesystems", this is the simplest by far to implement
* <code>+</code> UsesIncredibly 512simple: bytea sectorssector justwith likemetadata floppiesfollowed andby disksdata sectors
* <code>+</code> Widely used,: utilityutilities to create tar images are available for every mainstream OS and many minor ones
* <code>+</code> Incredibly simple, a sector with meta data followed by data sectors
* <code>+</code> Widely used, utility to create tar images are available for every mainstream OS
* <code>+</code> Supports special files (like devices and symlinks)
* <code>+</code> Supports Unix permissions
* <code>-</code> Not a filesystem in the common understanding of the term
* <code>-</code> Generally read-only, was never designed for in-place modifications
* <code>-</code> No support for fragmentation
* <code>-</code> No standard partition type for it, (not that you'll haveshould even consider using toUSTAR pickas onea ondisk yourpartition ownformat)
* <code>-</code> Not actually the format used for ramdisks by things like Linux - that's CPIO
 
'''RAMFS/TMPFS'''
Line 126 ⟶ 128:
'''[[ISO 9660]]'''
The defined standard for CDs. If you boot from CD then this is the way to go. If not, don't make it your first filesystem.
 
'''[[PureFS]]'''
* <code>+</code> Easy to implement
* <code>+</code> Supports large files
* <code>+</code> Supports nested directories
* <code>-</code> No support for Unix permissions
* <code>-</code> It can be journalable, provided that the OS takes care of this task itself
* <code>-</code> The maximum length of the file name is 255 characters
* <code>-</code> The maximum number of volumes is 40
* <code>-</code> Does not support Unicode names
* <code>-</code> Takes up a lot of space
 
=== Rolling your own ===
Line 135 ⟶ 148:
* Consider carefully what it will be used for.
* Use a program to figure out the layout (e.g. a spreadsheet). The basic areas needed are:
** Bootsector. This is essential for booting on some systems such as BIOS-x86 and Atari ST, unnecessary for others such as UEFI and OpenFirmware. Even if you don't intend to boot on systems which require it, reserving the first sector will allow your OS to be ported to them at a later time. Note that reserving space for a MBR-like partition table is needed to allow the filesystem to work in "logical partitions".
** Bootsector. Unless you are booting with UEFI, this is a must. Even then, it's recommended to include it in the specs for compatibility with older file systems. This section should contain at a minimum the disk size, location of the file table, hidden sectors for multiple partition disks, and a version number. I'd be leaving plenty of reserved space for features you don't think of. Don't forget to leave space for a jmp instruction and the boot code!.
** Partition metadata. This could fit into the first sector with the boot code, or be a separate group of sectors at a specific location. (FAT puts it in the first sector, calling it the FAT parameter block. ext* use a separate location, calling it the superblock.) At a minimum, this should contain the filesystem size, location of the file table, and a version number. Leave plenty of reserved space for features you don't think of. If you put it in the first sector, don't forget to leave space for a jmp instruction, the boot code, and a partition table!
** File table. Don't think of this as just a simple table containing a list of files and their locations. One idea is, instead of storing files, the system would store file parts, and the file table would list the parts in each file. This would be useful for saving space if many files on the disk are the same or similar (for example, license agreements).
** Data area. Files will be stored here.
Line 145 ⟶ 159:
Once you have a beginner's file system under your belt you might want support for more advanced ones. Here are some:
*[[NTFS]] - (Windows) New Technologies File System. It's hard to find documentation. Try [http://www.opensource.apple.com/source/ntfs/ Apple NTFS (open source)].
*Btrfs - B-tree file system. It's a Linux file system with features such as copy-on-write and transparent compression.
 
== See Also ==
* [[I use a Custom Filesystem - What Bootloader Solution is right for me%3F]]
=== Wiki Pages ===
 
[[I use a Custom Filesystem - What Bootloader Solution is right for me%3F]]
=== WikiExternal Pageslinks ===
* [https://blog.koehntopp.info/2023/05/05/50-years-in-filesystems-1974.html 50 years in filesystems] -- an approachable account of the history of file systems. Includes, among other information, some real-world examples of heuristics one can use to avoid fragmentation.
 
[[Category:OS theory]]
Anonymous user