首页 > 其他 > 详细

磁盘管理

时间:2019-07-13 21:44:06      阅读:148      评论:0      收藏:0      [点我收藏+]
BIOS
       Basic Input Output System,是一种业界标准的固件接口。BIOS是个人电脑启动时加载的第一个软件。BIOS是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 
      主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。
 
UEFI
       统一的可扩展固件接口(Unified Extensible Firmware Interface),是一种描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
      可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 对PC固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的BIOS 的继任者。
      与legacy BIOS 相比,UEFI最大的几个区别在于:
1. 编码99%都是由C语言完成;
2. 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocol的新方式;
3. 将不支持X86实模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
6. 对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。
7.弥补BIOS对新硬件的支持不足的问题。
UEFI使用模块化设计,它在逻辑上可分为硬件控制和OS软件管理两部分:操作系统—可扩展固件接口—固件—硬件
 
 
技术分享图片
uEFI Image包含三种:uEFI Applications, OS Loaders and uEFI Drivers。
uEFI Drivers是提供设备间接口协议,每个设备独立运行提供设备版本号和相应的参数以及设备间关联,不再需要基于操作系统的支持。
uEFI Applications是硬件初始化完,操作系统启动之前的核心应用,比如:启动管理、BIOS设置、uEFI Shell、诊断程式、调度和供应程式、调试应用...等等
OS Loaders是特殊的uEFI Application,主要功能是启动操作系统并退出和关闭uEFI应用。
一种突破传统MBR(主引导记录)磁盘分区结构限制的GUID(全局唯一标志符)磁盘分区系统将在UEFI规范中被引入。MBR结构磁盘只允许存在4个主分区,而这种新结构却不受限制,分区类型也改由GUID来表示。在众多的分区类型中,UEFI系统分区用来存放驱动和应用程序
 
 
 
GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一64bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。
技术分享图片
 
技术分享图片
 
GPT分区表的结构。此例中,每个逻辑块(LBA)为512字节,每个分区的记录为128字节。负数的LBA地址表示从最后的块开始倒数,−1表示最后一个块。
在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头
传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位Windows操作系统使用16,384字节(或32扇区)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。
为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。
 
LBA 0
在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。
在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动。
 
分区表头
LBA 1
分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量
分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。
主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。
 
分区表项
LBA 2–33
GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。
 
 
 
 
磁盘管理工具:fdisk,parted,sfdisk
在Linux的kernel里;
IDE的硬盘最多可以支持到16个分区;
SCSI硬盘最多支持15个分区;
fdisk:操纵磁盘分区表
fdisk -l [-u] [device...]
-l 列出指定设备的分区表,未指定则使用proc/partitions中提到的设备
[root@linuxprobe ~]# fdisk -l /dev/sda1
Disk /dev/sda1: 524 MB, 524288000 bytes, 1024000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
sector:扇区 1sector=512bytes
 
fdisk   device
m;获取帮助
p:显示分区表
n:新建分区表
d:删除分区表
w:保存并退出
q:退出不保存
l:列出分区ID
t:改变分区ID
[root@linuxprobe Desktop]# fdisk  /dev/sdb
Command (m for help): m
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):(enter)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G
Partition 1 of type Linux and of size 5 GiB is set
Command (m for help): t
Hex code (type L to list all codes): 83
Changed type of partition ‘Linux‘ to ‘Linux‘
Command (m for help): w
The partition table has been altered!
 
 
查看内核是否已经识别新的分区
[root@linuxprobe Desktop]# cat /proc/partitions
major minor  #blocks  name
 
   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
   8       16   20971520 sdb
   8       17    5242880 sdb1
  11        0    3655680 sr0
253        0   18358272 dm-0
253        1    2097152 dm-1
 
通知内核重新读取硬盘分区表:
partx -a /dev/sdb   所有分区
   -n   M:N 指定分区
   -f   强制分区
[root@linuxprobe Desktop]# partx -n 1:2  /dev/sdb
NR START      END  SECTORS SIZE NAME UUID
1  2048 10487807 10485760   5G 
[root@linuxprobe Desktop]# kpartx -f  /dev/sdb
sdb1 : 0 10485760 /dev/sdb 2048

磁盘管理

原文:https://www.cnblogs.com/gaoxiwei/p/11182152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!