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