上讲主要讲了grub和mbr。其中grub内容绝对是大家重点挖掘和重点掌握的内容。grub本身已经不仅仅是一个引导程序了,俨然是一个小操作系统。通过grub源代码的学习,你可以开发自己的微型小操作系统,刻到软盘上来引导和模拟。如果有必要,我们也可以另外开设一个grub专题讨论这些事情。或者群里谁在研究这个问题,也可以把自己的成果展示下,让大家彼此学习一下。这里不再专门讨论了。如果你掌握了硬盘启动的过程以及故障判断,还有grub的常用功能,比如引导多操作系统,引导硬盘安装linux,修改linux超级用户密码,制定grub本身密码,这些都会了,基本合格。
接上讲的内容来继续。
在主引导扇区这里,MBR占到446个字节,存放系统主引导程序。不会因操作系统的不同而性质不同。下面罗列下主引导扇区的内容,这有助你理解grub 源代码。
主引导扇区内容
MBR:000H---08AH 主引导程序,用于寻找活动分区
08BH---0D9H 启动字符串
0DAH---1BDH 保留 (总计:446字节)
DPT: 1BEH----1FDH 硬盘分区表 (64字节)
signature : 1FEH---1EFH 结束标记(55aa) (2字节)
(grub专题下一讲吧,这里先讲完硬盘的数据结构。)
在实模式下可以使用int 13H中断调用来查看主引导记录内容。在windows下也可以使用createfile()函数实现mbr的读写。在实模式下使用biosdisk()函数也可以实现mbr读写。针对数据恢复我们一般都选择实模式方式和debug方式来修复数据。我之所以强调这些东西,主要是解释文件在磁盘上是如何存储的,针对各种文件系统他们的机理又是怎样的。至于由此而延伸的知识拓宽,取决于每个人的兴趣。有些知识如果深入,我也不太懂,只能是提供一种兴趣导引。我在这里就简单的数据恢复方面在实模式下是怎样实现的来举几个操作实例。
首先说下如何使用debug查看mbr.
DOS实模式下:
debug
-a 100 :由100处开始输入指令
mov ax 0201 读第一个扇区
mov bx 0200 读至缓冲区为200H处
mov cx 0001 柱面号为0,扇区为1;
mov dx 0080 磁头号为0,第一块硬盘;
int 13 调用中断
int 20 返回
-g 执行命令
-d 200 1200 显示缓冲区200H处数据,长度为200H字节
-q 退出
(其中显示的数据即为主引导记录内内容)
我们在实模式下C语言读写扇区代码,下去大家自己练习,这个没有什么难度。主要就是应用biosdisk()函数读取。
下面开始说分区表
如果说MBR在操作系统的启动中至关重要,那么分区表对于操作系统的文件系统是至关重要的。想了解文件系统的存储原理和数据恢复那么一定要学会看分区表。这里推荐一款工具winHex.想了解这两个方面知识的通知首先要学会使用这个工具。具体方法可以参照winHex 手册,慢慢领悟。不必太过急躁。每一个工具的使用都需要一段时间的练习,无其他,唯手熟尔。
我现在把分区表的偏移量所对应的字节内容解释罗列出来,有助于大家理解。
分区表一般存在4个表项,每个表项16个字节。常用的为2个表项。下面是分区表偏移量所对应的值传达的信息:
偏移量 字节编号 字节长度 内容说明
1beH 447 1 BOOT ID:如果为80H 表示可启动分区,
否则为 00H
1bfh 448 1 分区起始磁头
1c0h 449,450 2 分区起始扇区和柱面值
1c2H 451 1 操作系统和文件系统的ID值(这个事很重要
的)
1c3H 452 1 分区结束磁头
1c4H 453 454 2 分区结束扇区值和柱面值
1c6H 455--458 4 分区前扇区总数
1caH 159---462 4 分区内扇区总数
在扩展分区的逻辑驱动器上存在一个分区链表,解读方法与此相同。(这里涉及到链表了,请复习链表知识哈,以后还要用到)都是从1beH开始到1cd H结束。
关于分区表就讲这么多,防止你越来越混淆,不必脚步太快。重点是学会从偏移量对应的数值来分析分区表信息,然后就是第一次亲密接触winHex工具。这两个掌握了就可以了。
剩下的部分我们来说下linux的fdisk操作。
linux磁盘管理在小红帽的考试中占有一定的比例,其中最常用的就是fdisk. 这个命令功能强大,在练习的时候如果不是虚拟机模式一定要谨慎。
下面我就简单的说一说fdisk的常用参数。剩下的可以自己参考man手册。
fdisk最简单的命令参数就是显示已知分区,fdisk -l
使用fdisk编辑分区表 fdisk /dev/hda 进入交互模式 选择 m 下面就会出现一系列命令参数解释,大家可以自己练习下。
下一讲将涉及文件系统和windows启动方面的一些知识。