1 分区方式

两种分区方式:MBR,GPT

1.1 MBR分区

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

划分分区的单位:

  • CentOS 5之前按整柱面划分
  • CentOS 6版本后可以按Sector划分

0磁道0扇区:512bytes

  • 446bytes:boot loader启动相关
  • 64bytes:分区表,其中每16bytes标识—个分区
  • 2bytes:55AA

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5

MBR分区结构

硬盘主引导记录MBR有4个部分组成

偏移地址 存储信息 说明
0000-0088 Master Boot Record主引导程序 主引导程序
0089-01BD 出错信息数据区 数据区
01BE-01CD 分区项1(16字节) 分区表
01CE-01DD 分区项2(16字节) 分区表
01DE-01ED 分区项3(16字节) 分区表
01EE-01FD 分区项4(16字节) 分区表
01FE 55 结束标志
01FF AA 结束标志
  • 主引导程序(偏移地址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中DPT结构

存贮字节位 内容及意义
第1字节 引导标志。若值为80H表示活动分区,若值为00H表示非活动分区
第2、3、4字节 本分区的起始磁头号、扇区号、柱面号。其中:
磁头号--第2字节;
扇区号--第3字节的低6位;
柱面号--第3字节高2位+第4字节8位。
第5字节 分区类型符:
00H--表示该分区未用(即没有指定);
06H--FAT16基本分区;0BH--FAT32基本分区;
05H--扩展分区;
07H--NTFS分区;
0FH--(LBA模式)扩展分区(83H为Linux分区等)。
第6、7、8字节 本分区的结束磁头号、扇区号、柱面号。其中:
磁头号--第6字节;
扇区号--第7字节的低6位;
柱面号--第7字节的高2位+第8字节。
第9、10、11、12字节 本分区之前已用了的扇区数。
第13、14、15、16字节 本分区的总扇区数。

备份MBR的分区表,并破坏后恢复

# 备份MBR分区表
# 查看分区的前512字节
[root@centos8 ~]# hexdump -C -n 512 /dev/nvme0n1
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 05 7c  |. ..d|<.t...R..||
00000090  b4 41 bb aa 55 cd 13 5a  52 72 3d 81 fb 55 aa 75  |.A..U..ZRr=..U.u|
000000a0  37 83 e1 01 74 32 31 c0  89 44 04 40 88 44 ff 89  |7...t21..D.@.D..|
000000b0  44 02 c7 04 10 00 66 8b  1e 5c 7c 66 89 5c 08 66  |D.....f..\|f.\.f|
000000c0  8b 1e 60 7c 66 89 5c 0c  c7 44 06 00 70 b4 42 cd  |..`|f.\..D..p.B.|
000000d0  13 72 05 bb 00 70 eb 76  b4 08 cd 13 73 0d 5a 84  |.r...p.v....s.Z.|
000000e0  d2 0f 83 de 00 be 85 7d  e9 82 00 66 0f b6 c6 88  |.......}...f....|
000000f0  64 ff 40 66 89 44 04 0f  b6 d1 c1 e2 02 88 e8 88  |d.@f.D..........|
00000100  f4 40 89 44 08 0f b6 c2  c0 e8 02 66 89 04 66 a1  |.@.D.......f..f.|
00000110  60 7c 66 09 c0 75 4e 66  a1 5c 7c 66 31 d2 66 f7  |`|f..uNf.\|f1.f.|
00000120  34 88 d1 31 d2 66 f7 74  04 3b 44 08 7d 37 fe c1  |4..1.f.t.;D.}7..|
00000130  88 c5 30 c0 c1 e8 02 08  c1 88 d0 5a 88 c6 bb 00  |..0........Z....|
00000140  70 8e c3 31 db b8 01 02  cd 13 72 1e 8c c3 60 1e  |p..1......r...`.|
00000150  b9 00 01 8e db 31 f6 bf  00 80 8e c6 fc f3 a5 1f  |.....1..........|
00000160  61 ff 26 5a 7c be 80 7d  eb 03 be 8f 7d e8 34 00  |a.&Z|..}....}.4.|
00000170  be 94 7d e8 2e 00 cd 18  eb fe 47 52 55 42 20 00  |..}.......GRUB .|
00000180  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
00000190  65 61 64 00 20 45 72 72  6f 72 0d 0a 00 bb 01 00  |ead. Error......|
000001a0  b4 0e cd 10 ac 3c 00 75  f4 c3 00 00 00 00 00 00  |.....<.u........|
000001b0  00 00 00 00 00 00 00 00  5f 4d c9 b6 00 00 80 04  |........_M......|
000001c0  01 04 83 fe c2 ff 00 08  00 00 00 00 20 00 00 fe  |............ ...|
000001d0  c2 ff 8e fe c2 ff 00 08  20 00 00 f8 5f 02 00 00  |........ ..._...|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[root@centos8 ~]# dd if=/dev/nvme0n1 of=dpt.img bs=1 count=64 skip=446
64+0 records in
64+0 records out
64 bytes copied, 0.000607266 s, 105 kB/s
[root@centos8 ~]# hexdump -C dpt.img -v
00000000  80 04 01 04 83 fe c2 ff  00 08 00 00 00 00 20 00  |.............. .|
00000010  00 fe c2 ff 8e fe c2 ff  00 08 20 00 00 f8 5f 02  |.......... ..._.|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040
[root@centos8 ~]# scp dpt.img 192.168.11.148:~
The authenticity of host '192.168.11.148 (192.168.11.148)' can't be established.
ECDSA key fingerprint is SHA256:Ww6kCL/qUjlJTWuWiwd/cUlensXIIeJV9uO9aoOHYGg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.11.148' (ECDSA) to the list of known hosts.
root@192.168.11.148's password: 
dpt.img                                              100%   64    31.3KB/s   00:00 

# 破坏分区表
[root@centos8 ~]# dd if=/dev/zero of=/dev/nvme0n1 bs=1 count=64 seek=446
64+0 records in
64+0 records out
64 bytes copied, 0.000576051 s, 111 kB/s
[root@centos8 ~]# df -h   # 还显示是因为在内存中
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             462M     0  462M   0% /dev
tmpfs                479M     0  479M   0% /dev/shm
tmpfs                479M  6.7M  472M   2% /run
tmpfs                479M     0  479M   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  5.5G   12G  33% /
/dev/nvme0n1p1       976M  118M  792M  13% /boot
tmpfs                 96M     0   96M   0% /run/user/0
[root@centos8 ~]# ls /dev/nvme0*   # 还显示是因为在内存中
/dev/nvme0  /dev/nvme0n1  /dev/nvme0n1p1  /dev/nvme0n1p2
[root@centos8 ~]# fdisk -l   # 真正查看分区,已经不存在
Disk /dev/nvme0n1: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xb6c94d5f

Disk /dev/mapper/cl-root: 17 GiB, 18249416704 bytes, 35643392 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 /dev/mapper/cl-swap: 2 GiB, 2147483648 bytes, 4194304 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
[root@centos8 ~]# hexdump -C -n 512 /dev/nvme0n1 -v
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 05 7c  |. ..d|<.t...R..||
00000090  b4 41 bb aa 55 cd 13 5a  52 72 3d 81 fb 55 aa 75  |.A..U..ZRr=..U.u|
000000a0  37 83 e1 01 74 32 31 c0  89 44 04 40 88 44 ff 89  |7...t21..D.@.D..|
000000b0  44 02 c7 04 10 00 66 8b  1e 5c 7c 66 89 5c 08 66  |D.....f..\|f.\.f|
000000c0  8b 1e 60 7c 66 89 5c 0c  c7 44 06 00 70 b4 42 cd  |..`|f.\..D..p.B.|
000000d0  13 72 05 bb 00 70 eb 76  b4 08 cd 13 73 0d 5a 84  |.r...p.v....s.Z.|
000000e0  d2 0f 83 de 00 be 85 7d  e9 82 00 66 0f b6 c6 88  |.......}...f....|
000000f0  64 ff 40 66 89 44 04 0f  b6 d1 c1 e2 02 88 e8 88  |d.@f.D..........|
00000100  f4 40 89 44 08 0f b6 c2  c0 e8 02 66 89 04 66 a1  |.@.D.......f..f.|
00000110  60 7c 66 09 c0 75 4e 66  a1 5c 7c 66 31 d2 66 f7  |`|f..uNf.\|f1.f.|
00000120  34 88 d1 31 d2 66 f7 74  04 3b 44 08 7d 37 fe c1  |4..1.f.t.;D.}7..|
00000130  88 c5 30 c0 c1 e8 02 08  c1 88 d0 5a 88 c6 bb 00  |..0........Z....|
00000140  70 8e c3 31 db b8 01 02  cd 13 72 1e 8c c3 60 1e  |p..1......r...`.|
00000150  b9 00 01 8e db 31 f6 bf  00 80 8e c6 fc f3 a5 1f  |.....1..........|
00000160  61 ff 26 5a 7c be 80 7d  eb 03 be 8f 7d e8 34 00  |a.&Z|..}....}.4.|
00000170  be 94 7d e8 2e 00 cd 18  eb fe 47 52 55 42 20 00  |..}.......GRUB .|
00000180  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
00000190  65 61 64 00 20 45 72 72  6f 72 0d 0a 00 bb 01 00  |ead. Error......|
000001a0  b4 0e cd 10 ac 3c 00 75  f4 c3 00 00 00 00 00 00  |.....<.u........|
000001b0  00 00 00 00 00 00 00 00  5f 4d c9 b6 00 00 00 00  |........_M......|
000001c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[root@centos8 ~]# reboot

