📄 romfs.txt
字号:
ROMFS - ROM FILE SYSTEMThis is a quite dumb, read only filesystem, mainly for initial RAMdisks of installation disks. It has grown up by the need of havingmodules linked at boot time. Using this filesystem, you get a verysimilar feature, and even the possibility of a small kernel, with afile system which doesn't take up useful memory from the routerfunctions in the basement of your office.For comparison, both the older minix and xiafs (the latter is nowdefunct) filesystems, compiled as module need more than 20000 bytes,while romfs is less than a page, about 4000 bytes (assuming i586code). Under the same conditions, the msdos filesystem would needabout 30K (and does not support device nodes or symlinks), while thenfs module with nfsroot is about 57K. Furthermore, as a bit unfaircomparison, an actual rescue disk used up 3202 blocks with ext2, whilewith romfs, it needed 3079 blocks.To create such a file system, you'll need a user program namedgenromfs. It is available via anonymous ftp on sunsite.unc.edu andits mirrors, in the /pub/Linux/system/recovery/ directory.As the name suggests, romfs could be also used (space-efficiently) onvarious read-only media, like (E)EPROM disks if someone will have themotivation.. :)However, the main purpose of romfs is to have a very small kernel,which has only this filesystem linked in, and then can load any modulelater, with the current module utilities. It can also be used to runsome program to decide if you need SCSI devices, and even IDE orfloppy drives can be loaded later if you use the "initrd"--initialRAM disk--feature of the kernel. This would not be really newsflash, but with romfs, you can even spare off your ext2 or minix ormaybe even affs filesystem until you really know that you need it.For example, a distribution boot disk can contain only the cd diskdrivers (and possibly the SCSI drivers), and the ISO 9660 filesystemmodule. The kernel can be small enough, since it doesn't have otherfilesystems, like the quite large ext2fs module, which can then beloaded off the CD at a later stage of the installation. Another usewould be for a recovery disk, when you are reinstalling a workstationfrom the network, and you will have all the tools/modules availablefrom a nearby server, so you don't want to carry two disks for thispurpose, just because it won't fit into ext2.romfs operates on block devices as you can expect, and the underlyingstructure is very simple. Every accessible structure begins on 16byte boundaries for fast access. The minimum space a file will takeis 32 bytes (this is an empty file, with a less than 16 charactername). The maximum overhead for any non-empty file is the header, andthe 16 byte padding for the name and the contents, also 16+14+15 = 45bytes. This is quite rare however, since most file names are longerthan 3 bytes, and shorter than 15 bytes.The layout of the filesystem is the following:offset content +---+---+---+---+ 0 | - | r | o | m | \ +---+---+---+---+ The ASCII representation of those bytes 4 | 1 | f | s | - | / (i.e. "-rom1fs-") +---+---+---+---+ 8 | full size | The number of accessible bytes in this fs. +---+---+---+---+ 12 | checksum | The checksum of the FIRST 512 BYTES. +---+---+---+---+ 16 | volume name | The zero terminated name of the volume, : : padded to 16 byte boundary. +---+---+---+---+ xx | file | : headers :Every multi byte value (32 bit words, I'll use the longwords term fromnow on) must be in big endian order.The first eight bytes identify the filesystem, even for the casualinspector. After that, in the 3rd longword, it contains the number ofbytes accessible from the start of this filesystem. The 4th longwordis the checksum of the first 512 bytes (or the number of bytesaccessible, whichever is smaller). The applied algorithm is the sameas in the AFFS filesystem, namely a simple sum of the longwords(assuming bigendian quantities again). For details, please consultthe source. This algorithm was chosen because although it's not quitereliable, it does not require any tables, and it is very simple.The following bytes are now part of the file system; each file headermust begin on a 16 byte boundary.offset content +---+---+---+---+ 0 | next filehdr|X| The offset of the next file header +---+---+---+---+ (zero if no more files) 4 | spec.info | Info for directories/hard links/devices +---+---+---+---+ 8 | size | The size of this file in bytes +---+---+---+---+ 12 | checksum | Covering the meta data, including the file +---+---+---+---+ name, and padding 16 | file name | The zero terminated name of the file, : : padded to 16 byte boundary +---+---+---+---+ xx | file data | : :Since the file headers begin always at a 16 byte boundary, the lowest4 bits would be always zero in the next filehdr pointer. These fourbits are used for the mode information. Bits 0..2 specify the type ofthe file; while bit 4 shows if the file is executable or not. Thepermissions are assumed to be world readable, if this bit is not set,and world executable if it is; except the character and block devices,they are never accessible for other than owner. The owner of everyfile is user and group 0, this should never be a problem for theintended use. The mapping of the 8 possible values to file types isthe following: mapping spec.info means 0 hard link link destination [file header] 1 directory first file's header 2 regular file unused, must be zero [MBZ] 3 symbolic link unused, MBZ (file data is the link content) 4 block device 16/16 bits major/minor number 5 char device - " - 6 socket unused, MBZ 7 fifo unused, MBZNote that hard links are specifically marked in this filesystem, butthey will behave as you can expect (i.e. share the inode number).Note also that it is your responsibility to not create hard linkloops, and creating all the . and .. links for directories. This isnormally done correctly by the genromfs program. Please refrain fromusing the executable bits for special purposes on the socket and fifospecial files, they may have other uses in the future. Additionally,please remember that only regular files, and symlinks are supposed tohave a nonzero size field; they contain the number of bytes availabledirectly after the (padded) file name.Another thing to note is that romfs works on file headers and dataaligned to 16 byte boundaries, but most hardware devices and the blockdevice drivers are unable to cope with smaller than block-sized data.To overcome this limitation, the whole size of the file system must bepadded to an 1024 byte boundary.If you have any problems or suggestions concerning this file system,please contact me. However, think twice before wanting me to addfeatures and code, because the primary and most important advantage ofthis file system is the small code. On the other hand, don't bealarmed, I'm not getting that much romfs related mail. Now I canunderstand why Avery wrote poems in the ARCnet docs to get some morefeedback. :)romfs has also a mailing list, and to date, it hasn't received anytraffic, so you are welcome to join it to discuss your ideas. :)It's run by ezmlm, so you can subscribe to it by sending a messageto romfs-subscribe@shadow.banki.hu, the content is irrelevant.Pending issues:- Permissions and owner information are pretty essential features of aUn*x like system, but romfs does not provide the full possibilities.I have never found this limiting, but others might.- The file system is read only, so it can be very small, but in caseone would want to write _anything_ to a file system, he still needsa writable file system, thus negating the size advantages. Possiblesolutions: implement write access as a compile-time option, or a new,similarly small writable filesystem for RAM disks.- Since the files are only required to have alignment on a 16 byteboundary, it is currently possibly suboptimal to read or execute filesfrom the filesystem. It might be resolved by reordering file data tohave most of it (i.e. except the start and the end) laying at "natural"boundaries, thus it would be possible to directly map a big portion ofthe file contents to the mm subsystem.- Compression might be an useful feature, but memory is quite alimiting factor in my eyes.- Where it is used?- Does it work on other architectures than intel and motorola?Have fun,Janos Farkas <chexum@shadow.banki.hu>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -