SystemV 文件系统

它实现了以下所有文件系统:
  • Xenix FS,

  • SystemV/386 FS,

  • Coherent FS.

安装方法:

  • 在配置内核时,将“System V and Coherent filesystem support”问题的答案设置为“y”。

  • 要挂载磁盘或分区,请使用:

    mount [-r] -t sysv device mountpoint
    

    文件系统类型名称

    -t sysv
    -t xenix
    -t coherent
    

    可以互换使用,但最后两个最终会消失。

当前实现中的错误:

  • Coherent FS

    • “空闲列表交错” n:m 当前被忽略。

    • 仅识别没有文件系统名称和包名称的文件系统。(有关这些功能的描述,请参阅 Coherent “man mkfs”。)

  • SystemV Release 2 FS

    仅在块 9、15、18 中搜索超级块,这对应于软盘上磁道 1 的开头。尚不支持在硬盘上使用此文件系统。

这些文件系统非常相似。以下是与 Minix FS 的比较:

  • Linux fdisk 报告分区信息:

    • Minix FS 0x81 Linux/Minix

    • Xenix FS ??

    • SystemV FS ??

    • Coherent FS 0x08 AIX 可启动

  • 块或区域的大小(磁盘上的数据分配单元):

    • Minix FS 1024

    • Xenix FS 1024 (也可能是 512 ??)

    • SystemV FS 1024 (也可能是 512 和 2048)

    • Coherent FS 512

  • 一般布局:所有文件系统都有一个引导块、一个超级块以及用于 inode 和目录/数据的单独区域。在 SystemV Release 2 FS (例如 Microport) 上,第一个磁道被保留,并且所有块编号(包括超级块)都偏移一个磁道。

  • 磁盘上“short”(16 位实体)的字节顺序:

    • Minix FS 小端 0 1

    • Xenix FS 小端 0 1

    • SystemV FS 小端 0 1

    • Coherent FS 小端 0 1

    当然,这仅影响文件系统,而不影响其上的文件数据!

  • 磁盘上“long”(32 位实体)的字节顺序:

    • Minix FS 小端 0 1 2 3

    • Xenix FS 小端 0 1 2 3

    • SystemV FS 小端 0 1 2 3

    • Coherent FS PDP-11 2 3 0 1

    当然,这仅影响文件系统,而不影响其上的文件数据!

  • 磁盘上的 inode:“short”,0 表示不存在,根目录的 inode 为:

    Minix FS

    1

    Xenix FS, SystemV FS, Coherent FS

    2

  • 指向文件的最大硬链接数:

    Minix FS

    250

    Xenix FS

    ??

    SystemV FS

    ??

    Coherent FS

    >=10000

  • 空闲 inode 管理:

    • Minix FS

      位图

    • Xenix FS, SystemV FS, Coherent FS

      超级块中缓存了一定数量的空闲 inode。当用尽时,使用线性搜索找到新的空闲 inode。

  • 空闲块管理:

    • Minix FS

      位图

    • Xenix FS, SystemV FS, Coherent FS

      空闲块组织成一个“空闲列表”。这可能是一个误导性的术语,因为并非每个空闲块都包含指向下一个空闲块的指针。相反,空闲块以有限大小的块进行组织,并且不时地,一个空闲块包含指向下一个块的空闲块的指针;第一个包含指针,依此类推。该列表以 Xenix FS 和 SystemV FS 上的“块编号” 0 结尾,在 Coherent FS 上以块清零结尾。

  • 超级块位置:

    Minix FS

    块 1 = 字节 1024..2047

    Xenix FS

    块 1 = 字节 1024..2047

    SystemV FS

    字节 512..1023

    Coherent FS

    块 1 = 字节 512..1023

  • 超级块布局:

    • Minix FS

      unsigned short s_ninodes;
      unsigned short s_nzones;
      unsigned short s_imap_blocks;
      unsigned short s_zmap_blocks;
      unsigned short s_firstdatazone;
      unsigned short s_log_zone_size;
      unsigned long s_max_size;
      unsigned short s_magic;
      
    • Xenix FS, SystemV FS, Coherent FS

      unsigned short s_firstdatazone;
      unsigned long  s_nzones;
      unsigned short s_fzone_count;
      unsigned long  s_fzones[NICFREE];
      unsigned short s_finode_count;
      unsigned short s_finodes[NICINOD];
      char           s_flock;
      char           s_ilock;
      char           s_modified;
      char           s_rdonly;
      unsigned long  s_time;
      short          s_dinfo[4]; -- SystemV FS only
      unsigned long  s_free_zones;
      unsigned short s_free_inodes;
      short          s_dinfo[4]; -- Xenix FS only
      unsigned short s_interleave_m,s_interleave_n; -- Coherent FS only
      char           s_fname[6];
      char           s_fpack[6];
      

      然后它们有很大的不同

      Xenix FS

      char           s_clean;
      char           s_fill[371];
      long           s_magic;
      long           s_type;
      

      SystemV FS

      long           s_fill[12 or 14];
      long           s_state;
      long           s_magic;
      long           s_type;
      

      Coherent FS

      unsigned long  s_unique;
      

      请注意,Coherent FS 没有魔数。

  • Inode 布局:

    • Minix FS

      unsigned short i_mode;
      unsigned short i_uid;
      unsigned long  i_size;
      unsigned long  i_time;
      unsigned char  i_gid;
      unsigned char  i_nlinks;
      unsigned short i_zone[7+1+1];
      
    • Xenix FS, SystemV FS, Coherent FS

      unsigned short i_mode;
      unsigned short i_nlink;
      unsigned short i_uid;
      unsigned short i_gid;
      unsigned long  i_size;
      unsigned char  i_zone[3*(10+1+1+1)];
      unsigned long  i_atime;
      unsigned long  i_mtime;
      unsigned long  i_ctime;
      
  • 普通文件数据块的组织方式为:

    • Minix FS

      • 7 个直接块

      • 1 个间接块(指向块的指针)

      • 1 个双重间接块(指向指向块的指针的指针)

    • Xenix FS, SystemV FS, Coherent FS

      • 10 个直接块

      • 1 个间接块(指向块的指针)

      • 1 个双重间接块(指向指向块的指针的指针)

      • 1 个三重间接块(指向指向指向块的指针的指针)

    Minix FS

    32

    32

    Xenix FS

    64

    16

    SystemV FS

    64

    16

    Coherent FS

    64

    8

  • 磁盘上的目录条目:

    • Minix FS

      unsigned short inode;
      char name[14/30];
      
    • Xenix FS, SystemV FS, Coherent FS

      unsigned short inode;
      char name[14];
      

    Minix FS

    16/32

    64/32

    Xenix FS

    16

    64

    SystemV FS

    16

    64

    Coherent FS

    16

    32

  • 如何实现符号链接,以便宿主 fsck 不会报错:

    • Minix FS 正常

    • Xenix FS 技巧:作为 chmod 1000 的普通文件

    • SystemV FS ??

    • Coherent FS 技巧:作为 chmod 1000 的普通文件

符号说明:我们经常说“块”,但指的是一个区域(分配单元),而不是磁盘驱动程序的“块”概念。