襄垣城乡建设管理局的网站如何在手机上自己制作软件
1. Minix文件系统概要
Minix file system 是 Andrew S. Tanenbaum 在 1980 年代发明的文件系统, 并随着 Minix 操作系统一起于 1987 年发布。
Linus 编写 Linux 内核第一个版本的时候, 使用的也是 Minix FS, Linux 至今依然提供了对 Minix FS 的支持。Minix FS 结构简单, 易于理解。
2. Minix文件系统的组成
Minix 文件系统由 6 个部分组成:引导块、超级块、i 节点位图块、逻辑块位图块、i 节点块、数据区。对于一个普通的磁盘块设备来说,这 6 个部分的分布如下:

Minix 文件系统的最小分配单位是 zone, 可以把它叫做虚拟块, 一个虚拟块的大小是 1024 byte, 而磁盘的物理扇区大小常常是 512 byte。
引导块
占用一个数据块,用于操作系统启动时使用,我们可以忽略。
超级块
占用一个数据块,用于保存文件系统的信息,Minix 文件系统使用 minix_super_block 对象来保存文件系统的信息,其定义如下:
struct minix_super_block {__u16 s_ninodes; // inode个数__u16 s_nzones; // 数据块zone个数(v1版本)__u16 s_imap_blocks; // inode位图占用的数据块数量__u16 s_zmap_blocks; // 数据块位图占用的数据块数量__u16 s_firstdatazone; // 第一个数据块起始号__u16 s_log_zone_size; // 数据块大小, log2(zone/block)__u32 s_max_size; // 文件最大尺寸__u16 s_magic; // 魔数(用于识别minix文件系统及版本)__u16 s_state; // 文件系统状态__u32 s_zones; // 数据块列表的元素个数(v2版本)};
inode节点位图
占用若干个数据块,用于描述 inode表 中哪些成员已经被使用,每个位表示一个 inode 的使用情况。
逻辑块位图
用若干个数据块,用于描述 数据块列表 中哪些成员已经被使用,每个位表示一个逻辑块的使用情况。
i节点表
占用若干个数据块,由多个 minix_inode 对象组成,每个 minix_inode 对象表示一个文件或目录,其定义如下:
struct minix_inode {__u16 i_mode; // 文件类型及属性(rwx)__u16 i_uid; // 文件所属用户id__u32 i_size; // 文件大小,单位字节__u32 i_time; // 修改时间(自1970.1.1以来的秒数)__u8 i_gid; // 文件所属组id__u8 i_nlinks; // 链接数(有多少文件目录项指向该i节点)__u16 i_zone[9]; // 文件所占用的磁盘逻辑块号数组};
其中i_zone[9]定义如下:
-
zone[0] - zone[6]指向的虚拟块直接储存了文件的数据
-
zone[7]指向的虚拟块储存的是更多的虚拟块号码, 就是一个二级表
-
zone[8] 指向一个双重间接块

因此Minix FS 支持的最大文件大小为 (7 + 1024/2 + 1024/2*1024/2) * 1024 byte = 256 MB。
3. Minix磁盘布局
Minix整体布局如下图所示:

下面手动创建一个Minix磁盘,来具体的分析布局组成:
3.1 通过dd命令创建一个64k的二进制磁盘
# dd if=/dev/zero of=minix.disk bs=1k count=64 oflag=direct64+0 records in64+0 records out65536 bytes (66 kB, 64 KiB) copied, 0.195595 s, 335 kB/s
3.2 格式化为Minix文件系统
minix fs有三个版本,下面我们通过“-1”指定使用v1版本来格式化
# mkfs.minix -1 minix.disk32 inodes64 blocksFirstdatazone=5 (5)Zonesize=1024Maxsize=268966912
3.3 挂载文件系统,并创建几个测试文件
# mount minix.disk minix-root# cd minix-root# mkdir dir# echo "hello, world!" > dir/1.txt# echo "minix fs test" > 2.txt# echo "xyz" > 3.txt# tree minix-rootminix-root├── 2.txt├── 3.txt└── dir└── 1.txt1 directory, 3 files
3.4 通过hexdump查看二进制组成
# hexdump -C minix.disk
各部分含义如下:





