1826a613dSMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 2826a613dSMauro Carvalho Chehab 3826a613dSMauro Carvalho Chehab================== 4826a613dSMauro Carvalho ChehabSystemV Filesystem 5826a613dSMauro Carvalho Chehab================== 6826a613dSMauro Carvalho Chehab 7826a613dSMauro Carvalho ChehabIt implements all of 8826a613dSMauro Carvalho Chehab - Xenix FS, 9826a613dSMauro Carvalho Chehab - SystemV/386 FS, 10826a613dSMauro Carvalho Chehab - Coherent FS. 11826a613dSMauro Carvalho Chehab 12826a613dSMauro Carvalho ChehabTo install: 13826a613dSMauro Carvalho Chehab 14826a613dSMauro Carvalho Chehab* Answer the 'System V and Coherent filesystem support' question with 'y' 15826a613dSMauro Carvalho Chehab when configuring the kernel. 16826a613dSMauro Carvalho Chehab* To mount a disk or a partition, use:: 17826a613dSMauro Carvalho Chehab 18826a613dSMauro Carvalho Chehab mount [-r] -t sysv device mountpoint 19826a613dSMauro Carvalho Chehab 20826a613dSMauro Carvalho Chehab The file system type names:: 21826a613dSMauro Carvalho Chehab 22826a613dSMauro Carvalho Chehab -t sysv 23826a613dSMauro Carvalho Chehab -t xenix 24826a613dSMauro Carvalho Chehab -t coherent 25826a613dSMauro Carvalho Chehab 26826a613dSMauro Carvalho Chehab may be used interchangeably, but the last two will eventually disappear. 27826a613dSMauro Carvalho Chehab 28826a613dSMauro Carvalho ChehabBugs in the present implementation: 29826a613dSMauro Carvalho Chehab 30826a613dSMauro Carvalho Chehab- Coherent FS: 31826a613dSMauro Carvalho Chehab 32826a613dSMauro Carvalho Chehab - The "free list interleave" n:m is currently ignored. 33826a613dSMauro Carvalho Chehab - Only file systems with no filesystem name and no pack name are recognized. 34826a613dSMauro Carvalho Chehab (See Coherent "man mkfs" for a description of these features.) 35826a613dSMauro Carvalho Chehab 36826a613dSMauro Carvalho Chehab- SystemV Release 2 FS: 37826a613dSMauro Carvalho Chehab 38826a613dSMauro Carvalho Chehab The superblock is only searched in the blocks 9, 15, 18, which 39826a613dSMauro Carvalho Chehab corresponds to the beginning of track 1 on floppy disks. No support 40826a613dSMauro Carvalho Chehab for this FS on hard disk yet. 41826a613dSMauro Carvalho Chehab 42826a613dSMauro Carvalho Chehab 43826a613dSMauro Carvalho ChehabThese filesystems are rather similar. Here is a comparison with Minix FS: 44826a613dSMauro Carvalho Chehab 45826a613dSMauro Carvalho Chehab* Linux fdisk reports on partitions 46826a613dSMauro Carvalho Chehab 47826a613dSMauro Carvalho Chehab - Minix FS 0x81 Linux/Minix 48826a613dSMauro Carvalho Chehab - Xenix FS ?? 49826a613dSMauro Carvalho Chehab - SystemV FS ?? 50826a613dSMauro Carvalho Chehab - Coherent FS 0x08 AIX bootable 51826a613dSMauro Carvalho Chehab 52826a613dSMauro Carvalho Chehab* Size of a block or zone (data allocation unit on disk) 53826a613dSMauro Carvalho Chehab 54826a613dSMauro Carvalho Chehab - Minix FS 1024 55826a613dSMauro Carvalho Chehab - Xenix FS 1024 (also 512 ??) 56826a613dSMauro Carvalho Chehab - SystemV FS 1024 (also 512 and 2048) 57826a613dSMauro Carvalho Chehab - Coherent FS 512 58826a613dSMauro Carvalho Chehab 59826a613dSMauro Carvalho Chehab* General layout: all have one boot block, one super block and 60826a613dSMauro Carvalho Chehab separate areas for inodes and for directories/data. 61826a613dSMauro Carvalho Chehab On SystemV Release 2 FS (e.g. Microport) the first track is reserved and 62826a613dSMauro Carvalho Chehab all the block numbers (including the super block) are offset by one track. 63826a613dSMauro Carvalho Chehab 64826a613dSMauro Carvalho Chehab* Byte ordering of "short" (16 bit entities) on disk: 65826a613dSMauro Carvalho Chehab 66826a613dSMauro Carvalho Chehab - Minix FS little endian 0 1 67826a613dSMauro Carvalho Chehab - Xenix FS little endian 0 1 68826a613dSMauro Carvalho Chehab - SystemV FS little endian 0 1 69826a613dSMauro Carvalho Chehab - Coherent FS little endian 0 1 70826a613dSMauro Carvalho Chehab 71826a613dSMauro Carvalho Chehab Of course, this affects only the file system, not the data of files on it! 72826a613dSMauro Carvalho Chehab 73826a613dSMauro Carvalho Chehab* Byte ordering of "long" (32 bit entities) on disk: 74826a613dSMauro Carvalho Chehab 75826a613dSMauro Carvalho Chehab - Minix FS little endian 0 1 2 3 76826a613dSMauro Carvalho Chehab - Xenix FS little endian 0 1 2 3 77826a613dSMauro Carvalho Chehab - SystemV FS little endian 0 1 2 3 78826a613dSMauro Carvalho Chehab - Coherent FS PDP-11 2 3 0 1 79826a613dSMauro Carvalho Chehab 80826a613dSMauro Carvalho Chehab Of course, this affects only the file system, not the data of files on it! 81826a613dSMauro Carvalho Chehab 82826a613dSMauro Carvalho Chehab* Inode on disk: "short", 0 means non-existent, the root dir ino is: 83826a613dSMauro Carvalho Chehab 84826a613dSMauro Carvalho Chehab ================================= == 85826a613dSMauro Carvalho Chehab Minix FS 1 86826a613dSMauro Carvalho Chehab Xenix FS, SystemV FS, Coherent FS 2 87826a613dSMauro Carvalho Chehab ================================= == 88826a613dSMauro Carvalho Chehab 89826a613dSMauro Carvalho Chehab* Maximum number of hard links to a file: 90826a613dSMauro Carvalho Chehab 91826a613dSMauro Carvalho Chehab =========== ========= 92826a613dSMauro Carvalho Chehab Minix FS 250 93826a613dSMauro Carvalho Chehab Xenix FS ?? 94826a613dSMauro Carvalho Chehab SystemV FS ?? 95826a613dSMauro Carvalho Chehab Coherent FS >=10000 96826a613dSMauro Carvalho Chehab =========== ========= 97826a613dSMauro Carvalho Chehab 98826a613dSMauro Carvalho Chehab* Free inode management: 99826a613dSMauro Carvalho Chehab 100826a613dSMauro Carvalho Chehab - Minix FS 101826a613dSMauro Carvalho Chehab a bitmap 102826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS 103826a613dSMauro Carvalho Chehab There is a cache of a certain number of free inodes in the super-block. 104826a613dSMauro Carvalho Chehab When it is exhausted, new free inodes are found using a linear search. 105826a613dSMauro Carvalho Chehab 106826a613dSMauro Carvalho Chehab* Free block management: 107826a613dSMauro Carvalho Chehab 108826a613dSMauro Carvalho Chehab - Minix FS 109826a613dSMauro Carvalho Chehab a bitmap 110826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS 111826a613dSMauro Carvalho Chehab Free blocks are organized in a "free list". Maybe a misleading term, 112826a613dSMauro Carvalho Chehab since it is not true that every free block contains a pointer to 113826a613dSMauro Carvalho Chehab the next free block. Rather, the free blocks are organized in chunks 114826a613dSMauro Carvalho Chehab of limited size, and every now and then a free block contains pointers 115826a613dSMauro Carvalho Chehab to the free blocks pertaining to the next chunk; the first of these 116826a613dSMauro Carvalho Chehab contains pointers and so on. The list terminates with a "block number" 117826a613dSMauro Carvalho Chehab 0 on Xenix FS and SystemV FS, with a block zeroed out on Coherent FS. 118826a613dSMauro Carvalho Chehab 119826a613dSMauro Carvalho Chehab* Super-block location: 120826a613dSMauro Carvalho Chehab 121826a613dSMauro Carvalho Chehab =========== ========================== 122826a613dSMauro Carvalho Chehab Minix FS block 1 = bytes 1024..2047 123826a613dSMauro Carvalho Chehab Xenix FS block 1 = bytes 1024..2047 124826a613dSMauro Carvalho Chehab SystemV FS bytes 512..1023 125826a613dSMauro Carvalho Chehab Coherent FS block 1 = bytes 512..1023 126826a613dSMauro Carvalho Chehab =========== ========================== 127826a613dSMauro Carvalho Chehab 128826a613dSMauro Carvalho Chehab* Super-block layout: 129826a613dSMauro Carvalho Chehab 130826a613dSMauro Carvalho Chehab - Minix FS:: 131826a613dSMauro Carvalho Chehab 132826a613dSMauro Carvalho Chehab unsigned short s_ninodes; 133826a613dSMauro Carvalho Chehab unsigned short s_nzones; 134826a613dSMauro Carvalho Chehab unsigned short s_imap_blocks; 135826a613dSMauro Carvalho Chehab unsigned short s_zmap_blocks; 136826a613dSMauro Carvalho Chehab unsigned short s_firstdatazone; 137826a613dSMauro Carvalho Chehab unsigned short s_log_zone_size; 138826a613dSMauro Carvalho Chehab unsigned long s_max_size; 139826a613dSMauro Carvalho Chehab unsigned short s_magic; 140826a613dSMauro Carvalho Chehab 141826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 142826a613dSMauro Carvalho Chehab 143826a613dSMauro Carvalho Chehab unsigned short s_firstdatazone; 144826a613dSMauro Carvalho Chehab unsigned long s_nzones; 145826a613dSMauro Carvalho Chehab unsigned short s_fzone_count; 146826a613dSMauro Carvalho Chehab unsigned long s_fzones[NICFREE]; 147826a613dSMauro Carvalho Chehab unsigned short s_finode_count; 148826a613dSMauro Carvalho Chehab unsigned short s_finodes[NICINOD]; 149826a613dSMauro Carvalho Chehab char s_flock; 150826a613dSMauro Carvalho Chehab char s_ilock; 151826a613dSMauro Carvalho Chehab char s_modified; 152826a613dSMauro Carvalho Chehab char s_rdonly; 153826a613dSMauro Carvalho Chehab unsigned long s_time; 154826a613dSMauro Carvalho Chehab short s_dinfo[4]; -- SystemV FS only 155826a613dSMauro Carvalho Chehab unsigned long s_free_zones; 156826a613dSMauro Carvalho Chehab unsigned short s_free_inodes; 157826a613dSMauro Carvalho Chehab short s_dinfo[4]; -- Xenix FS only 158826a613dSMauro Carvalho Chehab unsigned short s_interleave_m,s_interleave_n; -- Coherent FS only 159826a613dSMauro Carvalho Chehab char s_fname[6]; 160826a613dSMauro Carvalho Chehab char s_fpack[6]; 161826a613dSMauro Carvalho Chehab 162826a613dSMauro Carvalho Chehab then they differ considerably: 163826a613dSMauro Carvalho Chehab 164826a613dSMauro Carvalho Chehab Xenix FS:: 165826a613dSMauro Carvalho Chehab 166826a613dSMauro Carvalho Chehab char s_clean; 167826a613dSMauro Carvalho Chehab char s_fill[371]; 168826a613dSMauro Carvalho Chehab long s_magic; 169826a613dSMauro Carvalho Chehab long s_type; 170826a613dSMauro Carvalho Chehab 171826a613dSMauro Carvalho Chehab SystemV FS:: 172826a613dSMauro Carvalho Chehab 173826a613dSMauro Carvalho Chehab long s_fill[12 or 14]; 174826a613dSMauro Carvalho Chehab long s_state; 175826a613dSMauro Carvalho Chehab long s_magic; 176826a613dSMauro Carvalho Chehab long s_type; 177826a613dSMauro Carvalho Chehab 178826a613dSMauro Carvalho Chehab Coherent FS:: 179826a613dSMauro Carvalho Chehab 180826a613dSMauro Carvalho Chehab unsigned long s_unique; 181826a613dSMauro Carvalho Chehab 182826a613dSMauro Carvalho Chehab Note that Coherent FS has no magic. 183826a613dSMauro Carvalho Chehab 184826a613dSMauro Carvalho Chehab* Inode layout: 185826a613dSMauro Carvalho Chehab 186826a613dSMauro Carvalho Chehab - Minix FS:: 187826a613dSMauro Carvalho Chehab 188826a613dSMauro Carvalho Chehab unsigned short i_mode; 189826a613dSMauro Carvalho Chehab unsigned short i_uid; 190826a613dSMauro Carvalho Chehab unsigned long i_size; 191826a613dSMauro Carvalho Chehab unsigned long i_time; 192826a613dSMauro Carvalho Chehab unsigned char i_gid; 193826a613dSMauro Carvalho Chehab unsigned char i_nlinks; 194826a613dSMauro Carvalho Chehab unsigned short i_zone[7+1+1]; 195826a613dSMauro Carvalho Chehab 196826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 197826a613dSMauro Carvalho Chehab 198826a613dSMauro Carvalho Chehab unsigned short i_mode; 199826a613dSMauro Carvalho Chehab unsigned short i_nlink; 200826a613dSMauro Carvalho Chehab unsigned short i_uid; 201826a613dSMauro Carvalho Chehab unsigned short i_gid; 202826a613dSMauro Carvalho Chehab unsigned long i_size; 203826a613dSMauro Carvalho Chehab unsigned char i_zone[3*(10+1+1+1)]; 204826a613dSMauro Carvalho Chehab unsigned long i_atime; 205826a613dSMauro Carvalho Chehab unsigned long i_mtime; 206826a613dSMauro Carvalho Chehab unsigned long i_ctime; 207826a613dSMauro Carvalho Chehab 208826a613dSMauro Carvalho Chehab 209826a613dSMauro Carvalho Chehab* Regular file data blocks are organized as 210826a613dSMauro Carvalho Chehab 211826a613dSMauro Carvalho Chehab - Minix FS: 212826a613dSMauro Carvalho Chehab 213826a613dSMauro Carvalho Chehab - 7 direct blocks 214826a613dSMauro Carvalho Chehab - 1 indirect block (pointers to blocks) 215826a613dSMauro Carvalho Chehab - 1 double-indirect block (pointer to pointers to blocks) 216826a613dSMauro Carvalho Chehab 217826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS: 218826a613dSMauro Carvalho Chehab 219826a613dSMauro Carvalho Chehab - 10 direct blocks 220826a613dSMauro Carvalho Chehab - 1 indirect block (pointers to blocks) 221826a613dSMauro Carvalho Chehab - 1 double-indirect block (pointer to pointers to blocks) 222826a613dSMauro Carvalho Chehab - 1 triple-indirect block (pointer to pointers to pointers to blocks) 223826a613dSMauro Carvalho Chehab 224826a613dSMauro Carvalho Chehab 225826a613dSMauro Carvalho Chehab =========== ========== ================ 226826a613dSMauro Carvalho Chehab Inode size inodes per block 227826a613dSMauro Carvalho Chehab =========== ========== ================ 228826a613dSMauro Carvalho Chehab Minix FS 32 32 229826a613dSMauro Carvalho Chehab Xenix FS 64 16 230826a613dSMauro Carvalho Chehab SystemV FS 64 16 231826a613dSMauro Carvalho Chehab Coherent FS 64 8 232826a613dSMauro Carvalho Chehab =========== ========== ================ 233826a613dSMauro Carvalho Chehab 234826a613dSMauro Carvalho Chehab* Directory entry on disk 235826a613dSMauro Carvalho Chehab 236826a613dSMauro Carvalho Chehab - Minix FS:: 237826a613dSMauro Carvalho Chehab 238826a613dSMauro Carvalho Chehab unsigned short inode; 239826a613dSMauro Carvalho Chehab char name[14/30]; 240826a613dSMauro Carvalho Chehab 241826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 242826a613dSMauro Carvalho Chehab 243826a613dSMauro Carvalho Chehab unsigned short inode; 244826a613dSMauro Carvalho Chehab char name[14]; 245826a613dSMauro Carvalho Chehab 246826a613dSMauro Carvalho Chehab =========== ============== ===================== 247826a613dSMauro Carvalho Chehab Dir entry size dir entries per block 248826a613dSMauro Carvalho Chehab =========== ============== ===================== 249826a613dSMauro Carvalho Chehab Minix FS 16/32 64/32 250826a613dSMauro Carvalho Chehab Xenix FS 16 64 251826a613dSMauro Carvalho Chehab SystemV FS 16 64 252826a613dSMauro Carvalho Chehab Coherent FS 16 32 253826a613dSMauro Carvalho Chehab =========== ============== ===================== 254826a613dSMauro Carvalho Chehab 255826a613dSMauro Carvalho Chehab* How to implement symbolic links such that the host fsck doesn't scream: 256826a613dSMauro Carvalho Chehab 257826a613dSMauro Carvalho Chehab - Minix FS normal 258826a613dSMauro Carvalho Chehab - Xenix FS kludge: as regular files with chmod 1000 259826a613dSMauro Carvalho Chehab - SystemV FS ?? 260826a613dSMauro Carvalho Chehab - Coherent FS kludge: as regular files with chmod 1000 261826a613dSMauro Carvalho Chehab 262826a613dSMauro Carvalho Chehab 263826a613dSMauro Carvalho ChehabNotation: We often speak of a "block" but mean a zone (the allocation unit) 264826a613dSMauro Carvalho Chehaband not the disk driver's notion of "block". 265