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 的普通文件
符号说明:我们经常说“块”,但指的是一个区域(分配单元),而不是磁盘驱动程序的“块”概念。