Unix/Linux系统编程第七章学习笔记

Unix/Linux系统编程第七章学习笔记

作者:20191322wyl

知识点总结

文件操作级别

  1. 硬件级别
  • fdisk∶将硬盘、U盘或SDC盘分区。

  • mkfs∶格式化磁盘分区,为系统做好准备。

  • fsck∶检查和维修系统。

  • 碎片整理∶压缩文件系统中的文件。

    其中大多数是针对系统的实用程序。普通用户可能永远都不需要它们,但是它们是创建和维护系统不可缺少的工具。

  1. 操作系统内核中的文件系统函数

    每个操作系统内核均可为基本文件操作提供支持。

  2. 系统调用

    用户模式程序使用系统调用来访问内核函数。

  3. I/O库函数

    系统调用可让用户读/写多个数据块。

  4. 用户命令

    用户用Unix/Linux命令来执行文件操作,而不是编写程序。

  5. 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个逻辑分区。

原文地址:https://www.cnblogs.com/BillGreen/p/15390433.html