了解硬盘分区_daichanglin的博客-程序员宅基地

技术标签: allocation  磁盘  dos  存储  计算机硬件知识  数据结构  table  

 
        你新买来的硬盘是不能直接使用的,必须对它进行分区并进行格式化的才能储存数据。

  硬盘分区是操作系统安装过程中经常谈到的话题。对于一些简单的应用,硬盘分区并不成为一种障碍,但对于一些复杂的应用,就不能不深入理解硬盘分区机制的某些细节。

  硬盘的崩溃经常会遇见,特别是病毒肆虐的时代,关于引导分区的恢复与备份的技巧,你一定要掌握。

  在使用电脑时,你往往会使用几个操作系统。如何在硬盘中安装多个操作系统?

  如果你需要了解这方面的知识或是要解决上述问题,这期的 硬盘分区 专题会告诉你答案!

  硬盘是现在计算机上最常用的存储器之一。我们都知道,计算机之所以神奇,是因为它具有高速分析处理数据的能力。而这些数据都以文件的形式存储在硬盘里。不过,计算机可不像人那么聪明。在读取相应的文件时,你必须要给出相应的规则。这就是分区概念。分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录 ( Master Boot Record ,一般简称为 MBR) 和引导记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过以后的高级格式化,即 Format 命令来实现。

面、磁道和扇区

  硬盘分区后,将会被划分为面 (Side) 、磁道 (Track) 和扇区 (Sector) 。需要注意的是,这些只是个虚拟的概念,并不是真正在硬盘上划轨道。先从面说起,硬盘一般是由一片或几片圆形薄膜叠加而成。我们所说,每个圆形薄膜都有两个 ,这两个面都是用来存储数据的。按照面的多少,依次称为 0 面、 1 面、 2 …… 由于每个面都专有一个读写磁头,也常用 0 (head) 1 …… 称之。按照硬盘容量和规格的不同,硬盘面数 ( 或头数 ) 也不一定相同,少的只有 2 面,多的可达数十面。各面上磁道号相同的磁道合起来,称为一个柱面 (Cylinder)
上面我们提到了磁道的概念。那么究竟何为磁道呢?由于磁盘是旋转的,则连续写入的数据是排列在一个圆周上的。我们称这样的圆周为一个磁道如果读写磁头沿着圆形薄膜的半径方向移动一段距离,以后写入的数据又排列在另外一个磁道上。根据硬盘规格的不同,磁道数可以从几百到数千不等;一个磁道上可以容纳数 KB 的数据,而主机读写时往往并不需要一次读写那么多,于是,磁道又被划分成若干段,每段称为一个扇区。一个扇区一般存放 512 字节的数据。扇区也需要编号,同一磁道中的扇区,分别称为 1 扇区, 2 扇区 ……
计算机对硬盘的读写,处于效率的考虑,是以扇区为基本单位的。即使计算机只需要硬盘上存储的某个字节,也必须一次把这个字节所在的扇区中的 512 字节全部读入内存,再使用所需的那个字节。不过,在上文中我们也提到,硬盘上面、磁道、扇区的划分表面上是看不到任何痕迹的,虽然磁头可以根据某个磁道的应有半径来对准这个磁道,但怎样才能在首尾相连的一圈扇区中找出所需要的某一扇区呢?原来,每个扇区并不仅仅由 512 个字节组成的,在这些由计算机存取的数据的前、后两端,都另有一些特定的数据,这些数据构成了扇区的界限标志,标志中含有扇区的编号和其他信息。计算机就凭借着这些标志来识别扇区
硬盘的数据结构

  在上文中,我们谈了数据在硬盘中的存储的一般原理。为了能更深入地了解硬盘,我们还必须对硬盘的数据结构有个简单的了解。硬盘上的数据按照其不同的特点和作用大致可分为 5 部分: MBR 区、 DBR 区、 FAT 区、 DIR 区和 DATA 区。我们来分别介绍一下:

