磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例

磁盘及分区详解(MBR和GPT)

  • 1、磁盘为什么要分区?
  • 2、Linux设备文件
  • 3、磁盘简介
    • 3.1 硬盘接口类型
    • 3.2 机械硬盘和固态硬盘
      • 3.2.1 磁盘术语
      • 3.2.2 机械硬盘
  • 4、分区方式
    • 4.1 CHS和LBA
    • 4.2 第一种分区方式:MBR
      • 4.2.1 MBR简介
      • 4.2.2 MBR分区结构
      • 4.2.3 MBR中的DPT结构
      • 4.2.4 MBR实例
    • 4.3 第二种分区方式:GPT
      • 4.3.1 GPT简介
      • 4.3.2 GPT分区
      • 4.3.3 GUID
    • 4.4 优缺点
  • 5、两种分区方式在启动系统流程上的区别
  • 6、管理分区
    • 6.1 lsblk
    • 6.2 parted命令
    • 6.3 分区工具fdisk和gdisk
    • 6.4 同步分区表
    • 6.5 partx 示例
  • 7、新增磁盘分区总体示例
    • 7.1 磁盘信息查看
    • 7.2 增加新分区 /dev/vda3 ,格式为 LVM
    • 7.3 进行新增分区查看
    • 7.4 通知内核,重读分区
    • 7.5 对新增分区进行文件系统部署
    • 7.6 对新增分区进行挂载使用
    • 7.7 编辑 /etc/fstab 文件,实现开机自动挂载

1、磁盘为什么要分区?

实现磁盘分区可以有以下优势:

  1. 优化I/O性能
  2. 实现磁盘空间配额限制
  3. 提高修复速度
  4. 隔离系统和程序
  5. 安装多个OS
  6. 采用不同文件系统

2、Linux设备文件

Linux的哲学思想之一:一切皆文件。

# 设备类型:
	# 块(block):随机访问,数据交换单位是“块”
	# 字符(character):线性访问,数据交换单位是“字符”
			
# 设备文件:FHS
	# /dev
	# 设备文件:关联至设备的驱动程序,进而能够跟与之对应硬件设备进行通信
					
# 设备号:
	# major:主设备号,区分设备类型;用于标明设备所需要的驱动程序
	# minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口
						
		# mknod命令:
			# make block or character special files					
			# mknod  [OPTION]...  NAME  TYPE  [MAJOR  MINOR]
				# -m MODE:创建后的设备文件的访问权限

# 设备文件名:ICANN		
	# 磁盘:
		# IDE: /dev/hd[a-z]
			# 例如:/dev/hda, /dev/hdb
		# 不同磁盘表示 (SCSI, SATA, USB, SAS)
			# /dev/sd[a-z]	
				# /dev/sda, /dev/sdb, ...
		# 同一设备上的不同分区
			# /dev/sda#
				# /dev/sda1, /dev/sda2, ...	
					# 注意:CentOS 6和7统统将硬盘设备文件标识为/dev/sd[a-z]#						
					
	# 引用设备的方式:
		# 1、设备文件名
		# 2、卷标
		# 3、UUID

3、磁盘简介

在开始介绍磁盘分区以前,先简单介绍下磁盘。

硬盘(Disks: 持久存储数据)是一种I/O设备。

3.1 硬盘接口类型

# IDE(ata):并口,133MB/s
# SCSI:并口,Ultrascsi320, 320MB/S, UltraSCSI640, 640MB/S
# SATA:串口,6gbps
# SAS:串口,6gbps
# USB:串口,480MB/s
				
# 并口:同一线缆可以接多块设备
	IDE:两个,主,从
	SCSI:
		宽带:16-1
		窄带:8-1
		
# 串口:同一线缆只可以接一个设备
				
# iops:io per second

3.2 机械硬盘和固态硬盘

  • 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤。
  • 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致。
  • 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍。
  • 相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势。
  • 硬盘有价,数据无价,目前SSD不能完全取代HHD。

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第1张图片

3.2.1 磁盘术语

# head:磁头
# track:磁道
# cylinder: 柱面
# sector: 扇区,512bytes

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第2张图片

3.2.2 机械硬盘

机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作,一般用磁头号区分。结构特性决定了机械硬盘如果受到剧烈冲击,磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。

假设磁头不动,硬盘旋转,那么磁头就会在磁盘表面画出一个圆形轨迹并将之磁化,数据就保存在这些磁化区中,称之为磁道,将每个磁道分段,一个弧段就是一个扇区。一个硬盘可以包含多个扇面,扇面同轴重叠放置,每个盘面磁道数相同,具有相同周长的磁道所形成的圆柱称之为柱面,柱面数与磁道数相等。

最初的寻址方式称为CHS,在LBA(Logical Block Address)概念诞生之前,由他负责管理磁盘地址。所谓CHS即柱面(cylinder),磁头(header),扇区(sector),通过这三个变量描述磁盘地址,需要明白的是,这里表示的已不是物理地址而是逻辑地址了。这种方法也称作是LARGE寻址方式。该方法下:

硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)。

后来,人们通过为每个扇区分配逻辑地址,以扇区为单位进行寻址,也就有了LBA寻址方式。但是为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,和 LARGE寻址模式一样,这里的地址也是逻辑地址了。(固态硬盘的存储原理虽然与机械硬盘不同,采用的是flash存储,但仍然使用LBA进行管理。)

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第3张图片
磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第4张图片

4、分区方式

磁盘分区方式一般有两种:MBR和GPT。
在讲之前,先介绍下CHS和LBA。

4.1 CHS和LBA

  • CHS:即柱面(cylinder),磁头(header),扇区(sector)。
# 采用24bit位寻址
# 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
# 最大寻址空间8GB
  • LBA(logical block addressing)
# LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
# ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算
# ATA-1所定义的28位LBA上限达到128 GiB
# 2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes
  • 由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式。

4.2 第一种分区方式:MBR

4.2.1 MBR简介

# MBR:Master Boot Record
# 使用32位表示扇区数,分区不超过2T

# 分为三部分(512字节):
	# 446bytes:bootloader, 程序,引导启动操作系统的程序;
	# 64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区;
		4主分区
			3主1扩展
				n逻辑分区
	# 2bytes:MBR区域的有效性标识;55AA为有效
					
	# 主分区和扩展分区的标识:1-4
	# 逻辑分区:5+

4.2.2 MBR分区结构

# 硬盘主引导记录MBR由4个部分组成
	# 主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序
	# 出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节
	# 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH
		# 每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
	# 结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第5张图片
磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第6张图片

4.2.3 MBR中的DPT结构

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第7张图片

4.2.4 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.2T)。超过2TB以后的空间,不能分配地址,自然也就无法管理了。

MBR的诸多缺点使其应用大大受限。所以有了后面的GPT分区技术。

4.3 第二种分区方式:GPT

GPT 是 GUID Partition Table 的缩写,意为 全局唯一标识分区表

4.3.1 GPT简介

# GPT支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
# 使用128位UUID(Universally Unique Identifier) 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
# UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

GPT 是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(UEFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB(2.2×10^12字节)的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到4KB的扇区,这意味着MBR的有效容量上限提升到16 TiB。 这个看似“正确的”解决方案,在临时地降低人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,因而使得最大分区大小在2^64-1个扇区成为可能。对于每个扇区大小为512字节的磁盘,那意味着可以有9.4ZB(9.4×10^ 21字节)或8 ZiB个512字节(9,444,732,965,739,290,426,880字节或18,446,744,073,709,551,615(2^64 -1)个扇区×512(2^9)字节每扇区)。

4.3.2 GPT分区

EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域。
磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第8张图片
PMBR存在的意义就是,当不支持GPT的分区工具试图对硬盘进行操作时(例如MS-DOS和Linux的fdisk程序),它可以根据这份PMBR以传统方式启动,过程和MBR+BIOS完全一致,极大地提高了兼容性。而支持GPT的系统在检测PMBR后会直接跳到GPT表头读取分区表。和MBR类似,分区表中存储了某个分区的起始和结束位置及其文件系统属性信息,而分区才是实际存在的物理磁盘的一部分。

4.3.3 GUID

GUID 是 Globally Unique Identifier 的缩写,意为 全局唯一标识符

GUID 是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-1069-A2DD-08002B30309D},它实质上是一个128位长的二进制整数(4个2进制数代表一个16进制数字)。

GUID的主要目的是产生完全唯一的数字。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID的总数也足够大,达到了2128(3.4×1038)个,所以随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

4.4 优缺点

相较于MBR,GPT具有以下优点:

  • 得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB)。
  • 分区数量几乎没有限制。
  • 自带保险,由于在磁盘的首尾部分各带一个GPT表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性。
  • 循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
  • 尽管目前分区类型不超过百数,GPT仍提供了16字节的GUID来标识分区类型,使其更不容易产生冲突。
  • 每个分区都可以拥有一个特别的名字,最长72字节。
  • 完美支持UEFI,毕竟它就是UEFI规范的衍生品。在将来全行业UEFI的情境下,GPT必将更快淘汰MBR。

5、两种分区方式在启动系统流程上的区别

磁盘及分区详解(MBR和GPT)、新增磁盘分区总体示例_第9张图片

6、管理分区

# 列出块设备
	# lsblk
# 创建分区使用:
	# fdisk创建MBR分区
	# gdisk创建GPT分区
	# parted高级分区操作
# 重新设置内存中的内核分区表版本
	# partprobe

6.1 lsblk

lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。

常用选项:
-a, --all            # 显示所有设备。
-b, --bytes          # 以bytes方式显示设备大小。
-d, --nodeps         # 不显示 slaves 或 holders。
-D, --discard        # print discard capabilities。
-e, --exclude  # 排除设备 (default: RAM disks)。
-f, --fs             # 显示文件系统信息。
-h, --help           # 显示帮助信息。
-i, --ascii          # use ascii characters only。
-m, --perms          # 显示权限信息。
-l, --list           # 使用列表格式显示。
-n, --noheadings     # 不显示标题。
-o, --output   # 输出列。
-P, --pairs          # 使用key="value"格式显示。
-r, --raw            # 使用原始格式显示。
-t, --topology       # 显示拓扑结构信息。

