Unix/Linux系统编程第七章学习笔记
作者:20191322wyl
知识点总结
文件操作级别
- 硬件级别
-
fdisk∶将硬盘、U盘或SDC盘分区。
-
mkfs∶格式化磁盘分区,为系统做好准备。
-
fsck∶检查和维修系统。
-
碎片整理∶压缩文件系统中的文件。
其中大多数是针对系统的实用程序。普通用户可能永远都不需要它们,但是它们是创建和维护系统不可缺少的工具。
-
操作系统内核中的文件系统函数
每个操作系统内核均可为基本文件操作提供支持。
-
系统调用
用户模式程序使用系统调用来访问内核函数。
-
I/O库函数
系统调用可让用户读/写多个数据块。
-
用户命令
用户用Unix/Linux命令来执行文件操作,而不是编写程序。
-
sh脚本
比系统调用方便,但是必须手动输入命令。
文件I/O操作
用户模式下的程序执行操作
FILE *fp = fopen(“file”, “r”);or FILE *fp = fopen(“file”,”w”);
可以打开一个读/写文件流
因为:
fopen()在用户(heap)空间中创建一个FILE结构体,包含一个文件描述符fd、一个fbuf[BLKSIZE]和一些控制变量。会向内核中的 kopen() 发出一个fd=open(“file”,flags=READ or WRITE)系统调用。
分区
-
一个区块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,成为分区。分区表位于第一个扇区的字节偏移446(ox1BE)处,改扇区称为设备的主引导记录。表有4个条目,每个条目由一个16字节的分区结构体定义。
-
如果某分区是扩展类型(类型编号=5),那么它可以划分为更多分区。假设分区P4是扩展类型,它被划分为扩展分区P5、P6、P7。扩展分区在扩展分区区域内形成一个链表。如下图所示:
-
每个扩展分区的第一个扇区是一个本地MBR。每个本地MBR在字节偏移量0xIBE处也有一个分区表,只包含两个条目。第一个条目定义了扩展分区的起始扇区和大小。第二个条目指向下一个本地MBR。所有本地MBR的扇区编号都与P4的起始扇区有关。照例,链表以最后一个本地MBR中的0结尾。在分区表中,CHS值仅对小于8GB的磁盘有效。对大于8GB但小于4G扇区的磁盘,只有最后两个条目start _sector 和nr sector有意义。
格式化分区
fdisk只是将一个存储设备划分为多个分区。每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须先为特定的文件系统准备好分区。该操作习惯上称为格式化磁盘或磁盘分区。 在Linux中,它被称为mkfs,表示MAKE文件系统。在Linux中,命令 :mkfs -t TYPE [-b bsize] device nblocks
在一个nblocks设备上创建一个TYPE文件系统,每个块都是bsize字节。如果bsize未指定,则默认大小为1KB.。
挂载分区
man 8 losetup:显示用于系统管理的losetup实用工具命令。
EXT2文件系统
- EXT2文件系统数据结构
- 超级块
- 块组描述符
- 位图
- 索引节点
- 目录条目
实践
题目:创建一个虚拟磁盘映像文件,并在磁盘映像文件上运行fdisk
过程:
问题与解决
问题
一共可以创建多少个分区?
解决
我们可以在它下面使用最多65536个逻辑分区。但是这个分区的使用取决于OS到OS。所以在Linux中,MBR在扩展分区下使用最多60个逻辑分区。