31.第九章 磁盘存储和文件系统管理(一)

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 硬盘类型

31.第九章 磁盘存储和文件系统管理(一)
硬盘接口类型

  • 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

机械硬盘结构
31.第九章 磁盘存储和文件系统管理(一)
固态硬盘(SSD)
31.第九章 磁盘存储和文件系统管理(一)

1.4 硬盘存储术语

31.第九章 磁盘存储和文件系统管理(一)
硬盘存储术语 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

31.第九章 磁盘存储和文件系统管理(一)

区位记录磁盘扇区结构ZBR(Zoned Bit Recording)
31.第九章 磁盘存储和文件系统管理(一)

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.管理存储

使用磁盘空间过程

  1. 设备分区
  2. 创建文件系统
  3. 挂载新的文件系统

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分区结构

31.第九章 磁盘存储和文件系统管理(一)
硬盘主引导记录MBR由4个部分组成
31.第九章 磁盘存储和文件系统管理(一)

  • 主引导程序(偏移地址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结构
31.第九章 磁盘存储和文件系统管理(一)
范例: 备份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

31.第九章 磁盘存储和文件系统管理(一)
#系统已经不能启动了

#用光盘启动,进入rescue mode,选第3项skip to shell

31.第九章 磁盘存储和文件系统管理(一)

31.第九章 磁盘存储和文件系统管理(一)
#提示没有任何分区,重启,回车得到一个shell

31.第九章 磁盘存储和文件系统管理(一)
#现在看不到磁盘信息

31.第九章 磁盘存储和文件系统管理(一)
#现在没有IP地址

31.第九章 磁盘存储和文件系统管理(一)
#添加一个IP地址

# ip a a 172.31.1.8/21 dev ens33

31.第九章 磁盘存储和文件系统管理(一)
#把备份在10.0.0.7上的文件,拷贝到本地

# scp 172.31.0.7:/data/mbr .

31.第九章 磁盘存储和文件系统管理(一)
#现在文件已经拷贝过来了

31.第九章 磁盘存储和文件系统管理(一)
#可以看到分区表信息都是0

31.第九章 磁盘存储和文件系统管理(一)
#恢复分区表信息

# dd if=mbr of=/dev/sda bs=1 count=64 seek=446

31.第九章 磁盘存储和文件系统管理(一)
#现在分区表信息已经恢复

# hexdump -C /dev/sda -n 512 -v

31.第九章 磁盘存储和文件系统管理(一)
#把信息写入磁盘,并重启

31.第九章 磁盘存储和文件系统管理(一)
#现在系统就能正常启动了

问题:利用分区策略相同的另一台主机的分区表来还原和恢复当前主机破环的分区表?

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分区结构
31.第九章 磁盘存储和文件系统管理(一)
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

31.第九章 磁盘存储和文件系统管理(一)
MSDN(Microsoft Developer Network)指出,Windows 只能安装于 BIOS + MBR 或是 UEFI + GPT 的组合上,而 BIOS + GPT 和 UEFI + MBR 是不允许的。但是 BIOS + GPT + GRUB 启动Linux 是可以的

上一篇:智力推理数量


下一篇:国内最大个人信息泄露案,54亿条数据泄露