存储技术
对很多PC的使用者来说,UEFI就像是一颗深水炸弹,表面风平浪静,暗地里却早已引发了巨大的震动。多亏了Microsoft的强横,预装WIN8的电脑指定需要GPT分区这一举措,让人们不禁发出感慨:哦天哪,我的电脑里还有这东西?一些好学的人对GPT进行了解以后,进一步发现了我们的幕后功臣:UEFI。本期文章我们就来说说,硬盘和硬盘分区这点事。
简单地说,硬盘分区是就使用分区编辑器(partition editor)将一个硬盘上划分几个独立的逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件;但太多分区就成了麻烦。
硬盘分区就像给一间空荡的房子划分出卧室,厨房,客厅等相互隔离的空间一样。主要是为了方面用户的使用。另一方面,通过合理的硬盘分区,有效保护系统盘空间,确实能够提高系统运行速度,再者,硬盘分区也可以有效地对数据进行保护。你当然可以不分区,只不过,当你面对越来越多的子目录,或者是越来越慢的Windows,不得不费功夫去管理你的文件,或者重装Windows的时候,恐怕会悔不当初。 “不要把所有的鸡蛋放在同一个篮子里”这句至理名言在经济学以外的其他领域也同样是句警世恒言。
在讲解MBR之前,有必要讲讲机械硬盘的一些相关概念,毕竟MBR作为20世纪最棒的磁盘管理方式,与机械硬盘可是联系紧密的
(这样可以更好地理解后面的内容)。
机械硬盘原理
机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作(如果你有坏的硬盘,可以动手拆开看。嗯?为什么用坏的?用好的可能费钱……)一般用磁头号区分。结构特性决定了机械硬盘如果受到剧烈冲击(摔在地上或是勤奋的你想拆开学习),磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。
继续讲原理:假设磁头不动,硬盘旋转,那么磁头就会在磁盘表面画出一个圆形轨迹并将之磁化,数据就保存在这些磁化区中,称之为磁道,将每个磁道分段,一个弧段就是一个扇区。一个硬盘可以包含多个扇面,扇面同轴重叠放置,每个盘面磁道数相同,具有相同周长的磁道所形成的圆柱称之为柱面,柱面数与磁道数相等。如下图
了解了这些,我们就可以对最初的硬盘地址管理方式作一个原理层面的了解:
最初的寻址方式称为CHS,在LBA(Logical Block Address)概念诞生之前,由他负责管理磁盘地址。所谓CHS即柱面(cylinder),磁头(header),扇区(sector),通过这三个变量描述磁盘地址,需要明白的是,这里表示的已不是物理地址而是逻辑地址了。这种方法也称作是LARGE寻址方式。该方法下:
硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)。
后来,人们通过为每个扇区分配逻辑地址,以扇区为单位进行寻址,也就有了LBA寻址方式。但是为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,和 LARGE寻址模式一样,这里的地址也是逻辑地址了。(固态硬盘的存储原理虽然与机械硬盘不同,采用的是flash存储,但仍然使用LBA进行管理,此处不再详述。)
科普到这里,我们可以试图去理解MBR分区了。现在我们来看看MBR分区的技术原理。
MBR原理
MBR:Master Boot Record,主分区引导记录。最早在1983年在IBM PC DOS 2.0中提出。前面说过,每个扇区/区块都被分配了一个逻辑块地址,即LBA,而引导扇区则是每个分区的第一扇区,而主引导扇区则是整个硬盘的第一扇区(主分区的第一个扇区)。MBR就保存在主引导扇区中。另外,这个扇区里还包含了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。
现在,我们来看一个MBR记录的实例:
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。
可以看到,在只分配64字节给DPT的情况下,每个分区项分别占用16个字节,因此只能记录四个分区信息,尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍然用16个字节存储。能表示的最大扇区数为FF FF,FF FFH,因此可管理的最大空间=总扇区数*扇区大小(512byte),也就是 2TB (由于硬盘制造商采用1:1000进行单位换算,因此也有2.2TB一说,别怪他们,他们不是程序员)。超过2TB以后的空间,不能分配地址,自然也就无法管理了。
MBR的诸多缺点使其应用大大受限。硬盘技术日新月异,硬盘容量突飞猛进(希捷将于今年开卖60TB 固态硬盘),多出来的硬盘空间总不能晾着吧,于是,Intel和Microsoft联合,在刚诞生的UEFI规范下一起研发了新技术
GPT原理
GPT分区:全称为Globally Unique Identifier Partition Table,也叫做GUID分区表,它是UEFI 规范的一部分。由于硬盘容量的急速增长,MBR的2.2T容量难以满足要求,而UEFI BIOS的推广也为GPT的实现打下了坚实的技术基础,GPT应运而生,
我们来看看GPT的结构图:
等等,MBR是不是走错片场了?答案当然是没有。这里的P意为protective,PMBR存在的意义就是,当不支持GPT的分区工具试图对硬盘进行操作时(例如MS-DOS和Linux的fdisk程序),它可以根据这份PMBR以传统方式启动,过程和MBR+BIOS完全一致,极大地提高了兼容性。而支持GPT的系统在检测PMBR后会直接跳到GPT表头读取分区表。和MBR类似,分区表中存储了某个分区的起始和结束位置及其文件系统属性信息,而分区才是实际存在的物理磁盘的一部分。
GPT HDR:GPT表头,如下图,主要定义了分区表中项目数及每项大小,还包含硬盘的容量信息。在64位的Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(也是EFI标准中的最低要求:分区表最小要有16,384字节)分区表头还记录了这块硬盘的GUID,分区表头位置(总是LBA1)和大小,也包含了备份分区表头和分区表的位置和大小信息(LBA-1~LBA-34)。同时还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。具体内容如下表:
Partition Table:分区表,包含分区的类型GUID(如:EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}),名称,起始终止位置,该分区的GUID以及分区属性。其内容如下:
Microsoft对分区属性做了更详细的区分,目前有:
相较于MBR,GPT具有以下优点:
(1) 得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB),2T在它面前完全不在话下。按目前的硬盘技术来看,确实近乎无限,不过,以后的事谁知道呢。
(2) 分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置个分区也可以(有人愿意管理这么多分区吗),不过,目前windows仅支持最大128个分区。
(3) 自带保险,由于在磁盘的首尾部分各带一个GPT表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性(两个一起坏的请出门买彩票)。
(4) 循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
(5) 尽管目前分区类型不超过百数(十数也没有吧。),GPT仍提供了16字节的GUID来标识分区类型,使其更不容易产生冲突。
(6) 每个分区都可以拥有一个特别的名字,最长72字节,足够写一首七律了。满足你的各种奇葩起名需求。
完美支持UEFI,毕竟它就是UEFI规范的衍生品。在将来全行业UEFI的情境下,GPT必将更快淘汰MBR。
其他
接下来进入加料时间,更详细的讲述硬盘知识。
前面说到过,磁化的弧段称作一个扇区,一个扇区大小512kb,但硬盘在进行文件操作时并非以扇区为单位,而是——簇,“簇”是系统进行分配的最小单位,一个簇可以包含多个扇区,假设目前一个簇包含4个扇区,簇大小为2kb,一个文件大小恰为2kb,则占用了簇的所有可用空间,即便你有一个1B大小的文件需要保存,那么你占用的空间也是一个簇,簇内其他空间不可读写。
而对簇的大小进行管理的就是文件系统:
FAT16/FAT32: 早期的MS-DOS和WIN95操作系统中最常见的硬盘分区格式。一个簇最小为512个字节,其大小可以成倍增长,最大为32K,系统为每个簇分配唯一的索引号——一个16位二进制数来标识。因为16位二进制数最大为65536,所以FAT分区所拥有的簇的数量不可能超过65536个。这正是FAT分区大小不能超过2GB的原因。FAT16的继任者——FAT32与其原理基本相同,相比前任优势仅在于分区可以大于2GB,但不能存储大于4GB的单个文件,看看现在一部BD的电影都要3,4个G,显然不能满足时代的需求,被淘汰的很快。
NTFS文件系统相比FAT,最大优点在于支持文件加密,通过采用日志式文件系统,详细记录磁盘的所有读写操作,提高了数据和系统的安全性,另一点则是突破了4GB大小限制。也是目前机械硬盘上的分区主流。不过对于目前越来越亲民的的flash存储,过多的操作记录对存储介质造成了较大的负担,同样的存取操作,NTFS下的读写次数就会比FAT32下来得多,造成了寿命较短的缺陷。因此针对移动存储设备和固态硬盘,推出了exFAT文件系统。
exFAT:分区大小和单文件大小最大可达16EB(16×1024×1024TB);簇大小非 常灵活,最小512B,最高达32MB;采用了剩余空间分配表,空间利用率更高;同一目录下最大文件数可达65536个。其特性未必强于NTFS,主要是针对flash存储设备进行了优化(SSD,U盘),传统硬盘不能格式化为该格式。
要是到现在你对扇区,簇,文件系统,分区几个名词有点混淆,不妨看看下图:
有人会问,图中的怎么突然出现了4k扇区,而且为什么下面又包含的是8个512b的扇区呢?边上的伪装是啥意思?恭喜你,你已经抓住了近年来的硬盘发展潮流。
扇区的大小虽然约定俗成,但其实是可以更改的,开始于 2009 年晚期,硬盘制造商正在从传统的 512 字节扇区迁移到更大、更高效的 4096 字节扇区,国际硬盘设备与材料协会(International Disk Drive Equipment and
Materials Association,IDEMA)将之称为高级格式化,也就是现在常说的“4K扇区”。
多年来,硬盘行业一直采用512字节扇区。然而,随着硬盘容量的不断增长,扇区大小日渐成为提高硬盘容量和纠错效率方面的制约。扇区分辨率(扇区大小和总存储大小的百分比)越来越低,尽管在管理小型离散数据时,分辨率越低越好。但现代的计算系统中多的是大型数据块,一般远比传统 512 字节扇区大小要大得多。另外,随着区域密度的增加,小型 512 字节扇区在硬盘表面上占用的空间也将越来越小。硬盘扇区中的数据占据的空间越小,错误纠正就会变得越困难,因为同样大小的介质缺陷对总体数据负载损害的百分比更高,所以就需要更大的纠错强度。现在,硬盘开始通过先进的区域密度来提高错误纠正的上限。因此,为了改善错误纠正和实现格式化效率,提高扇区大小是硬盘行业内的普遍诉求。
不过,由于计算机系统的缓慢发展,多数仍将扇区假定为512字节,因此就产生了4K对齐问题。即使物理硬盘分区与计算机使用的逻辑分区对齐,保证硬盘读写效率。
有4k对齐当然就有4k对不齐。这个锅,或许应该甩给操作系统。硬盘厂商为了保证与操作系统的兼容性,将新标准的"4K扇区"的硬盘模拟成扇区为512B的硬盘,问题出现在此时:当在一些特殊情况下格式化的系统(比如用ghost11.5以下版本),会默认定义为4096字节大小为一个簇,这没毛病,但是,由于其引导区只占用了不多不少63个扇区,真正的文件系统在63号扇区之后,
我们可以算出前63个扇区大小为:63*512B = 32256B。
63个扇区占用簇个数:32256B/4096B=7.875簇。
从第64个扇区开始,每个簇都会跨越两个物理单元,占据前一个单元的一小部分和后一个单元的一大部分,前面说过,系统文件操作以簇为单位,如果每个簇都要用到两个扇区,势必拖累读写速度。也就产生了“4k对不齐”的概念,“4K对齐”要做的事就是将硬盘的模拟扇区(512B)对齐到的8整数倍个“实际”4K扇区,即8*4096 = 32768B,使其正好跨过63扇区的特性,从第64个扇区对齐。
其实不仅是操作系统,一些广泛使用的软件程序也可能引发4k对不齐现象。因此,对齐技术的存在确有其必要性。尽管4k必然取代512b,但冰冻三尺非一日之寒,全行业仍需要一个时间来进行技术的全面推广。
后记
一些经常被问到的关于GPT的问题:
A: windows自带个非常好用的工具-diskpart,简单几条命令即可,如图:
A: 还是diskpart,( 警告 :请先备份内容)
不过我还是建议你不要这样做,毕竟MBR是个被淘汰的技术。
A:这是个好主意,你可以使用AOMEI Partition Assistant Standard,它是个免费软件。非常好用。不过还是建议提前备份内容。
全部0条评论
快来发表一下你的评论吧 !