第十二章 硬盘介绍和磁盘管理

(上课时间2021-07-03,笔记整理时间2021-07-13)

本节所讲内容:

12.1 SAS-SATA-SSD-SCSI-IDE 硬盘讲解

12.2 磁盘分区工具和挂载

12.3 实战扩展 swap 分区

12.1 SAS-SATA-SSD-SCSI-IDE 硬盘讲解

12.1.1 常见磁盘类型

SAS 硬盘

SATA 硬盘

SSD 硬盘

SCSI 硬盘

IDE 硬盘

你的服务器使用什么磁盘?

SAS 硬盘:

SAS(串行连接 SCSI 接口)

SAS(Serial Attached SCSI),串行连接 SCSI 接口,串行连接小型计算机系统接口。

SAS 是新一代的 SCSI 技术,和现在流行的 Serial ATA(SATA)硬盘相同,都是采用串行技术以获得

更高的传输速度,并通过缩短连结线改善内部空间等。

SAS 的接口技术可以向下兼容 SATA。(技术兼容但是磁盘接口未必一致)

image-20210704183918024

image-20210704184039701

SATA与SAS 对比

image-20210713153535311

磁盘尺寸:

3.5 英寸设计

2.5 英寸设计

此前主流的桌面磁盘和服务器磁盘都是采用 3.5 英寸设计,而 SAS 硬盘除了具有传统的 3.5 英寸规格之外,还采用了 2.5 英寸的缩小版,这样可以在机架式服务器有限的空间内安装更多的磁盘以扩充存储系统的容量,也能够为其他配件腾出更大的空间,以便通风散热,在 2U 高度内使用 8 个 2.5 英寸的SAS 硬盘位已经成为大多数服务器厂商的选择。(1U=4.445cm)

已经被淘汰的硬盘:

image-20210713153748136

image-20210704184513960

数据线和电源接口,串型和并型 哪个快?

并口为什么没有串口快? 知道:1 不知道:2

串口形容一下就是 一条车道,而并口就是有 8 个车道。同一时刻能传送 8 位(一个字节)数据。

但是并不是并口快,由于 8 位通道之间的互相干扰。传输速度就受到了限制。当传输出错时,要同时重新传 8 个位的数据,而且传输速度越快,干扰越严重。这是硬伤,这样速度就无法提升上来。

串口没有干扰,传输出错后重发一位就可以了。而且串口传输的时钟频率要比并口高。

12.1.2 当下流行的磁盘种类

常见硬盘品牌:希捷 西数 日立 HP DELL EMC IBM

硬盘分几种?

从工作原理来说:

固态:价格相对贵,寿命长,读取速度快

机械:怕摔、怕磁,(单位换下来的坏盘会做消磁处理),读取速度---》磁道寻址时间

从硬盘的接口来说

STAT:用在低端服务器多

SAS、SSD:用在中高服务器

对 LINUX 来说,在内核中,不同的接口对应有不同的命名方式:

操作系统 IDE SATA|SCSI SAS
RHEL5 /dev/hda /dev/sda /dev/sda
REHL5 /dev/sda /dev/sda /dev/sda
KVM /dev/vda

假 SAS= SATA 盘身+ SAS 接口(热插拔)

硬盘: 容量大 + 便宜 符合市场需求!

提速度:假 SAS 做 raid5 raid10 ,做分布式存储 MFS ,HDFS,GFS, swift ,ceph

存储会放到机柜的下面,稳 , 换硬盘方便,布线方便。

12.2 磁盘分区工具和挂载

12.2.1 硬盘分区符认识

MBR 概述:全称为 Master Boot Record,即硬盘的主引导记录。

硬盘的 0 柱面、0 磁头、1 扇区称为主引导扇区(也叫主引导记录 MBR)。它由三个部分组成,主引导程序、硬盘分区表 DPT(Disk Partition table)和分区有效标志(55AA)。在总共 512 字节的主引导扇区里主引导程序(boot loader)占 446 个字节,第二部分是 Partition table 区(分区表),即DPT,占 64 个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是 magic number,占 2 个字节,固定为 55AA。

分区编号:主分区 1-4 ,逻辑分区 5……

LINUX 规定:逻辑分区必须建立在扩展分区之上,而不是建立在主分区上

分区作用:

主分区:主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot 分区最好放在主分区上

扩展分区不能使用的,它只是做为逻辑分区的容器存在的;我们真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中

如果你用的是 GPT 的分区方式,那么它没有限制主分区个数

注意:使用分区工具 fdisk 对磁盘进行操作,分区,格式化(重点)

