1.磁盘结构
1.1 设备文件
一切皆文件:open(), read(), write(), close()
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:
- 主设备号:major number, 标识设备类型
- 次设备号:minor number, 标识同一类型下的不同设备
设备类型:
- 块设备:block,存取单位“块”,磁盘
- 字符设备:char,存取单位“字符”,键盘
范例:
[root@rocky8 ~]# ll /dev
total 0
crw-r--r-- 1 root root 10, 235 Oct 15 17:54 autofs
drwxr-xr-x 2 root root 180 Oct 15 17:54 block
drwxr-xr-x 2 root root 80 Oct 15 17:54 bsg
drwxr-xr-x 3 root root 60 Oct 15 17:54 bus
lrwxrwxrwx 1 root root 3 Oct 15 17:54 cdrom -> sr0
drwxr-xr-x 2 root root 2900 Oct 15 17:54 char
crw------- 1 root root 5, 1 Oct 15 17:54 console
lrwxrwxrwx 1 root root 11 Oct 15 17:54 core -> /proc/kcore
drwxr-xr-x 3 root root 60 Oct 15 17:54 cpu
crw------- 1 root root 10, 62 Oct 15 17:54 cpu_dma_latency
drwxr-xr-x 7 root root 140 Oct 15 17:54 disk
crw-rw---- 1 root audio 14, 9 Oct 15 17:54 dmmidi
drwxr-xr-x 3 root root 100 Oct 15 17:54 dri
crw-rw---- 1 root video 29, 0 Oct 15 17:54 fb0
lrwxrwxrwx 1 root root 13 Oct 15 17:54 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Oct 15 17:54 full
crw-rw-rw- 1 root root 10, 229 Oct 15 17:54 fuse
crw------- 1 root root 245, 0 Oct 15 17:54 hidraw0
crw------- 1 root root 10, 228 Oct 15 17:54 hpet
drwxr-xr-x 2 root root 0 Oct 15 17:54 hugepages
crw------- 1 root root 10, 183 Oct 15 17:54 hwrng
lrwxrwxrwx 1 root root 12 Oct 15 17:54 initctl -> /run/initctl
drwxr-xr-x 4 root root 280 Oct 15 17:54 input
crw-r--r-- 1 root root 1, 11 Oct 15 17:54 kmsg
lrwxrwxrwx 1 root root 28 Oct 15 17:54 log -> /run/systemd/journal/dev-log
crw-rw---- 1 root disk 10, 237 Oct 15 17:54 loop-control
drwxr-xr-x 2 root root 60 Oct 15 17:54 mapper
crw------- 1 root root 10, 227 Oct 15 17:54 mcelog
crw-r----- 1 root kmem 1, 1 Oct 15 17:54 mem
crw-rw---- 1 root audio 14, 2 Oct 15 17:54 midi
drwxrwxrwt 2 root root 40 Oct 15 17:54 mqueue
drwxr-xr-x 2 root root 60 Oct 15 17:54 net
crw-rw-rw- 1 root root 1, 3 Oct 15 17:54 null
crw------- 1 root root 10, 144 Oct 15 17:54 nvram
crw-r----- 1 root kmem 1, 4 Oct 15 17:54 port
crw------- 1 root root 108, 0 Oct 15 17:54 ppp
crw-rw-rw- 1 root tty 5, 2 Oct 15 18:00 ptmx
drwxr-xr-x 2 root root 0 Oct 15 17:54 pts
crw-rw-rw- 1 root root 1, 8 Oct 15 17:54 random
drwxr-xr-x 2 root root 60 Oct 15 17:54 raw
crw-rw-r-- 1 root root 10, 60 Oct 15 17:54 rfkill
lrwxrwxrwx 1 root root 4 Oct 15 17:54 rtc -> rtc0
crw------- 1 root root 251, 0 Oct 15 17:54 rtc0
brw-rw---- 1 root disk 8, 0 Oct 15 17:54 sda #8代表设备类型的主要编号,0代表次要编号
brw-rw---- 1 root disk 8, 1 Oct 15 17:54 sda1
brw-rw---- 1 root disk 8, 2 Oct 15 17:54 sda2
brw-rw---- 1 root disk 8, 3 Oct 15 17:54 sda3
brw-rw---- 1 root disk 8, 4 Oct 15 17:54 sda4
brw-rw---- 1 root disk 8, 5 Oct 15 17:54 sda5
crw-rw---- 1 root cdrom 21, 0 Oct 15 17:54 sg0
crw-rw---- 1 root disk 21, 1 Oct 15 17:54 sg1
drwxrwxrwt 2 root root 40 Oct 15 17:54 shm
crw------- 1 root root 10, 231 Oct 15 17:54 snapshot
drwxr-xr-x 3 root root 200 Oct 15 17:54 snd
brw-rw---- 1 root cdrom 11, 0 Oct 15 17:54 sr0
lrwxrwxrwx 1 root root 15 Oct 15 17:54 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Oct 15 17:54 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Oct 15 17:54 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 Oct 15 17:54 tty
crw--w---- 1 root tty 4, 0 Oct 15 17:54 tty0
crw--w---- 1 root tty 4, 1 Oct 15 17:54 tty1
crw--w---- 1 root tty 4, 10 Oct 15 17:54 tty10
crw--w---- 1 root tty 4, 11 Oct 15 17:54 tty11
crw--w---- 1 root tty 4, 12 Oct 15 17:54 tty12
crw--w---- 1 root tty 4, 13 Oct 15 17:54 tty13
crw--w---- 1 root tty 4, 14 Oct 15 17:54 tty14
crw--w---- 1 root tty 4, 15 Oct 15 17:54 tty15
crw--w---- 1 root tty 4, 16 Oct 15 17:54 tty16
crw--w---- 1 root tty 4, 17 Oct 15 17:54 tty17
crw--w---- 1 root tty 4, 18 Oct 15 17:54 tty18
crw--w---- 1 root tty 4, 19 Oct 15 17:54 tty19
crw--w---- 1 root tty 4, 2 Oct 15 17:54 tty2
crw--w---- 1 root tty 4, 20 Oct 15 17:54 tty20
crw--w---- 1 root tty 4, 21 Oct 15 17:54 tty21
crw--w---- 1 root tty 4, 22 Oct 15 17:54 tty22
crw--w---- 1 root tty 4, 23 Oct 15 17:54 tty23
crw--w---- 1 root tty 4, 24 Oct 15 17:54 tty24
crw--w---- 1 root tty 4, 25 Oct 15 17:54 tty25
crw--w---- 1 root tty 4, 26 Oct 15 17:54 tty26
crw--w---- 1 root tty 4, 27 Oct 15 17:54 tty27
crw--w---- 1 root tty 4, 28 Oct 15 17:54 tty28
crw--w---- 1 root tty 4, 29 Oct 15 17:54 tty29
crw--w---- 1 root tty 4, 3 Oct 15 17:54 tty3
crw--w---- 1 root tty 4, 30 Oct 15 17:54 tty30
crw--w---- 1 root tty 4, 31 Oct 15 17:54 tty31
crw--w---- 1 root tty 4, 32 Oct 15 17:54 tty32
crw--w---- 1 root tty 4, 33 Oct 15 17:54 tty33
crw--w---- 1 root tty 4, 34 Oct 15 17:54 tty34
crw--w---- 1 root tty 4, 35 Oct 15 17:54 tty35
crw--w---- 1 root tty 4, 36 Oct 15 17:54 tty36
crw--w---- 1 root tty 4, 37 Oct 15 17:54 tty37
crw--w---- 1 root tty 4, 38 Oct 15 17:54 tty38
crw--w---- 1 root tty 4, 39 Oct 15 17:54 tty39
crw--w---- 1 root tty 4, 4 Oct 15 17:54 tty4
crw--w---- 1 root tty 4, 40 Oct 15 17:54 tty40
crw--w---- 1 root tty 4, 41 Oct 15 17:54 tty41
crw--w---- 1 root tty 4, 42 Oct 15 17:54 tty42
crw--w---- 1 root tty 4, 43 Oct 15 17:54 tty43
crw--w---- 1 root tty 4, 44 Oct 15 17:54 tty44
crw--w---- 1 root tty 4, 45 Oct 15 17:54 tty45
crw--w---- 1 root tty 4, 46 Oct 15 17:54 tty46
crw--w---- 1 root tty 4, 47 Oct 15 17:54 tty47
crw--w---- 1 root tty 4, 48 Oct 15 17:54 tty48
crw--w---- 1 root tty 4, 49 Oct 15 17:54 tty49
crw--w---- 1 root tty 4, 5 Oct 15 17:54 tty5
crw--w---- 1 root tty 4, 50 Oct 15 17:54 tty50
crw--w---- 1 root tty 4, 51 Oct 15 17:54 tty51
crw--w---- 1 root tty 4, 52 Oct 15 17:54 tty52
crw--w---- 1 root tty 4, 53 Oct 15 17:54 tty53
crw--w---- 1 root tty 4, 54 Oct 15 17:54 tty54
crw--w---- 1 root tty 4, 55 Oct 15 17:54 tty55
crw--w---- 1 root tty 4, 56 Oct 15 17:54 tty56
crw--w---- 1 root tty 4, 57 Oct 15 17:54 tty57
crw--w---- 1 root tty 4, 58 Oct 15 17:54 tty58
crw--w---- 1 root tty 4, 59 Oct 15 17:54 tty59
crw--w---- 1 root tty 4, 6 Oct 15 17:54 tty6
crw--w---- 1 root tty 4, 60 Oct 15 17:54 tty60
crw--w---- 1 root tty 4, 61 Oct 15 17:54 tty61
crw--w---- 1 root tty 4, 62 Oct 15 17:54 tty62
crw--w---- 1 root tty 4, 63 Oct 15 17:54 tty63
crw--w---- 1 root tty 4, 7 Oct 15 17:54 tty7
crw--w---- 1 root tty 4, 8 Oct 15 17:54 tty8
crw--w---- 1 root tty 4, 9 Oct 15 17:54 tty9
crw-rw---- 1 root dialout 4, 64 Oct 15 17:54 ttyS0
crw-rw---- 1 root dialout 4, 65 Oct 15 17:54 ttyS1
crw-rw---- 1 root dialout 4, 66 Oct 15 17:54 ttyS2
crw-rw---- 1 root dialout 4, 67 Oct 15 17:54 ttyS3
crw------- 1 root root 10, 239 Oct 15 17:54 uhid
crw------- 1 root root 10, 223 Oct 15 17:54 uinput
crw-rw-rw- 1 root root 1, 9 Oct 15 17:54 urandom
crw------- 1 root root 246, 0 Oct 15 17:54 usbmon0
crw------- 1 root root 246, 1 Oct 15 17:54 usbmon1
crw------- 1 root root 246, 2 Oct 15 17:54 usbmon2
crw-rw---- 1 root tty 7, 0 Oct 15 17:54 vcs
crw-rw---- 1 root tty 7, 1 Oct 15 17:54 vcs1
crw-rw---- 1 root tty 7, 2 Oct 15 17:54 vcs2
crw-rw---- 1 root tty 7, 3 Oct 15 17:54 vcs3
crw-rw---- 1 root tty 7, 4 Oct 15 17:54 vcs4
crw-rw---- 1 root tty 7, 5 Oct 15 17:54 vcs5
crw-rw---- 1 root tty 7, 6 Oct 15 17:54 vcs6
crw-rw---- 1 root tty 7, 128 Oct 15 17:54 vcsa
crw-rw---- 1 root tty 7, 129 Oct 15 17:54 vcsa1
crw-rw---- 1 root tty 7, 130 Oct 15 17:54 vcsa2
crw-rw---- 1 root tty 7, 131 Oct 15 17:54 vcsa3
crw-rw---- 1 root tty 7, 132 Oct 15 17:54 vcsa4
crw-rw---- 1 root tty 7, 133 Oct 15 17:54 vcsa5
crw-rw---- 1 root tty 7, 134 Oct 15 17:54 vcsa6
drwxr-xr-x 2 root root 60 Oct 15 17:54 vfio
crw------- 1 root root 10, 63 Oct 15 17:54 vga_arbiter
crw------- 1 root root 10, 137 Oct 15 17:54 vhci
crw------- 1 root root 10, 238 Oct 15 17:54 vhost-net
crw------- 1 root root 10, 241 Oct 15 17:54 vhost-vsock
crw------- 1 root root 10, 61 Oct 15 17:54 vmci
crw------- 1 root root 10, 59 Oct 15 17:54 vsock
crw-rw-rw- 1 root root 1, 5 Oct 15 17:54 zero
磁盘设备的设备文件命名:
/dev/DEV_FILE
/dev/sdX #SCSI, SATA, SAS, IDE,USB
/dev/nvme0n# #nvme协议硬盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2
虚拟磁盘:
/dev/vdX
/dev/xvdX
不同磁盘标识:a-z,aa,ab…
范例:
[root@rocky8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sr0 11:0 1 9.2G 0 rom
同一设备上的不同分区:1,2, …
/dev/sda1
/dev/sda5
范例:
[root@rocky8 ~]# fdisk /dev/sda -l
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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 #dos 就是MBR分区格式
Disk identifier: 0x43d7507d
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 211814399 209715200 100G 83 Linux
/dev/sda3 211814400 316671999 104857600 50G 83 Linux
/dev/sda4 316672000 419430399 102758400 49G 5 Extended
/dev/sda5 316674048 320868351 4194304 2G 82 Linux swap / Solaris
#* 星号表示活动分区
范例:创建设备文件
[root@rocky8 ~]# df /boot
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1038336 191796 846540 19% /boot
[root@rocky8 ~]# ls /boot
config-4.18.0-305.3.1.el8_4.x86_64 initramfs-4.18.0-305.3.1.el8_4.x86_64kdump.img
efi loader
grub2 System.map-4.18.0-305.3.1.el8_4.x86_64
initramfs-0-rescue-ad9d4d0a9e7a41c6ba47c505d1172547.img vmlinuz-0-rescue-ad9d4d0a9e7a41c6ba47c505d1172547
initramfs-4.18.0-305.3.1.el8_4.x86_64.img vmlinuz-4.18.0-305.3.1.el8_4.x86_64
[root@rocky8 ~]# mknod /data/partition-sda1 b 8 1
[root@rocky8 ~]# ll /data/partition-sda1
brw-r--r-- 1 root root 8, 1 Oct 15 18:24 /data/partition-sda1
[root@rocky8 ~]# mount /data/partition-sda1 /mnt/
[root@rocky8 ~]# ls /mnt
config-4.18.0-305.3.1.el8_4.x86_64 initramfs-4.18.0-305.3.1.el8_4.x86_64kdump.img
efi loader
grub2 System.map-4.18.0-305.3.1.el8_4.x86_64
initramfs-0-rescue-ad9d4d0a9e7a41c6ba47c505d1172547.img vmlinuz-0-rescue-ad9d4d0a9e7a41c6ba47c505d1172547
initramfs-4.18.0-305.3.1.el8_4.x86_64.img vmlinuz-4.18.0-305.3.1.el8_4.x86_64
[root@rocky8 ~]# ll /dev/zero
crw-rw-rw- 1 root root 1, 5 Oct 15 18:20 /dev/zero
[root@rocky8 ~]# mknod /data/zero c 1 5
[root@rocky8 ~]# ll /data/zero
crw-r--r-- 1 root root 1, 5 Oct 15 18:25 /data/zero
1.2 硬盘类型
硬盘接口类型
- IDE:133MB/s,并行接口,早期家用电脑
- SCSI:640MB/s,并行接口,早期服务器
- SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
- SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不成
- USB:480MB/s
- M.2:
注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的
服务器硬盘大小
LFF:3.5寸,一般见到的那种台式机硬盘的大小
SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘
L、S分别是大、小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考内虑增大单位密度内的磁盘容量、增强散热、减小功耗
1.3 机械硬盘和固态硬盘
机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径
方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
相较于SSD,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD
机械硬盘结构
固态硬盘(SSD)
1.4 硬盘存储术语
硬盘存储术语 CHS
- head:磁头 磁头数=盘面数
- track:磁道 磁道=柱面数
- sector:扇区,512bytes
- cylinder:柱面 1柱面=512 * sector数/trackhead数=51263*255=7.84M
CentOS 5 之前版本 Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区
范例:
#查看CHS
[root@centos6 ~]# fdisk -l /dev/sda
Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008a04f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 131 1048576 83 Linux
Partition 1 does not end on cylinder boundary. #提示分区1不是以柱面的边界来划分的
/dev/sda2 131 12910 102645760 83 Linux
/dev/sda3 12910 19437 52428800 83 Linux
/dev/sda4 19437 26109 53591040 5 Extended
/dev/sda5 19437 19698 2097152 82 Linux swap / Solaris
# head 磁头,centos 6上才有
#track 磁道
#sector 扇区
#cylinders 柱面
[root@centos6 ~]# echo "scale=2;512*63*255/1024/1024" |bc
7.84
[root@centos7 ~]# fdisk -l /dev/sda
Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 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: 0x000b65a1
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 211814399 104857600 83 Linux
/dev/sda3 211814400 316671999 52428800 83 Linux
/dev/sda4 316672000 419430399 51379200 5 Extended
/dev/sda5 316674048 320868351 2097152 82 Linux swap / Solaris
#centos 7以上以扇区显示
[root@centos7 ~]# fdisk -u=cylinder -l /dev/sda
Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b65a1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 131 1048576 83 Linux
/dev/sda2 131 13185 104857600 83 Linux
/dev/sda3 13185 19712 52428800 83 Linux
/dev/sda4 19712 26109 51379200 5 Extended
/dev/sda5 19713 19974 2097152 82 Linux swap / Solaris
#-u=cylinder 输入这个参数才显示柱面
[root@rocky8 ~]# fdisk -u=cylinder -l /dev/sda
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Geometry: 255 heads, 2 sectors/track, 26108 cylinders
Units: cylinders of 510 * 512 = 261120 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x43d7507d
Device Boot Start End Cylinders Size Id Type
/dev/sda1 * 5 4117 4113 1G 83 Linux
/dev/sda2 4117 415323 411207 100G 83 Linux
/dev/sda3 415323 620926 205604 50G 83 Linux
/dev/sda4 620926 822413 201488 49G 5 Extended
/dev/sda5 620930 629154 8225 2G 82 Linux swap / Solaris
范例:识别SSD和机械硬盘类型
#1表示机械,0表示SSD
[root@rocky8 ~]# lsblk -d -o name,rota
NAME ROTA
sda 1
sr0 1
nvme0n1 0
[root@rocky8 ~]# ls /sys/block/
nvme0n1 sda sr0
[root@rocky8 ~]# cat /sys/block/*/queue/rotational
0
1
1
[root@rocky8 ~]# cat /sys/block/sda/queue/rotational
1
[root@rocky8 ~]# cat /sys/block/sr0/queue/rotational
1
[root@rocky8 ~]# cat /sys/block/nvme0n1/queue/rotational
0
区位记录磁盘扇区结构ZBR(Zoned Bit Recording)
CHS
- CHS采用 24 bit位寻址
- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
- 最大寻址空间 8 GB
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寻址方式
2.管理存储
使用磁盘空间过程
- 设备分区
- 创建文件系统
- 挂载新的文件系统
2.1 磁盘分区
2.1.1 为什么分区
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
2.1.2 分区方式
两种分区方式:MBR,GPT
2.1.2.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个部分组成
- 主引导程序(偏移地址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结构
范例: 备份MBR的分区表,并破坏后恢复
[root@rocky8 ~]# hexdump -C /dev/sda -n 512 -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 7d 50 d7 43 00 00 80 04 |........}P.C....|
000001c0 01 04 83 fe c2 ff 00 08 00 00 00 00 20 00 00 fe |............ ...|
000001d0 c2 ff 83 fe c2 ff 00 08 20 00 00 00 80 0c 00 fe |........ .......|
000001e0 c2 ff 83 fe c2 ff 00 08 a0 0c 00 00 40 06 00 fe |............@...|
000001f0 c2 ff 05 fe c2 ff 00 08 e0 12 00 f8 1f 06 55 aa |..............U.|
00000200
#查看磁盘的前512字节
#80 04 000001c0 01 04 83 fe c2 ff 00 08 00 00 00 00 20 00 第一个分区信息
#00 fe 000001d0 c2 ff 83 fe c2 ff 00 08 20 00 00 00 80 0c 第二个分区信息
#00 fe 000001e0 c2 ff 83 fe c2 ff 00 08 a0 0c 00 00 40 06 第三个分区信息
#00 fe 000001f0 c2 ff 05 fe c2 ff 00 08 e0 12 00 f8 1f 06 第四个分区信息
#备份MBR分区表
[root@rocky8 ~]# dd if=/dev/sda of=/data/mbr bs=1 count=64 skip=446
64+0 records in
64+0 records out
64 bytes copied, 0.000170499 s, 375 kB/s
#备份磁盘分区表 skip 相对于if=/dev/sda 跳过446字节,备份64字节
[root@rocky8 ~]# hexdump -C /data/mbr -v
00000000 80 04 01 04 83 fe c2 ff 00 08 00 00 00 00 20 00 |.............. .|
00000010 00 fe c2 ff 83 fe c2 ff 00 08 20 00 00 00 80 0c |.......... .....|
00000020 00 fe c2 ff 83 fe c2 ff 00 08 a0 0c 00 00 40 06 |..............@.|
00000030 00 fe c2 ff 05 fe c2 ff 00 08 e0 12 00 f8 1f 06 |................|
00000040
#破坏MBR分区表
[root@rocky8 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
64+0 records in
64+0 records out
64 bytes copied, 0.000139151 s, 460 kB/s
#破坏分区表 ,seek 相对于of=/dev/sda 跳过446字节,写入 64字节
[root@rocky8 ~]# hexdump -C /dev/sda -n 512 -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 7d 50 d7 43 00 00 00 00 |........}P.C....|
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
#现在分区表信息,已经是0了
[root@rocky8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sr0 11:0 1 9.2G 0 rom
nvme0n1 259:0 0 10G 0 disk
[root@rocky8 ~]# fdisk -l
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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: 0x43d7507d
Disk /dev/nvme0n1: 10 GiB, 10737418240 bytes, 20971520 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@rocky8 ~]# scp /data/mbr 172.31.0.7:/data
The authenticity of host '172.31.0.7 (172.31.0.7)' can't be established.
ECDSA key fingerprint is SHA256:zb/8mo/ptS0h8eHVY1FDRuvh6aQj1opzpsD7khnYjSo.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.31.0.7' (ECDSA) to the list of known hosts.
root@172.31.0.7's password:
mbr 100% 64 31.4KB/s 00:00
#把分区表信息备份到另一台机器上
#无法启动
[root@rocky8 ~]# reboot
#系统已经不能启动了
#用光盘启动,进入rescue mode,选第3项skip to shell
#提示没有任何分区,重启,回车得到一个shell
#现在看不到磁盘信息
#现在没有IP地址
#添加一个IP地址
# ip a a 172.31.1.8/21 dev ens33
#把备份在10.0.0.7上的文件,拷贝到本地
# scp 172.31.0.7:/data/mbr .
#现在文件已经拷贝过来了
#可以看到分区表信息都是0
#恢复分区表信息
# dd if=mbr of=/dev/sda bs=1 count=64 seek=446
#现在分区表信息已经恢复
# hexdump -C /dev/sda -n 512 -v
#把信息写入磁盘,并重启
#现在系统就能正常启动了
问题:利用分区策略相同的另一台主机的分区表来还原和恢复当前主机破环的分区表?
2.1.2.2 GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
GPT分区结构
GPT分区结构分为4个区域:
- GPT头
- 分区表
- GPT分区
- 备份区域
2.1.3 BIOS和UEFI
BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是UEFI启动
BIOS(Basic Input Output System 基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的“滴滴”音,可以简单的判断硬件故障,比如“1长1短”通常表示内存故障,“1长3短”通常表示显卡故障
BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BIOS本身使用。BIOS只能识别到主引导记录(MBR)初始化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了
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
MSDN(Microsoft Developer Network)指出,Windows 只能安装于 BIOS + MBR 或是 UEFI + GPT 的组合上,而 BIOS + GPT 和 UEFI + MBR 是不允许的。但是 BIOS + GPT + GRUB 启动Linux 是可以的