重启后发现已经无法开机

虚拟机内ctrl+alt+ins重启,物理机ctrl+alt+del重启

重启后按ESC选择光盘启动

选择Troubleshooting 故障排除

选择Rescue a Centos Linux system 救援模式

选择3)跳转到shell

配置网络

# 三种方法任选其一即可
sh-4.4# ifconfig ens160 192.168.11.147/24
sh-4.4# ip addr add 192.168.11.147/24 dec/ens160
sh-4.4# ip a a 192.168.11.147/24 dec/ens160

成功配置IP

下载备份的分区表

sh-4.4# scp 192.168.11.148:~/dpt.img

下载成功

恢复MBR分区表

sh-4.4# dd if=dpt.img of=/dev/nvme0n1 bs=1 seek=446

恢复完重启即可

已成功开机

1.2 GPT分区

GPT:GUID(Globals Unique ldentifiers) partition table支持128个分区,使用64位,支持8Z(512Byte/block ) 64Z ( 4096Byte/block)

使用128位UUID(Universally Unique ldentifier)表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

UEFI(Unified Extensible Firmware Interface统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动

GPT分区结构分为4个区域:

  • GPT头
  • 分区表
  • GPT分区
  • 备份分区

2 引导方式

2.1 BIOS

BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是UEFl启动

BIOS (Basic Input Output System基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的"滴滴"音,可以简单的判断硬件故障,比如“1长1短"通常表示内存故障,“1长3短"通常表示显卡故障

BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BlOS本身使用。BIOS只能识别到主引导记录(MBR)初始化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了

2.2 UEFI

EFI(Extensible Firmware Interface)可扩展固件接口,是Intel为PC固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在OS加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是BIOS的继任者,或者理解为新版BIOS。

UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织

UEFI(Unified Extensible Firmware Interface)统一的可扩展固件接口,是一种详细描述类型接口的标准。UEFI相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制

BIOS和UEFI区别

BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符操作界面

UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用

BIOS+MBR与UEFI+GPT

传统BIOS运行流程:开机-->BIOS初始化-->BIIOS自检-->引导操作系统-->进入系统

UEFI运行流程:开机-->UEFI初始化-->引导操作系统-->进入系统

MSDN (Microsoft Developer Network)指出,Windows只能安装于BIOS+MBR或是UEFI+GPT的组合上,而BIOS +GPT和UEFI+MBR是不允许的。但是 BIOS +GPT +GRUB启动Linux是可以的