[root@Centos83 ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2

命名方式: /dev/sd[a-z]n

其中:a-z 表示设备的序号,如 sda 表示第一块 scsi 硬盘,sdb 就是第二块......

n 表示每块磁盘上划分的磁盘分区编号

image-20210704185957179

注:第 26 磁盘:sdz 第 27 块磁盘:sdaa 第 28 块磁盘:sdab

12.2.2 使用 fdisk 管理分区

fdisk:磁盘分区,是 Linux 发行版本中最常用的分区工具

用法:fdisk [选项] device

常用的选项 : -l 查看硬盘分区表

案例:在 sdb 盘上建一个分区,大小为 1G

在虚拟机上添加一块硬盘

[root@Centos83 ~]# fdisk /dev/sdb
...
Command (m for help): m
Command action
 a toggle a bootable flag
 b edit bsd disklabel
 c toggle the dos compatibility flag
 d delete a partition 删除分区
 g create a new empty GPT partition table
 G create an IRIX (SGI) partition table
 l list known partition types 显示分区类型
 m print this menu 打印帮助菜单
 n add a new partition 添加新的分区
 o create a new empty DOS partition table
 p print the partition table 显示分区表
 q quit without saving changes 不保存,退出
 s create a new empty Sun disklabel
 t change a partition's system id 改变分区类型
 u change display/entry units
 v verify the partition table
 w write table to disk and exit 写分区表信息到硬盘,保存操作并退出
 x extra functionality (experts only)
Command (m for help): p -----打印分区表
Command (m for help): n ----新建一个分区
Partition type:
 p primary (2 primary, 0 extended, 2 free) p:主分区
 e extended e:扩展分区
 Select (default p): --									#直接默认
Using default response p
Partition number (1,4, default 1): ---					#直接默认
First sector (1230848-41943039, default 1230848): ---	#直接默认
Using default value 1230848
Last sector, +sectors or +size{K,M,G} (1230848-41943039, default 41943039): +1G 
														#输入分区大小
Partition 3 of type Linux and of size 1 GiB is set
Command (m for help): w 								#保存退出

[root@Centos83 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1

:在 centos8 下不需要执行以下命令,分区后立即生效的, 在 centos7 下,需要执行以下命令来 解决,让新生成的分区生效:

[root@Centos83 ~]# reboot 						#这个是最好的方法
[root@Centos83 ~]# partx -a /dev/sda 			#获得新分区表

使用sdb1新分区:

[root@Centos83 ~]# mkfs.xfs /dev/sdb1	#格式化,-f 对已经存在文件系统的分区,强制格式化
[root@Centos83 ~]# mkidr /sdb1					#创建挂载点
[root@Centos83 ~]# mount /dev/sdb1 /sdb1/		#挂载
[root@Centos83 ~]# df -h						#查看
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             441M     0  441M    0% /dev
tmpfs                471M     0  471M    0% /dev/shm
tmpfs                471M  7.0M  464M    2% /run
tmpfs                471M     0  471M    0% /sys/fs/cgroup
/dev/mapper/cl-root   95G  8.8G   87G   10% /
/dev/sr0             8.7G  8.7G     0  100% /mnt
/dev/sda1           1014M  221M  794M   22% /boot
tmpfs                 95M     0   95M    0% /run/user/0
/dev/sdb1           1014M   40M  975M    4% /sdb1

注:umount 挂载点 //卸载方式 1 或 umount 设备路径 //卸载方式 2

[root@Centos83 ~]# vim /etc/fstab				# 在文件最后写入
/dev/sdb1 /sdb1 xfs defaults 0 0
注释:
/dev/sdb1 	    /sdb1   xfs          defaults      0      0
要挂载的分区设备   挂载点   文件系统类型    挂载选项     是否备份 是否检测

使用 UUID 挂载

[root@Centos83 ~]# blkid
/dev/sdb1: UUID="6b0eda6c-8199-4269-83ac-c925b326d981" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="ee16ad72-01"
[root@Centos83 ~]# echo "UUID=6b0eda6c-8199-4269-83ac-c925b326d981 /sdb1 xfs defaults 0 0 " >> /etc/fstab

使用 uuid 的好处就是不会出错,如果我挂 5 快盘,顺序换了,或者 2 块盘,拔掉一块,插上一块,那么 sdb1 就变了,uuid 则是全世界唯一,不会重复不会出错。

扩展:了解

/dev/sdb1 /sdb1 xfs defaults 0 0

要挂载的分区设备 挂载点 文件系统类型 挂载选项 是否备份 是否检测

第四列:parameters-文件系统的参数

Async/sync 设置是否为同步方式运行,默认为 async

auto/noauto 当执行 mount -a 的命令时,此文件系统是否被主动挂载。默认为 auto

rw/ro 是否以以只读或者读写模式挂载

exec/noexe 限制此文件系统内是否能够进行"执行"的操作

user/nouser 是否允许用户使用 mount 命令挂载

suid/nosuid 是否允许 SUID 的存在

Usrquota 启动文件系统支持磁盘配额模式

Grpquota 启动文件系统对群组磁盘配额模式的支持

Defaults 同时具有 rw,suid,dev,exec,auto,nouser,async 等默认参数的设置 samba nfs

第五列:是否进行备份。通常这个参数的值为 0 或者 1

0 代表不要做备份

1 代表要每天进行操作

2 代表不定日期的进行操作

第六列:是否检验扇区:开机的过程中,系统默认会以 fsck 检验我们系统是否为完整

0 不要检验

1 最早检验(一般根目录会选择)

2 1 级别检验完成之后进行检验

12.2.3 gdisk 磁盘分区工具

gdisk 主要是用来划分容量大于 2T 的硬盘,大于 2T fdisk 搞不定

两种类型的分区表:GPT 和 MBR ; MBR 分区最多支持 2TB

GPT 分区:GPT,全局唯一标识分区表(GUID Partition Table),它使用 128 位 GUID 来唯一标识每个磁盘和分区,与 MBR 存在单一故障点不同,GPT 提供分区表信息的冗余,一个在磁盘头部一个在磁盘尾部;它通过 CRC 校验和来检测 GPT 头和分区表中的错误与损坏;默认一个硬盘支持 128 个分区

对 sdb 做 gpt 分区,创建一个 sdb1

[root@Centos83 ~]# yum -y install gdisk
[root@Centos83 ~]# gdisk /dev/sdb
。。。
Command (? for help): ? # 查看帮助
b back up GPT data to a file
c change a partition's name 
d delete a partition #删除分区
ishow detailed information on a partition
llist known partition types
n add a new partition # 添加一个分区
o create a new empty GUID partition table (GPT)
p print the partition table # 打印分区表
q quit without saving changes # 退出不保存
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit # # 写入分区表并退出
x extra functionality (experts only)
? print this menu
Command (? for help): n #新建分区表
Partition number (1-128, default 1): #直接回车
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
#直接回车, 从头开始划分空间
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G 
#分配 1G 空间
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
#分区类型默认即可
注:8300 Linux filesystem ;8e00 Linux LVM 想查看,可以按 L 来显示
Changed type of partition to 'Linux filesystem'
Command (? for help): p #查看
。。。
Number Start (sector) End (sector) Size Code Name
 1 2048 2099199 1024.0 MiB 8300 Linux filesystem
Command (? for help): w #保存
Do you want to proceed? (Y/N): y #确定写入
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

[root@Centos83 ~]# mkfs.xfs /dev/sdb1 #格式化

修改 fstab 重启系统后,系统报错:

把sdb1挂载故意写错:

image-20210713151517058

重启后报错:

image-20210713150337855

输入 root 密码: root

把 fstab 中新添加开机自动加载项目删除:

image-20210713150806617

然后 reboot

12.3 实战扩展 swap 分区

12.3.1 把硬盘空间中的一部分空间释放出来当内存使用

Swap 分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。

mkswap /devices (格式化成 swap 格式)

swapon /swap (激活/swap,加入到 swap 分区中)

vim /etc/fstab (开机自启动新添加的 swap 分区) ,在最后追加:

/devices swap swap defaults 0 0

如果不想使用需要删除,只需要执行#swapoff /swap

创建分区

[root@Centos83 ~]# gdisk /dev/sdb
……
Command (? for help): n					#新建分区
Partition number (2-128, default 2): 	#回车
First sector (34-41943006, default = 2099200) or {+-}size{KMGTP}: 
Last sector (2099200-41943006, default = 41943006) or {+-}size{KMGTP}: +5G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 	#回车
Changed type of partition to 'Linux filesystem'

Command (? for help): w					#保存

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y			
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully

#格式化 swap
[root@Centos83 ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2
[root@Centos83 ~]# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 5 GiB (5368705024  个字节)
无标签,UUID=e6dd3f39-497c-4b43-80c3-aaf91c13355e

[root@Centos83 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            941         273         347           6         320         512
Swap:          4095           0        4095
[root@Centos83 ~]# swapon /dev/sdb2			# 开启
[root@Centos83 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            941         277         343           6         320         508
Swap:          9215           0        9215
[root@Centos83 ~]# swapoff /dev/sdb2		#关闭
[root@Centos83 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            941         273         347           6         320         512
Swap:          4095           0        4095
[root@Centos83 ~]# swapon /dev/sdb2
[root@Centos83 ~]# swapon -s				#查看
文件名				类型		大小	已用	权限
/dev/dm-1                              	partition	4194300	0	-2
/dev/sdb2                              	partition	5242876	0	-3

12.3.2 通过文件增加 SWAP 空间

[root@Centos83 ~]# dd if=/dev/zero of=swap_file bs=1M count=600
记录了600+0 的读入
记录了600+0 的写出
629145600 bytes (629 MB, 600 MiB) copied, 5.21921 s, 121 MB/s
[root@Centos83 ~]# ll /root/swap_file 
-rw-r--r-- 1 root root 629145600 7月  13 15:29 /root/swap_file
[root@Centos83 ~]# chmod 0600 /root/swap_file 
[root@Centos83 ~]# mkswap -f /root/swap_file 
正在设置交换空间版本 1,大小 = 600 MiB (629141504  个字节)
无标签,UUID=d173331b-c767-4744-93be-6a18da27d51a
[root@Centos83 ~]# swapon /root/swap_file
[root@Centos83 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            941         277          71           5         593         511
Swap:          9815           1        9814

总结:

12.1 SAS-SATA-SSD-SCSI-IDE 硬盘讲解

12.2 磁盘分区工具和挂载

12.3 实战扩展 swap 分区