1*826a613dSMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 2*826a613dSMauro Carvalho Chehab 3*826a613dSMauro Carvalho Chehab================== 4*826a613dSMauro Carvalho ChehabSystemV Filesystem 5*826a613dSMauro Carvalho Chehab================== 6*826a613dSMauro Carvalho Chehab 7*826a613dSMauro Carvalho ChehabIt implements all of 8*826a613dSMauro Carvalho Chehab - Xenix FS, 9*826a613dSMauro Carvalho Chehab - SystemV/386 FS, 10*826a613dSMauro Carvalho Chehab - Coherent FS. 11*826a613dSMauro Carvalho Chehab 12*826a613dSMauro Carvalho ChehabTo install: 13*826a613dSMauro Carvalho Chehab 14*826a613dSMauro Carvalho Chehab* Answer the 'System V and Coherent filesystem support' question with 'y' 15*826a613dSMauro Carvalho Chehab when configuring the kernel. 16*826a613dSMauro Carvalho Chehab* To mount a disk or a partition, use:: 17*826a613dSMauro Carvalho Chehab 18*826a613dSMauro Carvalho Chehab mount [-r] -t sysv device mountpoint 19*826a613dSMauro Carvalho Chehab 20*826a613dSMauro Carvalho Chehab The file system type names:: 21*826a613dSMauro Carvalho Chehab 22*826a613dSMauro Carvalho Chehab -t sysv 23*826a613dSMauro Carvalho Chehab -t xenix 24*826a613dSMauro Carvalho Chehab -t coherent 25*826a613dSMauro Carvalho Chehab 26*826a613dSMauro Carvalho Chehab may be used interchangeably, but the last two will eventually disappear. 27*826a613dSMauro Carvalho Chehab 28*826a613dSMauro Carvalho ChehabBugs in the present implementation: 29*826a613dSMauro Carvalho Chehab 30*826a613dSMauro Carvalho Chehab- Coherent FS: 31*826a613dSMauro Carvalho Chehab 32*826a613dSMauro Carvalho Chehab - The "free list interleave" n:m is currently ignored. 33*826a613dSMauro Carvalho Chehab - Only file systems with no filesystem name and no pack name are recognized. 34*826a613dSMauro Carvalho Chehab (See Coherent "man mkfs" for a description of these features.) 35*826a613dSMauro Carvalho Chehab 36*826a613dSMauro Carvalho Chehab- SystemV Release 2 FS: 37*826a613dSMauro Carvalho Chehab 38*826a613dSMauro Carvalho Chehab The superblock is only searched in the blocks 9, 15, 18, which 39*826a613dSMauro Carvalho Chehab corresponds to the beginning of track 1 on floppy disks. No support 40*826a613dSMauro Carvalho Chehab for this FS on hard disk yet. 41*826a613dSMauro Carvalho Chehab 42*826a613dSMauro Carvalho Chehab 43*826a613dSMauro Carvalho ChehabThese filesystems are rather similar. Here is a comparison with Minix FS: 44*826a613dSMauro Carvalho Chehab 45*826a613dSMauro Carvalho Chehab* Linux fdisk reports on partitions 46*826a613dSMauro Carvalho Chehab 47*826a613dSMauro Carvalho Chehab - Minix FS 0x81 Linux/Minix 48*826a613dSMauro Carvalho Chehab - Xenix FS ?? 49*826a613dSMauro Carvalho Chehab - SystemV FS ?? 50*826a613dSMauro Carvalho Chehab - Coherent FS 0x08 AIX bootable 51*826a613dSMauro Carvalho Chehab 52*826a613dSMauro Carvalho Chehab* Size of a block or zone (data allocation unit on disk) 53*826a613dSMauro Carvalho Chehab 54*826a613dSMauro Carvalho Chehab - Minix FS 1024 55*826a613dSMauro Carvalho Chehab - Xenix FS 1024 (also 512 ??) 56*826a613dSMauro Carvalho Chehab - SystemV FS 1024 (also 512 and 2048) 57*826a613dSMauro Carvalho Chehab - Coherent FS 512 58*826a613dSMauro Carvalho Chehab 59*826a613dSMauro Carvalho Chehab* General layout: all have one boot block, one super block and 60*826a613dSMauro Carvalho Chehab separate areas for inodes and for directories/data. 61*826a613dSMauro Carvalho Chehab On SystemV Release 2 FS (e.g. Microport) the first track is reserved and 62*826a613dSMauro Carvalho Chehab all the block numbers (including the super block) are offset by one track. 63*826a613dSMauro Carvalho Chehab 64*826a613dSMauro Carvalho Chehab* Byte ordering of "short" (16 bit entities) on disk: 65*826a613dSMauro Carvalho Chehab 66*826a613dSMauro Carvalho Chehab - Minix FS little endian 0 1 67*826a613dSMauro Carvalho Chehab - Xenix FS little endian 0 1 68*826a613dSMauro Carvalho Chehab - SystemV FS little endian 0 1 69*826a613dSMauro Carvalho Chehab - Coherent FS little endian 0 1 70*826a613dSMauro Carvalho Chehab 71*826a613dSMauro Carvalho Chehab Of course, this affects only the file system, not the data of files on it! 72*826a613dSMauro Carvalho Chehab 73*826a613dSMauro Carvalho Chehab* Byte ordering of "long" (32 bit entities) on disk: 74*826a613dSMauro Carvalho Chehab 75*826a613dSMauro Carvalho Chehab - Minix FS little endian 0 1 2 3 76*826a613dSMauro Carvalho Chehab - Xenix FS little endian 0 1 2 3 77*826a613dSMauro Carvalho Chehab - SystemV FS little endian 0 1 2 3 78*826a613dSMauro Carvalho Chehab - Coherent FS PDP-11 2 3 0 1 79*826a613dSMauro Carvalho Chehab 80*826a613dSMauro Carvalho Chehab Of course, this affects only the file system, not the data of files on it! 81*826a613dSMauro Carvalho Chehab 82*826a613dSMauro Carvalho Chehab* Inode on disk: "short", 0 means non-existent, the root dir ino is: 83*826a613dSMauro Carvalho Chehab 84*826a613dSMauro Carvalho Chehab ================================= == 85*826a613dSMauro Carvalho Chehab Minix FS 1 86*826a613dSMauro Carvalho Chehab Xenix FS, SystemV FS, Coherent FS 2 87*826a613dSMauro Carvalho Chehab ================================= == 88*826a613dSMauro Carvalho Chehab 89*826a613dSMauro Carvalho Chehab* Maximum number of hard links to a file: 90*826a613dSMauro Carvalho Chehab 91*826a613dSMauro Carvalho Chehab =========== ========= 92*826a613dSMauro Carvalho Chehab Minix FS 250 93*826a613dSMauro Carvalho Chehab Xenix FS ?? 94*826a613dSMauro Carvalho Chehab SystemV FS ?? 95*826a613dSMauro Carvalho Chehab Coherent FS >=10000 96*826a613dSMauro Carvalho Chehab =========== ========= 97*826a613dSMauro Carvalho Chehab 98*826a613dSMauro Carvalho Chehab* Free inode management: 99*826a613dSMauro Carvalho Chehab 100*826a613dSMauro Carvalho Chehab - Minix FS 101*826a613dSMauro Carvalho Chehab a bitmap 102*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS 103*826a613dSMauro Carvalho Chehab There is a cache of a certain number of free inodes in the super-block. 104*826a613dSMauro Carvalho Chehab When it is exhausted, new free inodes are found using a linear search. 105*826a613dSMauro Carvalho Chehab 106*826a613dSMauro Carvalho Chehab* Free block management: 107*826a613dSMauro Carvalho Chehab 108*826a613dSMauro Carvalho Chehab - Minix FS 109*826a613dSMauro Carvalho Chehab a bitmap 110*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS 111*826a613dSMauro Carvalho Chehab Free blocks are organized in a "free list". Maybe a misleading term, 112*826a613dSMauro Carvalho Chehab since it is not true that every free block contains a pointer to 113*826a613dSMauro Carvalho Chehab the next free block. Rather, the free blocks are organized in chunks 114*826a613dSMauro Carvalho Chehab of limited size, and every now and then a free block contains pointers 115*826a613dSMauro Carvalho Chehab to the free blocks pertaining to the next chunk; the first of these 116*826a613dSMauro Carvalho Chehab contains pointers and so on. The list terminates with a "block number" 117*826a613dSMauro Carvalho Chehab 0 on Xenix FS and SystemV FS, with a block zeroed out on Coherent FS. 118*826a613dSMauro Carvalho Chehab 119*826a613dSMauro Carvalho Chehab* Super-block location: 120*826a613dSMauro Carvalho Chehab 121*826a613dSMauro Carvalho Chehab =========== ========================== 122*826a613dSMauro Carvalho Chehab Minix FS block 1 = bytes 1024..2047 123*826a613dSMauro Carvalho Chehab Xenix FS block 1 = bytes 1024..2047 124*826a613dSMauro Carvalho Chehab SystemV FS bytes 512..1023 125*826a613dSMauro Carvalho Chehab Coherent FS block 1 = bytes 512..1023 126*826a613dSMauro Carvalho Chehab =========== ========================== 127*826a613dSMauro Carvalho Chehab 128*826a613dSMauro Carvalho Chehab* Super-block layout: 129*826a613dSMauro Carvalho Chehab 130*826a613dSMauro Carvalho Chehab - Minix FS:: 131*826a613dSMauro Carvalho Chehab 132*826a613dSMauro Carvalho Chehab unsigned short s_ninodes; 133*826a613dSMauro Carvalho Chehab unsigned short s_nzones; 134*826a613dSMauro Carvalho Chehab unsigned short s_imap_blocks; 135*826a613dSMauro Carvalho Chehab unsigned short s_zmap_blocks; 136*826a613dSMauro Carvalho Chehab unsigned short s_firstdatazone; 137*826a613dSMauro Carvalho Chehab unsigned short s_log_zone_size; 138*826a613dSMauro Carvalho Chehab unsigned long s_max_size; 139*826a613dSMauro Carvalho Chehab unsigned short s_magic; 140*826a613dSMauro Carvalho Chehab 141*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 142*826a613dSMauro Carvalho Chehab 143*826a613dSMauro Carvalho Chehab unsigned short s_firstdatazone; 144*826a613dSMauro Carvalho Chehab unsigned long s_nzones; 145*826a613dSMauro Carvalho Chehab unsigned short s_fzone_count; 146*826a613dSMauro Carvalho Chehab unsigned long s_fzones[NICFREE]; 147*826a613dSMauro Carvalho Chehab unsigned short s_finode_count; 148*826a613dSMauro Carvalho Chehab unsigned short s_finodes[NICINOD]; 149*826a613dSMauro Carvalho Chehab char s_flock; 150*826a613dSMauro Carvalho Chehab char s_ilock; 151*826a613dSMauro Carvalho Chehab char s_modified; 152*826a613dSMauro Carvalho Chehab char s_rdonly; 153*826a613dSMauro Carvalho Chehab unsigned long s_time; 154*826a613dSMauro Carvalho Chehab short s_dinfo[4]; -- SystemV FS only 155*826a613dSMauro Carvalho Chehab unsigned long s_free_zones; 156*826a613dSMauro Carvalho Chehab unsigned short s_free_inodes; 157*826a613dSMauro Carvalho Chehab short s_dinfo[4]; -- Xenix FS only 158*826a613dSMauro Carvalho Chehab unsigned short s_interleave_m,s_interleave_n; -- Coherent FS only 159*826a613dSMauro Carvalho Chehab char s_fname[6]; 160*826a613dSMauro Carvalho Chehab char s_fpack[6]; 161*826a613dSMauro Carvalho Chehab 162*826a613dSMauro Carvalho Chehab then they differ considerably: 163*826a613dSMauro Carvalho Chehab 164*826a613dSMauro Carvalho Chehab Xenix FS:: 165*826a613dSMauro Carvalho Chehab 166*826a613dSMauro Carvalho Chehab char s_clean; 167*826a613dSMauro Carvalho Chehab char s_fill[371]; 168*826a613dSMauro Carvalho Chehab long s_magic; 169*826a613dSMauro Carvalho Chehab long s_type; 170*826a613dSMauro Carvalho Chehab 171*826a613dSMauro Carvalho Chehab SystemV FS:: 172*826a613dSMauro Carvalho Chehab 173*826a613dSMauro Carvalho Chehab long s_fill[12 or 14]; 174*826a613dSMauro Carvalho Chehab long s_state; 175*826a613dSMauro Carvalho Chehab long s_magic; 176*826a613dSMauro Carvalho Chehab long s_type; 177*826a613dSMauro Carvalho Chehab 178*826a613dSMauro Carvalho Chehab Coherent FS:: 179*826a613dSMauro Carvalho Chehab 180*826a613dSMauro Carvalho Chehab unsigned long s_unique; 181*826a613dSMauro Carvalho Chehab 182*826a613dSMauro Carvalho Chehab Note that Coherent FS has no magic. 183*826a613dSMauro Carvalho Chehab 184*826a613dSMauro Carvalho Chehab* Inode layout: 185*826a613dSMauro Carvalho Chehab 186*826a613dSMauro Carvalho Chehab - Minix FS:: 187*826a613dSMauro Carvalho Chehab 188*826a613dSMauro Carvalho Chehab unsigned short i_mode; 189*826a613dSMauro Carvalho Chehab unsigned short i_uid; 190*826a613dSMauro Carvalho Chehab unsigned long i_size; 191*826a613dSMauro Carvalho Chehab unsigned long i_time; 192*826a613dSMauro Carvalho Chehab unsigned char i_gid; 193*826a613dSMauro Carvalho Chehab unsigned char i_nlinks; 194*826a613dSMauro Carvalho Chehab unsigned short i_zone[7+1+1]; 195*826a613dSMauro Carvalho Chehab 196*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 197*826a613dSMauro Carvalho Chehab 198*826a613dSMauro Carvalho Chehab unsigned short i_mode; 199*826a613dSMauro Carvalho Chehab unsigned short i_nlink; 200*826a613dSMauro Carvalho Chehab unsigned short i_uid; 201*826a613dSMauro Carvalho Chehab unsigned short i_gid; 202*826a613dSMauro Carvalho Chehab unsigned long i_size; 203*826a613dSMauro Carvalho Chehab unsigned char i_zone[3*(10+1+1+1)]; 204*826a613dSMauro Carvalho Chehab unsigned long i_atime; 205*826a613dSMauro Carvalho Chehab unsigned long i_mtime; 206*826a613dSMauro Carvalho Chehab unsigned long i_ctime; 207*826a613dSMauro Carvalho Chehab 208*826a613dSMauro Carvalho Chehab 209*826a613dSMauro Carvalho Chehab* Regular file data blocks are organized as 210*826a613dSMauro Carvalho Chehab 211*826a613dSMauro Carvalho Chehab - Minix FS: 212*826a613dSMauro Carvalho Chehab 213*826a613dSMauro Carvalho Chehab - 7 direct blocks 214*826a613dSMauro Carvalho Chehab - 1 indirect block (pointers to blocks) 215*826a613dSMauro Carvalho Chehab - 1 double-indirect block (pointer to pointers to blocks) 216*826a613dSMauro Carvalho Chehab 217*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS: 218*826a613dSMauro Carvalho Chehab 219*826a613dSMauro Carvalho Chehab - 10 direct blocks 220*826a613dSMauro Carvalho Chehab - 1 indirect block (pointers to blocks) 221*826a613dSMauro Carvalho Chehab - 1 double-indirect block (pointer to pointers to blocks) 222*826a613dSMauro Carvalho Chehab - 1 triple-indirect block (pointer to pointers to pointers to blocks) 223*826a613dSMauro Carvalho Chehab 224*826a613dSMauro Carvalho Chehab 225*826a613dSMauro Carvalho Chehab =========== ========== ================ 226*826a613dSMauro Carvalho Chehab Inode size inodes per block 227*826a613dSMauro Carvalho Chehab =========== ========== ================ 228*826a613dSMauro Carvalho Chehab Minix FS 32 32 229*826a613dSMauro Carvalho Chehab Xenix FS 64 16 230*826a613dSMauro Carvalho Chehab SystemV FS 64 16 231*826a613dSMauro Carvalho Chehab Coherent FS 64 8 232*826a613dSMauro Carvalho Chehab =========== ========== ================ 233*826a613dSMauro Carvalho Chehab 234*826a613dSMauro Carvalho Chehab* Directory entry on disk 235*826a613dSMauro Carvalho Chehab 236*826a613dSMauro Carvalho Chehab - Minix FS:: 237*826a613dSMauro Carvalho Chehab 238*826a613dSMauro Carvalho Chehab unsigned short inode; 239*826a613dSMauro Carvalho Chehab char name[14/30]; 240*826a613dSMauro Carvalho Chehab 241*826a613dSMauro Carvalho Chehab - Xenix FS, SystemV FS, Coherent FS:: 242*826a613dSMauro Carvalho Chehab 243*826a613dSMauro Carvalho Chehab unsigned short inode; 244*826a613dSMauro Carvalho Chehab char name[14]; 245*826a613dSMauro Carvalho Chehab 246*826a613dSMauro Carvalho Chehab =========== ============== ===================== 247*826a613dSMauro Carvalho Chehab Dir entry size dir entries per block 248*826a613dSMauro Carvalho Chehab =========== ============== ===================== 249*826a613dSMauro Carvalho Chehab Minix FS 16/32 64/32 250*826a613dSMauro Carvalho Chehab Xenix FS 16 64 251*826a613dSMauro Carvalho Chehab SystemV FS 16 64 252*826a613dSMauro Carvalho Chehab Coherent FS 16 32 253*826a613dSMauro Carvalho Chehab =========== ============== ===================== 254*826a613dSMauro Carvalho Chehab 255*826a613dSMauro Carvalho Chehab* How to implement symbolic links such that the host fsck doesn't scream: 256*826a613dSMauro Carvalho Chehab 257*826a613dSMauro Carvalho Chehab - Minix FS normal 258*826a613dSMauro Carvalho Chehab - Xenix FS kludge: as regular files with chmod 1000 259*826a613dSMauro Carvalho Chehab - SystemV FS ?? 260*826a613dSMauro Carvalho Chehab - Coherent FS kludge: as regular files with chmod 1000 261*826a613dSMauro Carvalho Chehab 262*826a613dSMauro Carvalho Chehab 263*826a613dSMauro Carvalho ChehabNotation: We often speak of a "block" but mean a zone (the allocation unit) 264*826a613dSMauro Carvalho Chehaband not the disk driver's notion of "block". 265