1
MBR

   MBR(Main Boot Record 主引导记录区 )? 位于整个硬盘的 0 磁道 0 柱面 1 扇区。不过,在总共 512 字节的主引导扇区中, MBR 只占用了其中的 446 个字节,另外的 64 个字节交给了 DPT(Disk Partition Table 硬盘分区表 )( 见表 ) ,最后两个字节 “55 AA” 是分区的结束标志。这个整体构成了硬盘的主引导扇区
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。 MBR 是由分区程序 ( Fdisk exe) 所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。

  下面,我们以一个实例让大家更直观地来了解主引导记录:

  例: 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00

  在这里我们可以看到,最前面的 “80” 是一个分区的激活标志,表示系统可引导; “01 01 00” 表示分区开始的磁头号为 01 ,开始的扇区号为 01 ,开始的柱面号为 00 “0B” 表示分区的系统类型是 FAT32 ,其他比较常用的有 04(FAT16) 07(NTFS) “FE BF FC” 表示分区结束的磁头号为 254 ,分区结束的扇区号为 63 、分区结束的柱面号为 764 “3F 00 00 00” 表示首扇区的相对扇区号为 63 “7E 86 BB 00” 表示总扇区数为 12289622

2
DBR

   DBR(Dos Boot Record) 是操作系统引导记录区的意思。它通常位于硬盘的 0 磁道 1 柱面 1 扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为 BPB(Bios Parameter Block) 的本分区参数记录表。引导程序的主要任务是当 MBR 将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件 ( DOS 为例,即是 Io sys Msdos sys) 。如果确定存在,就把它读入内存,并把控制权 交给该文件。 BPB 参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、 FAT 个数,分配单元的大小等重要参数。 DBR 是由高级格式化程序 ( Format com 等程序 ) 所产生的。

3
FAT

  在 DBR 之后的是我们比较熟悉的 FAT(File Allocation Table 文件分配表 ) 区。在解释文件分配表的概念之前,我们先来谈谈簇 (Cluster) 的概念。文件占用磁盘空间时,基本单位不是字节而是簇。一般情况下,软盘每簇是 1 个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是 4 8 16 32 64……

  同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息 ( FAT) ,操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。

  为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由 FAT 表来保存的,表中有很多表项,每项记录一个簇的信息。由于 FAT 对于文件管理的重要性,所以 FAT 有一个备份,即在原 FAT 的后面再建一个同样的 FAT 。初形成的 FAT 中所有项都标明为 未占用 ,但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为 坏簇 ,以后存文件时就不会再使用这个簇了。 FAT 的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。 FAT 的格式有多种,最为常见的是 FAT16 FAT32

4
DIR

   DIR(Directory) 是根目录区,紧接着第二 FAT ( 即备份的 FAT ) 之后,记录着根目录下每个文件 ( 目录 ) 的起始单元,文件的属性等。定位文件位置时,操作系统根据 DIR 中的起始单元,结合 FAT 表就可以知道文件在硬盘中的具体位置和大小了。

5
.数据 (DATA)

  数据区是真正意义上的数据存储的地方,位于 DIR 区之后,占据硬盘上的大部分数据空间。
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daichanglin/article/details/1340518

智能推荐

Android平台WIFI启动流程之一-程序员宅基地

http://blog.sina.com.cn/s/blog_13146f9590101wjhw.html【摘要】本文从用户界面出发,从应用层到硬件适配层,对Android平台wifi启动和关闭的流程进行了分析。具体包括wifi模块初始化、APP层代码分析、Framework层代码分析、JNI层代码分析、HAL层代码分析、WPA_SUPPLICANT启动分析,并在分析基础上对代码流

python 字符串追加_python字符串追加字符串-程序员宅基地

