xref: /linux/Documentation/filesystems/sysv-fs.rst (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
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