示例:

[root@LeeMumu ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  120G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0  119G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   67G  0 lvm  /home
sdb               8:16   0   10G  0 disk /mnt/mydata
sdc               8:32   0    2G  0 disk 
└─sdc1            8:33   0    1G  0 part [SWAP]
sr0              11:0    1   10G  0 rom  
# 字段解释:
NAME        # 这是块设备名
MAJ:MIN     # 本栏显示主要和次要设备号
RM          # 本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备
SIZE        # 本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB
RO          # 该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的
TYPE        # 本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)
MOUNTPOINT  # 本栏指出设备挂载的挂载点

6.2 parted命令

# 磁盘分区和分区大小调整工具 
# parted的操作都是实时生效的,小心使用
# 用法:parted [选项]... [设备[命令[参数]...]...]
	# parted /dev/sdbmklabelgpt|msdos
	# parted /dev/sdbprint
	# parted /dev/sdbmkpartprimary 1 200 (默认M)
	# parted /dev/sdbrm1
	# parted –l 列出分区信息

6.3 分区工具fdisk和gdisk

fdisk 提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘上。

注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别。

# gdisk / dev / sdb 类 fdisk 的 GPT分区工具
# fdisk -l [-u] [device...] 查看分区
# fdisk/dev/sdb 管理分区

	# 子命令:
		# p 显示现有分区信息
		# t 更改分区类型
		# n 创建新分区
		# d 删除分区
		# v 校验分区
		# u 转换单位
		# w 保存并退出
		# q 不保存并退出
		# l 查看所有已经ID
		# m 查看帮助

在主分区1到主分区3创建完毕后,只有使用 e 新建扩展分区后,才能继续在扩展分区的基础上继续创建分区。

但是需要注意的是,一般主分区1、主分区2、主分区3和扩展分区(e)要把全部的磁盘空间分配完,不然剩下的磁盘空间会无法使用。

一般都是把扩展分区分配磁盘剩余空间,然后在扩展分区的基础上创建新的分区。

6.4 同步分区表

# 查看内核是否已经识别新的分区
	# cat /proc/partations
	
# centos6,7:通知内核重新读取硬盘分区表
	新增分区用
	# partx -a /dev/DEVICE
	# kpartx -a /dev/DEVICE -f
	
# 删除分区用
	# partx -d --nrM -N /dev/DEVICE
	
# CentOS 5: 使用 partprobe
	# partprobe [/dev/DEVICE]

6.5 partx 示例

在创建完分区后,需要用以下命令,对磁盘重读分区信息。新建分区才会被识别。

[root@LeeMumu ~]# partx -a /dev/sdh
partx: /dev/sdh: error adding partitions 1-5

7、新增磁盘分区总体示例

7.1 磁盘信息查看

[root@tangtang tmp]# fdisk -l

Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 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
Disk label type: dos
Disk identifier: 0x000ad887

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200    20971519     9436160   8e  Linux LVM

7.2 增加新分区 /dev/vda3 ,格式为 LVM

[root@tangtang tmp]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): 
Using default response p
Partition number (3,4, default 3): 
First sector (20971520-209715199, default 20971520): 
Using default value 20971520
Last sector, +sectors or +size{K,M,G} (20971520-209715199, default 209715199): +10G
Partition 3 of type Linux and of size 10 GiB is set

Command (m for help): t
Partition number (1-3, default 3): 3
Hex code (type L to list all codes): L 
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt             
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

7.3 进行新增分区查看

[root@tangtang tmp]# fdisk -l

Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 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
Disk label type: dos
Disk identifier: 0x000ad887

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200    20971519     9436160   8e  Linux LVM
/dev/vda3        20971520    41943039    10485760   8e  Linux LVM

7.4 通知内核,重读分区

[root@tangtang tmp]# partx -a /dev/vda
partx: /dev/vda: error adding partitions 1-2
[root@tangtang tmp]# partx -a /dev/vda
partx: /dev/vda: error adding partitions 1-3

7.5 对新增分区进行文件系统部署

[root@tangtang tmp]# mkfs.ext4 /dev/vda3
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

7.6 对新增分区进行挂载使用

[root@tangtang tmp]# mount /dev/vda3 /tangtang/
[root@tangtang tmp]# cd /tangtang/
[root@tangtang tangtang]# ll
total 16
drwx------ 2 root root 16384 Oct 31 10:51 lost+found  # 显示此目录,说明挂载成功

7.7 编辑 /etc/fstab 文件,实现开机自动挂载

[root@tangtang tangtang]echo "/dev/vda3 /tangtang ext4 defaults 0 0" >> /etc/fsta

你可能感兴趣的:(Linux学习笔记)