通过一个for循环,将一个一个字符追加到字符串中:方法一:string = ''str=u"追加字符"for i in range(len(str)): string+=str[i]print string显示结果:追加字符方法二:string = []str=u"1234"for i in range(len(st_python字符串追加字符串

Go语言-配置管理神器viper_阿拉的梦想的博客-程序员宅基地

Go语言配置管理神器viper工程目录使用viper读取配置的简单demo配置文件config.propertiesmain.go测试日志使用外部配置文件工程目录使用viper读取配置的简单demo实现根据配置文件key获取value。根据key前缀将value批量解析到结构体。实时更新配置配置文件config.propertiesversion=1.0port=8080demo.name=测试2demo.user=tomdemo.age=10main.gopackage ma

UGUI Canvas(画布)详解-程序员宅基地

本文转自Unity Connect官方博主 尹煜画布 (Canvas) 是应该容纳所有 UI 元素的区域。画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。画布画布 (Canvas) 是应该容纳所有 UI 元素的区域。画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。创建新的 UI 元素(如使用菜单 GameObject > UI &g...

java 判断二叉树 t1 是否包含二叉树 t2 的完全拓扑结构_java coder的博客-程序员宅基地

牛客题目链接1. 题目考点仔细审题,是完全拓扑结构,不是部分 1 和 1 就不是 t1 完全包含 t2,而是部分包含 t2 / \ / 2 3 2两次 dfs如何递归判断两个二叉树是否相等将 # 特殊处理成 0,补全二叉树为完全二叉树2. 考点解析两次 dfs,外层 dfs 看做对 t1 的 for 循环,遍历 t1 的每个节点递归判断两个二叉树是否相等,本质上是判断两个节点是否相等

位运算的一些操作-程序员宅基地

按位与&操作通常用作将一个数的某些位清零或保留某些位操作例如:把a的高8位清零a & 0000000011111111也就是将a & 255操作之后,就会实现将数字a的高8位位清零了异或^操作的用途:将某些特定的位翻转例如对数0x10100001的第2和第3位翻转操作,那么可以0x10100001 ^ 0x00000110通过按位异或操作可以实现两个数的交换例如交换A和BA=0x10100001 B=0x00000110A=A^B A=10...

随便推点

mybatisPlus中QueryWrapper的in使用方法-程序员宅基地

1、QueryWrapper中in方法需要的格式是List如果是这种类型直接放里就行例如:List<String> typeList = new ArrayList<>();queryWrapper.in("type",typeList)2、如果传入的是1,2,3 这种格式需要解串生成ListString type = param.getType();List<String> typeList = new ArrayList<>(); if(t_querywrapper的in

Java 基础--bit、byte、位、字节、汉字、字符_9014字节是多少kb-程序员宅基地

bit、byte、位、字节、汉字的关系 1 bit = 1 二进制数据 1 byte = 8 bit 1 字母 = 1 byte = 8 bit 1 汉字 = 2 byte = 16 bit1. bit:位 一个二进制数据0或1,是1bit;2. byte:字节 存储空间的基本_9014字节是多少kb

windows server2012r2 安装NET Framework 3.5-程序员宅基地

在Windows Server 2012上安装一些软件,比如Oracle 11g等,经常会出现下面这样的错误:“无法安装一下功能:.NET Framework 3.5(包括.NET 2.0和3.0)”(如下图所示),导致很多功能都无法使用。下面,小编就教大家如何在Windows Server 2012上成功安装.NET Framework 3.5。方法/步骤 首先,打开服务器管理器..._net framework 3.5 service pack1 2012r2

深度操作系统 Deepin 15.11 发布_deepin 15.11任务栏显示cpu-程序员宅基地

深度操作系统是基于Linux内核,以桌面应用为主的开源 GNU/Linux 操作系统,支持笔记本、台式机和一体机。深度操作系统(deepin)包含深度桌面环境(DDE)和近30款深度原创应用,及数款来自开源社区的应用软件,支撑广大用户日常的学习和工作。另外,通过深度商店还能够获得近千款应用软件的支持,满足您对操作系统的扩展需求。深度操作系统由专业的操作系统研发团队和深度技术社区(www.d..._deepin 15.11任务栏显示cpu

# Notepad++快捷键 多行_notepad 编辑多行-程序员宅基地

Notepad++快捷键 多行单行注释// Ctrl + q(再按一次可取消) 单行注释 // Ctrl + k(再按一次不可取消)多行注释 // Ctrl + k(再按一次不可取消) 多行注释 // Ctrl + q(再按一次可取消)区块注释 /**/ Ctrl + shift + q区块注释取消 Ctrl + shift + k #inc..._notepad 编辑多行