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