zoukankan      html  css  js  c++  java
  • UEFI和GPT

    好就没用linux了,这几天在win8笔记本上用虚拟机装了下,也准备装到硬盘上和win8双系统使用,发现一些概念已经跟不上时代了。

    一个是在虚拟机中装的时候,分配了虚拟硬盘分区时,提示选择分区表类型,有GPT,DOS什么的,开始没多想直接选了默认的GPT,

    后来在装grub到主引导分区的时候出现问题,网上查才知道是分区表的问题,其实在用cfdisk分区的时候已经发现一些不同了,比如GPT分区表的时候,

    新建分区全部都是主分区,纳闷怎么没有逻辑分区,怎么分区不能设置bootable,分区类型怎么有这么多没见过的;后来重新来过,

    分区表类型选DOS就是熟悉的味道了,顺利在virtualbox中装上archlinux,在虚拟机上用感觉还是慢,遂又在实体硬盘上装双系统。

    装双系统时,发现没法选启动介质,一查发现这个我去年买的ASUS N550笔记本预装正版win8,采用的是UEFI,不是传统的BIOS了,1TB的硬盘也默认是GPT分区表了。

    不是MBR那种分区表格式了,grub也不能像之前那样装到MBR由grub引导所有系统,或者装到linux的root分区用easyBCD来引导该分区了。需要装支持EFI的grub,需要另外装efibootmgr等几个包使grub支持EFI。

    并且使用--target=x86_64-efi来指定grub安装目标类型为efi,同时需要通过--efi-directory=/boot/efi来指定esp分区。

    如果电脑上已经装有win8等系统,那么就肯定已经有esp分区了,用parted /dev/sda print命令,可以看到分区情况,

    最后一列的flags,可以看到有esp字样,该分区一般100M左右大小,fat32文件系统,在我的电脑上是第一个分区,用mount -t vfat /dev/sda1 /boot/efi挂载即可,没有该目录则自行创建,会在该分区中创建grub的引导程序。

    安装成功后,grub-mkconfig自动生成启动项就OK了。

    今天网上搜了一下UEFI和GPT相关知识,在这里记录一下:

    UEFI相关知识

    原文地址:http://www.ihacksoft.com/uefi.html

     前几天在帮同事小何笔记本电脑安装64位 Windows 7 的时候,遇到一个从来没有碰到过的问题,使用光盘安装时,提示:Windows无法安装到这个磁盘。选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。我还特意用iPhone拍了个照:

    EFI系统和GPT磁盘

      什么是EFI系统?GPT磁盘又是什么?一下子蒙了,怎么跳出来这么多新词?看来我已经落伍了,于是引发了对UEFI的学习和探究。如果你也和我一样不了解,那么一起学习下吧,如果你已经对其熟知,就请略过吧。

    UEFI是什么?

      UEFI,全称Unified Extensible Firmware Interface,即“统一的可扩展固件接口”,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替BIOS(基本输入/输出系统)。此标准由UEFI联盟中的140多个技术公司共同创建,其中包括微软公司。UEFI旨在提高软件互操作性和解决BIOS的局限性。

      要详细了解UEFI,还得从BIOS讲起。我们都知道,每一台普通的电脑都会有一个BIOS,用于加载电脑最基本的程式码,担负着初始化硬件,检测硬件功能以及引导操作系统的任务。UEFI就是与BIOS相对的概念,这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而达到开机程序化繁为简节省时间的目的。传统BIOS技术正在逐步被UEFI取而代之,在最近新出厂的电脑中,很多已经使用UEFI,使用UEFI模式安装操作系统是趋势所在。

    UEFI

    UEFI和BIOS有什么不同?优点优势是什么?

      作为传统BIOS(Basic Input/Output System)的继任者,UEFI拥有前辈所不具备的诸多功能,比如图形化界面、多种多样的操作方式、允许植入硬件驱动等等。这些特性让UEFI相比于传统BIOS更加易用、更加多功能、更加方便。而Windows 8在发布之初就对外宣布全面支持UEFI,这也促使了众多主板厂商纷纷转投UEFI,并将此作为主板的标准配置之一。

      UEFI抛去了传统BIOS需要长时间自检的问题,让硬件初始化以及引导系统变得简洁快速。换种方式说,UEFI已经把电脑的BIOS变得不像是BIOS,而是一个小型固化在主板上的操作系统一样,加上UEFI本身的开发语言已经从汇编转变成C语言,高级语言的加入让厂商深度开发UEFI变为可能。

    以下关于 UEFI的特点 来自微软官网:

    1、通过保护预启动或预引导进程,抵御bootkit攻击,从而提高安全性。
    2、缩短了启动时间和从休眠状态恢复的时间。
    3、支持容量超过2.2 TB的驱动器。
    4、支持64位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过172亿GB的内存进行寻址。
    5、UEFI硬件可与BIOS结合使用。

    以下关于 BIOS和UEFI的区别 来自网络:

      UEFI是BIOS的一种升级替代方案。关于BIOS和UEFI二者的比较,如果仅从系统启动原理方面来做比较,UEFI之所以比BIOS强大,是因为UEFI本身已经相当于一个微型操作系统,其带来的便利之处在于:

      首先,UEFI已具备文件系统的支持,它能够直接读取FAT分区中的文件。什么是文件系统?简单说,文件系统是操作系统组织管理文件的一种方法,直白点说就是把硬盘上的数据以文件的形式呈现给用户。Fat32、NTFS都是常见的文件系统类型。

      其次,可开发出直接在UEFI下运行的应用程序,这类程序文件通常以efi结尾。既然UEFI可以直接识别FAT分区中的文件,又有可直接在其中运行的应用程序。那么完全可以将Windows安装程序做成efi类型应用程序,然后把它放到任意fat分区中直接运行即可,如此一来安装Windows操作系统这件过去看上去稍微有点复杂的事情突然就变非常简单了,就像在Windows下打开QQ一样简单。而事实上,也就是这么一回事。

      最后,要知道这些都是BIOS做不到的。因为BIOS下启动操作系统之前,必须从硬盘上指定扇区读取系统启动代码(包含在主引导记录中),然后从活动分区中引导启动操作系统。对扇区的操作远比不上对分区中文件的操作更直观更简单,所以在BIOS下引导安装Windows操作系统,我们不得不使用一些工具对设备进行配置以达到启动要求。而在UEFI下,这些统统都不需要,不再需要主引导记录,不再需要活动分区,不需要任何工具,只要复制安装文件到一个FAT32(主)分区/U盘中,然后从这个分区/U盘启动,安装Windows就是这么简单。后面会有专门的文章来详细介绍UEFI下安装Windows7、8的方法。

    GPT相关知识

    原文地址:http://czmmiao.iteye.com/blog/1751408

    GPT概述

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构。它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表。 传统的主启动记录 (MBR) 磁盘分区支持最大卷为 2.2 TB (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)。 与MBR 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节 (exabytes,1EB=10^6TB) 的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。
    与 MBR 分区的磁盘不同,GPT的分区信息是在分区中,而不象MBR一样在主引导扇区。为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一 个保护分区 (Protective MBR)的MBR分区表,这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分 区的磁盘。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。

    在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。跟现代的MBR一样,GPT也使用逻辑区块地址(LBA)取代了早期的CHS寻址方式。传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位Windows操作系统使用16,384字节(或32扇区)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区ID(GUID)。

    GPT结构

    GPT的结构见下图

    传统MBR (LBA 0) 
    在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
    在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动Windows。
    分区表头 (LBA 1) 
    分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
    分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
    分区表头的格式如下

    起始字节 长度 内容
    0 8字节 签名("EFI PART", 45 46 49 20 50 41 52 54)
    8 4字节 修订(在1.0版中,值是 00 00 01 00)
    12 4字节 分区表头的大小(单位是字节,通常是92字节,即 5C 00 00 00)
    16 4字节 分区表头(第0-91字节)的CRC32 校验,在计算时,把这个字段作为0处理,需要计算出分区串行的CRC32校验后再计算本字段
    20 4字节 保留,必须是 0
    24 8字节 当前LBA(这个分区表头的位置)
    32 8字节 备份LBA(另一个分区表头的位置)
    40 8字节 第一个可用于分区的LBA(主分区表的最后一个LBA + 1)
    48 8字节 最后一个可用于分区的LBA(备份分区表的第一个LBA − 1)
    56 16字节 硬盘GUID(在类UNIX 系统中也叫UUID)
    72 8字节 分区表项的起始LBA(在主分区表中是2)
    80 4字节 分区表项的数量
    84 4字节 一个分区表项的大小(通常是128)
    88 4字节 分区串行的CRC32校验
    92 * 保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)

    主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

    分区表项 (LBA 2–33) 
    GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。
    GPT分区表项的格式如下

    起始字节 长度 内容
    0 16字节 分区类型GUID
    16 16字节 分区GUID
    32 8字节 起始LBA(小端序 )
    40 8字节 末尾LBA
    48 8字节 属性标签(如:60 表示“只读”)
    56 72字节 分区名(可以包括36个UTF-16(小端序)字符)

    parted概述 

    上文介绍了GPT,由于常见的fdisk不支持GPT(在硬盘容量大于2Tb的时候无法使用fdisk进行分区的管理),故在IA64平台上管理磁盘时parted还是相当实用的,GNU Parted 具有丰富的功能,它除了能够进行分区的添加、删除等常见操作外,还可以进行移动分区、创建文件系统、调整文件系统大小、复制文件系统等操作。它可以处理最常见的分区格式,包括:ext2,ext3,fat16,fat32,NTFS,ReiserFS,JFS,XFS,UFS,HFS,以及Linux交换分区。 
    parted 命令格式 
    parted 有两种运行模式:命令行模式和交互模式。与 fdisk 的交互模式交互模式不同,在 parted 的交互模式下执行命令,一旦按回车键确认,命令就马上执行,对磁盘的更改就立刻生效。
    parted 命令的常用格式是:
    1、# parted [选项] <硬盘设备名>
    2、# parted [选项] <硬盘设备名> <子命令> [<子命令参数>]
    格式(1)用于进入parted 的交互模式,在该模式下输入parted的子命令对指定的硬盘进行分区等操作。quit 命令用于退出交互模式。
    格式(2)直接在命令行方式下对指定的硬盘进行分区等操作。
    其中常用的选项为:
    -h, ––help — 显示求助信息
    -i, ––interactive — 在必要时提示用户
    -l, ––list — 显示所有磁盘设备的分区表
    -s, ––script — 从不提示用户
    -v, ––version — 显示版本
    无论哪种模式,在parted中都可以使用若干子命令,见下表。

    命令  说明
    help [COMMAND] 打印命令的帮助信息,或指定命令的帮助信息
    print  [free|NUMBER|all]     显示分区表, 指定编号的分区, 或所有设备的分区表
    mkpart PART-TYPE [FSTYPE] START END 创建新分区。PART-TYPE 是以下类型之一:primary(主分 区)、extended(扩展分区)、logical(逻辑分区)。START 和 END 是新分区开始和结束的具体位置。
    rm NUMBER 删除指定编号 NUMBER 的分区。
    set NUMBER FLAG STATE 对指定编号 NUMBER 的分区设置分区标记 FLAG。对于 PC 常用的 msdos 分区表来说,分区标记 FLAG 可有如下值:”boot”(引导), “hidden”(隐藏), “raid”(软RAID磁盘阵), “lvm”(逻辑卷), “lba” (LBA,Logic Block Addressing模式)。 状态STATE 的取值是:on 或 off
    unit UNIT 设置默认输出时表示磁盘大小的单位为 UNIT,UNIT 的常用取值可以为:‘MB’、‘GB’、‘%’(占整个磁盘设备的百分之多少)、‘compact’(人类易读方式,类似于 df 命令中 -h 参数的用)、‘s’(扇区)、‘cyl’ (柱面)、‘chs’ (柱面cylinders:磁头 heads:扇区 sectors 的地址)
    mkfs NUMBER FS-TYPE 对指定编号 NUMBER 的分区创建指定类型 FS-TYPE 的文件系 统。
    mkpartfs PART-TYPE FSTYPE START END 创建新分区同时创建文件系统。FS-TYPE 是以下类型一:ext2、fat16、fat32、linuxswap、NTFS、reiserfs、ufs 等
    cp [FROM-DEVICE] FROM-NUMBER TONUMBER 将分区 FROM-NUMBER 上的文件系统完整地复制到分区TO-NUMBER 中,作为可选项还可以指定一个来源硬盘的设备名称FROM-DEVICE,若省略则在当前设备上进行复制。
    move NUMBER START END 将指定编号 NUMBER 的分区移动到从 START 开始 END 结束的位置上。注意:(1)只能将分区移动到空闲空间中。(2)虽然分区被移动了,但它的分区编号是不会改变的
    resize NUMBER START END 对指定编号 NUMBER 的分区调整大小。分区的开始位置和结束位置由 START 和 END 决定
    check NUMBER 检查指定编号 NUMBER 分区中的文件系统是否有什么错误
    rescue START END 恢复靠近位置 START 和 END 之间的分区
    mklabel,mktable LABELTYPE 创建一个新的 LABEL-TYPE 类型的空磁盘分区表,对于PC而言 msdos 是常用的 LABELTYPE。 若是用 GUID 分区表,LABEL-TYPE 应该为 gpt

    parted使用实例 
    # parted /dev/sdd
    GNU Parted 1.8.1
    Using /dev/sdd
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print                                                            
    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 27.1GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
                                                            
    (parted) print             #查看分区信息                                               
    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 27.1GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos

    Number  Start   End     Size    Type      File system  Flags
     1      16.4kB  4001MB  4001MB  primary                     
     4      4001MB  4703MB  701MB   extended                    
     5      4001MB  4102MB  101MB   logical                     
     6      4102MB  4203MB  101MB   logical                     
     7      4203MB  4303MB  101MB   logical                     
     8      4303MB  4404MB  101MB   logical                     
     9      4404MB  4416MB  11.5MB  logical                     
    10      4416MB  4437MB  21.0MB  logical                     
    11      4437MB  4468MB  31.4MB  logical                     
    12      4468MB  4509MB  40.9MB  logical   ext3              

    (parted) mkpart                  #创建新的分区                                        
    Partition type?  primary/logical? l                                       
    File system type?  [ext2]? ext3                                           
    Start? 4509MB                                                             
    End? -1s        # 表示硬盘最后一个扇区,就是硬盘的最末尾处 
    Warning: You requested a partition from 4509MB to 27.1GB.                 
    The closest location we can manage is 4516MB to 4697MB.  Is this still acceptable to you?
    Yes/No? y                                                                 
    (parted) print                                                            
    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 27.1GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos

    Number  Start   End     Size    Type      File system  Flags
     1      16.4kB  4001MB  4001MB  primary                     
     4      4001MB  4703MB  701MB   extended                    
     5      4001MB  4102MB  101MB   logical                     
     6      4102MB  4203MB  101MB   logical                     
     7      4203MB  4303MB  101MB   logical                     
     8      4303MB  4404MB  101MB   logical                     
     9      4404MB  4416MB  11.5MB  logical                     
    10      4416MB  4437MB  21.0MB  logical                     
    11      4437MB  4468MB  31.4MB  logical                     
    12      4468MB  4509MB  40.9MB  logical   ext3              
    13      4516MB  4697MB  181MB   logical                     

    (parted) unit s              #设置单位为扇区                                         
    (parted) print                                                            

    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 52953087s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos

    Number  Start     End       Size      Type      File system  Flags
     1      32s       7815167s  7815136s  primary                     
     4      7815168s  9185279s  1370112s  extended                    
     5      7815200s  8011775s  196576s   logical                     
     6      8011808s  8208383s  196576s   logical                     
     7      8208416s  8404991s  196576s   logical                     
     8      8405024s  8601599s  196576s   logical                     
     9      8601632s  8624127s  22496s    logical                     
    10      8624160s  8665087s  40928s    logical                     
    11      8665120s  8726527s  61408s    logical                     
    12      8726560s  8806399s  79840s    logical   ext3              
    13      8819748s  9173114s  353367s   logical                     

    (parted) rm 13               #删除分区13                                                               
    (parted) p

    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 52953087s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos

    Number  Start     End       Size      Type      File system  Flags
     1      32s       7815167s  7815136s  primary                     
     4      7815168s  9185279s  1370112s  extended                    
     5      7815200s  8011775s  196576s   logical                     
     6      8011808s  8208383s  196576s   logical                     
     7      8208416s  8404991s  196576s   logical                     
     8      8405024s  8601599s  196576s   logical                     
     9      8601632s  8624127s  22496s    logical                     
    10      8624160s  8665087s  40928s    logical                     
    11      8665120s  8726527s  61408s    logical                     
    12      8726560s  8806399s  79840s    logical   ext3              

    (parted) set 12 lvm on          #将分区12的lvm标志打开,这里仅打开标志,并未实际创建lv 
    (parted) p                                                                

    Model: OPNFILER VIRTUAL-DISK (scsi)
    Disk /dev/sdd: 52953087s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos

    Number  Start     End       Size      Type      File system  Flags
     1      32s       7815167s  7815136s  primary                     
     4      7815168s  9185279s  1370112s  extended                    
     5      7815200s  8011775s  196576s   logical                     
     6      8011808s  8208383s  196576s   logical                     
     7      8208416s  8404991s  196576s   logical                     
     8      8405024s  8601599s  196576s   logical                     
     9      8601632s  8624127s  22496s    logical                     
    10      8624160s  8665087s  40928s    logical                     
    11      8665120s  8726527s  61408s    logical                     
    12      8726560s  8806399s  79840s    logical   ext3         lvm 


    (parted) q                #退出交换模式                                                
    Information: Don't forget to update /etc/fstab, if necessary.

    # parted -l /dev/sda             # 直接在命令模式下显示sda的分区表
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sda: 8590MB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Number Start End Size Type File system 标志
    1 32.3kB 107MB 107MB 主分区 ext3 启动
    2 107MB 8587MB 8480MB 主分区 lvm
    Model: VMware, VMware Virtual S (scsi)
  • 相关阅读:
    TCL 双引号和花括号的区别
    在Vivado中调用ModelSim生成FSM的状态转移图
    基于配置文件的方式来配置AOP
    Spring MVC_Hello World
    重用切点表达式
    Spring MVC概述(2)
    Shiro_DelegatingFilterProxy
    Shiro-工作流程
    切面的优先级
    Shiro-集成Spring
  • 原文地址:https://www.cnblogs.com/ScvQ/p/9047010.html
Copyright © 2011-2022 走看看