cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sysv-fs.rst (8313B)


      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".