一、前言

本文通过以下几个方面介绍Linux管理体系中磁盘管理:

  • 磁盘基础
  • RAID和磁盘冗余
  • 物理机使用全流程
  • 磁盘分区
  • swap
  • 企业分区方案
  • 磁盘管理常用故障案例
  • 文件系统
  • 磁盘性能指标

二、磁盘基础

2.1 什么是硬盘

硬盘是计算机中用于存储数据的设备,它通常由一个或多个磁盘盘片组成,数据通过磁性记录在这些盘片上。硬盘的容量通常以GB(千兆字节)或TB(千兆字节)来表示,可容纳大量数据。

2.2 硬盘分类

运行方式与原理 详细信息
机械硬盘(HDD) 电机带动磁盘高速旋转,读取数据.速度可以达到5400,7200 rpm(每分钟多少转)(家用)
固态硬盘(SSD) 集成电路与芯片,存储芯片

2.3 接口分类

接口分类 说明
SATA 一般家用,一般用于机械硬盘,也有固态硬盘,容量大,价格较低
SAS 给企业环境使用,一般用于机械硬盘,也有固态硬盘
PCI-E 企业级使用,固态硬盘用
U.2 企业级固态硬盘使用。PCI-E类似

2.4 磁盘选型

磁盘选型 应用建议
一般情况下,数据备份 SATA硬盘,10k rpm 4tb,8tb存放备份
网站服务器使用 SAS接口 15k rpm 300G 600G 900G
高并发网站服务器 可以选择固态硬盘PCI-E,SAS,SATA

说明:rpm是 round per minute 每分钟多少转的意思

2.5 机械 VS 固态

硬盘分类 性价比 稳定 速度 数据安全 寿命
机械 容量大价格低 抗击打能力弱 读写速度稍慢io 数据恢复容易 无限
固态 容量小价格高 抗击打能力高 读写速度很快io 数据恢复难 1-2w次

2.6 磁盘内部结构

机械硬盘内部组成:

机械硬盘内部 说明
盘片 实际存放数据地方
磁头 贴近盘片,读写数据
磁道 磁盘中的圆环形区域,从0开始
扇区 磁盘上最小存储单位,默认512字节
柱面 不同盘面上相同的磁道组成的形状

三、RAID和磁盘冗余

3.1 什么是RAID

RAID,即冗余阵列独立磁盘(Redundant Array of Independent Disks),是一种磁盘存储技术,旨在提高数据冗余性、可用性和/或性能。

3.2 RAID特点

根据用户所设置的Raid级别可以获取如下一个或多个特点:

  • 可以获取更高的容量
  • 可以获取更高的性能
  • 可以获取更高的冗余(安全)

3.3 RAID级别

RAID级别 最少需要几块硬盘 安全冗余 可用容量 性能 使用场景 举例
RAID 0 1 最低 所有硬盘容量的和 读写最快 不要求安全,只要求速度 数据库从库;存储从库;web服务器
RAID 1 只能有2块 100% 一半(两块硬盘容量之和) 写入速度慢,读取OK 只追求安全性,对于速度没要求 系统盘;监控服务器
RAID 5 3 最多损坏1块 损失一块盘的容量 写入性能不好,读取速度OK 对于速度安全对于速度要求不高 普遍数据库,存储访问量不高
RAID 10 4 可以损坏一半 损失所有硬盘一半的容量 读写很快 对于安全和性能都要 高并发或高访问量数据库主库,存储

四、物理机使用全流程

4.1 物理服务器分类

1、机架式服务器

2、塔式服务器

3、刀片式服务器

4.2 新的服务器配置流程

1、拆包装

2、插电、联网

3、开机

4、配置远程控制卡

5、配置raid(raid卡实现)系统raid1剩余raid5

6、安装系统(U盘安装) 如果大量服务器装机,可以通过cobbler批量装机

7、正常安装系统即可

8、根据要求部署服务

9、关闭

10、物理服务器上架(物理服务器放在机柜上过程)

五、磁盘分区

5.1 主要概念

5.1.1 主分区

主分区,也称为主磁盘分区,是一种分区类型。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。早期MBR模式分区只能划分四个分区,现在的GPT分区至少可以划分128个主分区,未来很有可能将不存在扩展分区和逻辑分区的概念。其中,主分区与扩展分区最多可以有4个。

5.1.2 扩展分区

扩展分区就是除主分区外的分区,可以使用额外的扇区来记录分区信息,扩展分区本身并不能用于格式化。其中,扩展分区最多只能有1个。

5.1.3 逻辑分区

由扩展分区持续划分出来的分区。

5.1.4 MBR和GPT

MBR(Master Boot Record)和 GPT(GUID Partition Table)是两种不同的磁盘分区方案,用于管理计算机硬盘驱动器上的分区和引导信息。它们在磁盘管理和操作系统兼容性方面有重要的区别。

MBR(Master Boot Record):

  • 容量限制:MBR 支持的磁盘容量有限,最大为2.2TB(2^32个扇区)。这是因为 MBR 使用 32 位的扇区寻址方式。

  • 分区限制:MBR 支持最多4个主分区,或者3个主分区和1个扩展分区。扩展分区可以包含多个逻辑分区。

  • 引导方式:MBR 通过位于其引导扇区的引导代码来启动操作系统。这个引导代码通常被称为"Master Boot Record"。

  • 兼容性:MBR 在较早的计算机和操作系统上广泛使用。然而,它的容量和分区限制逐渐成为了限制因素,特别是在大容量硬盘上和支持UEFI(统一扩展固件接口)的现代计算机上。

  • 位置:磁盘分区表 磁盘的开始部分:0磁头,0磁道,1扇区(512字节)

GPT(GUID Partition Table):

  • 容量支持:GPT 具有更大的磁盘容量支持,可以处理超过2.2TB的硬盘。这是因为 GPT 使用 64 位的扇区寻址方式。

  • 分区数目:GPT 支持最多128个分区。这包括主分区和逻辑分区,因此 GPT 允许更多的分区灵活性。

  • 引导方式:GPT 使用 UEFI 来引导操作系统,而不再依赖于传统的 MBR 引导方式。这提供了更先进的引导和系统启动功能。

  • 兼容性:GPT 是一种较新的标准,因此在支持 UEFI 的现代计算机和操作系统中更为常见。它特别适用于大容量硬盘和需要更多分区的情况。

总之,MBR 和 GPT 是两种不同的磁盘分区方案,它们在硬盘容量支持、分区数目、引导方式和兼容性方面存在重要区别。选择哪种分区方案应该取决于你的特定需求和你使用的计算机硬件和操作系统。在现代计算机中,GPT 成为了更常见的选择,特别是在需要大容量硬盘和更多分区的情况下。

5.2 MBR主分区表

MBR分区表

这些分区概念,分区使用MBR形式,主分区+扩展分区最多4个(扩展分区只能1个),扩展分区用于创 建逻辑分区。 未来使用基本就是创建主分区就够了,安装系统的时候自动创建主分区,创建扩展分区,创建逻辑分区 即可。

5.3 磁盘及分区命名

磁盘文件或分区文件放在/dev/下面,命名方式如下:

5.3.1 硬盘命名

磁盘接口

sas/sata/scsi接口的硬盘,硬盘名字是以sd开头

虚拟机(kvm)/公有云: 硬盘名字是以vd开头

第几块硬盘

通过字母表示从字母a开始一次类推,比如第一块硬盘叫/dev/sda,第二块硬盘叫/dev/sdb,第三块硬盘叫/dev/sdc...

5.3.2 分区命名

分区命名是根据分区类型进行命名的,如果是主分区或者扩展分区则分区号从1-4范围。如果是逻辑分区,逻辑分区的分区号从5开始。

5.3.3 硬盘及分区命名

第2块SATA硬盘的第1个主分区 /dev/sdb1

第3块SAS硬盘的第2个逻辑分区 /dev/sdc6

第5块公有云的云盘的第3个主分区 /dev/vde3

5.4 磁盘分区涉及文件

5.4.1 /etc/fstab

/etc/fstab(File System Table)是在类Unix操作系统中用于配置文件系统挂载的重要配置文件。它包含了操作系统在引导时自动挂载的文件系统信息,以及有关挂载选项的设置。这个文件通常只能由具有管理员权限的用户(通常是超级用户或root用户)进行编辑。

/etc/fstab每一列含义:

第1列 第2列 第3列 第4列 第5列 第6列
设备名字/dev/sdb1或UUID形式 挂载点 文件系统类型: xfs,ext4,swap 一般是defaults, 挂载选项 是否备份 是否检查
设备名字:/dev/sdb1 /data/ xfs defaults 0 0
UUID形式:UUID=cba1c7d7-d92c-4199-af28-4e049a75fd8f

5.4.2 /etc/rc.local

/etc/rc.local 是一个在类Unix操作系统中常见的启动脚本文件,它用于在系统引导时执行自定义命令或脚本。这个文件通常包含了一系列用户定义的命令,这些命令会在系统引导过程中自动运行。

我们可以将挂载命令加入此配置文件中,从而实现永久挂载。

5.5 磁盘分区实战

磁盘分区一般有两种方式:MBR和GPT。

分区表 特点 对应命令
mbr 支持2tb以内的硬盘,大于2tb则只识别2tb. 区别主分区,扩展分区,逻辑分区。分区时输入w才能生效 fdisk/parted
gpt 支持大容量硬盘,主分区无限使用(100多个) ,分区时实时生效 gdisk/parted

5.5.1 MBR分区

5.5.1.1 检查磁盘分区状态

1、执行ls /dev/sd*命令查看所有磁盘。

[root@localhost test]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb

2、执行lsblk命令列出所有存储设备。

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    2G  0 part /boot
└─sda2            8:2    0   18G  0 part 
  ├─centos-root 253:0    0   16G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  9.5G  0 rom  /run/media/test/CentOS 7 x86_64

3、执行fdisk -l /dev/sdb命令查看分区状态。观察到/dev/sdb未被分区。

[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 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

5.5.1.2 开始分区

创建主分区 1、执行fdisk /dev/sdb命令将磁盘sdb进行分区。

[root@localhost ~]# fdisk /dev/sdb
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.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x3649a7f1.

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)

针对以上选项进行描述:

选项 选项含义
a 切换可启动标志
b 编辑磁盘标签
c 切换 dos 兼容标志
d 删除一个磁盘分区
g 创建一个新的空 GPT 分区表
G 创建一个 IRIX (SGI)分区表
l 列出已知的分区类型
m 打印这个菜单
n 新增一个磁盘分区
o 创建一个新的空 DOS 分区表
p 屏幕上显示分区表
q 不保存且退出fdisk程序
s 创建一个新的空 Sun 磁盘标签
t 更改分区的系统 ID
u 更改显示/输入单元
v 验证分区表
w 将表写入磁盘并退出
w 额外功能(只限专家)

2、输入【n】,新增一个磁盘分区。

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended

3、输入【p】,输入分区号【1】,起始扇区位置为【2048】,分配大小为【+10G】。

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set

4、主分区已创建完成,大小10G。输入【p】查看分区是否成功。

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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
Disk label type: dos
Disk identifier: 0x3649a7f1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

创建扩展分区 1、输入【n】新建分区。

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended

2、输入【e】,选择扩展分区。

Select (default p): e

3、输入【2】,选择分区号为2。

Partition number (2-4, default 2): 2

4、起始扇区位置和分配大小为默认,即直接回车即可。

First sector (20973568-41943039, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): 
Using default value 41943039
Partition 2 of type Extended and of size 10 GiB is set

5、扩展分区创建完成,输入【p】进行查看。

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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
Disk label type: dos
Disk identifier: 0x3649a7f1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736    5  Extended

创建逻辑分区1 1、输入【n】新建分区。

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)

2、输入【l】,选择逻辑分区。

Select (default p): l
Adding logical partition 5

3、起始扇区位置为默认,即直接回车即可;分配大小为【+5G】。

First sector (20975616-41943039, default 20975616): 
Using default value 20975616
Last sector, +sectors or +size{K,M,G} (20975616-41943039, default 41943039): +5G
Partition 5 of type Linux and of size 5 GiB is set

创建逻辑分区2 1、输入【n】新建分区。

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)

2、输入【l】,选择逻辑分区。

Select (default p): l
Adding logical partition 6

3、起始扇区位置、分配大小为默认,即直接回车即可。

First sector (31463424-41943039, default 31463424): 
Using default value 31463424
Last sector, +sectors or +size{K,M,G} (31463424-41943039, default 41943039): 
Using default value 41943039
Partition 6 of type Linux and of size 5 GiB is set

4、逻辑分区已创建完成,输入【p】进行查看。

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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
Disk label type: dos
Disk identifier: 0x3649a7f1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736    5  Extended
/dev/sdb5        20975616    31461375     5242880   83  Linux
/dev/sdb6        31463424    41943039     5239808   83  Linux

5、输入【w】进行分区配置保存。

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

Calling ioctl() to re-read partition table.
Syncing disks.

6、执行fdisk -l /dev/sdb命令查看分区状态。这里注意逻辑分区只能是从5开头(sdb5),因为主分区和扩展分区最多4个。

[root@localhost test]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 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
Disk label type: dos
Disk identifier: 0x3649a7f1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736    5  Extended
/dev/sdb5        20975616    31461375     5242880   83  Linux
/dev/sdb6        31463424    41943039     5239808   83  Linux

5.5.1.3 格式化分区

格式化主分区 1、执行mkfs.xfs /dev/sdb1命令格式化主分区

[root@localhost test]# mkfs.xfs /dev/sdb1

说明:如果重复格式化失败,可以选择-f参数进行强制格式化

格式化逻辑分区 1、执行mkfs.xfs /dev/sdb5命令格式化逻辑分区1

[root@localhost test]# mkfs.xfs /dev/sdb5

2、执行mkfs.xfs /dev/sdb6命令格式化逻辑分区2

[root@localhost test]# mkfs.xfs /dev/sdb6

说明:如果重复格式化失败,可以选择-f参数进行强制格式化

5.5.1.4 挂载

临时挂载

1、执行mkdir -p命令创建data/usb1、data/usb2、data/usb3作为挂载点。

[root@localhost ~]# mkdir -p data/usb1
[root@localhost ~]# mkdir -p data/usb2
[root@localhost ~]# mkdir -p data/usb3

2、执行mount命令临时挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# mount /dev/sdb1 data/usb1
[root@localhost ~]# mount /dev/sdb5 data/usb2
[root@localhost ~]# mount /dev/sdb6 data/usb3

3、执行mount命令查看挂载是否成功。

[root@localhost ~]# mount
/dev/sdb1 on /root/data/usb1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb5 on /root/data/usb2 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb6 on /root/data/usb3 type xfs (rw,relatime,attr2,inode64,noquota)

取消临时挂载 1、执行umount命令取消挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# umount data/usb1 data/usb2 data/usb3 

永久挂载1-/etc/fstab

1、执行blkid命令查看文件系统的UUID。

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="232e1a5f-65d2-4509-b446-99be7c2d6293" TYPE="xfs" 
[root@localhost ~]# blkid /dev/sdb5
/dev/sdb5: UUID="f5c69e75-436e-4e77-9093-ff67179c955e" TYPE="xfs" 
[root@localhost ~]# blkid /dev/sdb6
/dev/sdb6: UUID="6b5d4060-bca2-49c0-b23d-457cc144f734" TYPE="xfs" 

2、执行vi /etc/fstab命令打开/etc目录下的fstab文件,填写以下内容。

UUID="232e1a5f-65d2-4509-b446-99be7c2d6293"  /root/data/usb1 xfs defaults 0 0
UUID="f5c69e75-436e-4e77-9093-ff67179c955e" /root/data/usb2 xfs defaults 0 0
UUID="6b5d4060-bca2-49c0-b23d-457cc144f734" /root/data/usb3 xfs defaults 0 0

其中内容格式为

[UUID] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
dump-能否被dump备份命令作用
fsck-是否以fsck检验扇区

3、执行mount -a命令进行语法检查,正常则无任何回显消息;反之,会报错。

[root@localhost usb1]# mount -a

4、执行df /root/data/usb1命令查看/dev/sdb1是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb1
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb1       10475520 32992  10442528   1% /root/data/usb1

5、执行df /root/data/usb2命令查看/dev/sdb5是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb2
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb5        5232640 32992   5199648   1% /root/data/usb2

6、执行df /root/data/usb3命令查看/dev/sdb6是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb3
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb6        5229568 32992   5196576   1% /root/data/usb3

取消永久挂载1-/etc/fstab 1、执行umount命令取消挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# umount data/usb1 data/usb2 data/usb3 

2、执行df /root/data/usb1命令查看/dev/sdb1是否取消挂载成功。这里显示取消挂载成功。/dev/sdb2和/dev/sdb3类似。可自行演示。

[root@localhost ~]# df /root/data/usb1
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  16762880 4943956  11818924  30% /

永久挂载2-/etc/rc.local

把挂载命令写入到/etc/rc.local,注意命令最好写为绝对路径

[root@localhost ~]# echo "mount /dev/sdb1 data/usb1" >> /etc/rc.local
[root@localhost ~]# echo "mount /dev/sdb5 data/usb2" >> /etc/rc.local
[root@localhost ~]# echo "mount /dev/sdb6 data/usb3" >> /etc/rc.local

取消永久挂载2-/etc/rc.local

将上面挂载命令从/etc/rc.local移除

5.5.2 GPT分区

5.5.2.1 查看磁盘分区信息

1、执行以下命令查看磁盘分区信息

[root@localhost ~]# parted /dev/sdb print

5.5.2.2 开始分区

1、运行以下命令来启动 parted 并选择要分区的磁盘

[root@localhost ~]# parted /dev/sdb

2、执行mktable gpt命令创建分区表gpt格式(mbr格式叫做msdos类型)

(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes

上面命令也可以使用mklabel gpt命令进行替换

(parted) mklabel gpt

3、执行p命令查看

(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

4、执行mkpart primary命令创建主分区

(parted) mkpart primary 0 20
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  20.0MB  20.0MB               primary

 (parted) mkpart primary 20 40
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  20.0MB  20.0MB               primary
 2      20.0MB  40.0MB  20.0MB               primary

如果想删除分区,执行以下命令进行删除

(parted) rm 1
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 2      20.0MB  40.0MB  20.0MB               primary

5、执行q命令退出parted视图

5.5.2.3 格式化分区

格式化主分区 1、执行mkfs.xfs /dev/sdb1命令格式化主分区

[root@localhost test]# mkfs.xfs /dev/sdb1

说明:如果重复格式化失败,可以选择-f参数进行强制格式化

格式化逻辑分区 1、执行mkfs.xfs /dev/sdb5命令格式化逻辑分区1

[root@localhost test]# mkfs.xfs /dev/sdb5

2、执行mkfs.xfs /dev/sdb6命令格式化逻辑分区2

[root@localhost test]# mkfs.xfs /dev/sdb6

说明:如果重复格式化失败,可以选择-f参数进行强制格式化

5.5.2.4 挂载

临时挂载

1、执行mkdir -p命令创建data/usb1、data/usb2、data/usb3作为挂载点。

[root@localhost ~]# mkdir -p data/usb1
[root@localhost ~]# mkdir -p data/usb2
[root@localhost ~]# mkdir -p data/usb3

2、执行mount命令临时挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# mount /dev/sdb1 data/usb1
[root@localhost ~]# mount /dev/sdb5 data/usb2
[root@localhost ~]# mount /dev/sdb6 data/usb3

3、执行mount命令查看挂载是否成功。

[root@localhost ~]# mount
/dev/sdb1 on /root/data/usb1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb5 on /root/data/usb2 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb6 on /root/data/usb3 type xfs (rw,relatime,attr2,inode64,noquota)

取消临时挂载 1、执行umount命令取消挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# umount data/usb1 data/usb2 data/usb3 

永久挂载1-/etc/fstab

1、执行blkid命令查看文件系统的UUID。

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="232e1a5f-65d2-4509-b446-99be7c2d6293" TYPE="xfs" 
[root@localhost ~]# blkid /dev/sdb5
/dev/sdb5: UUID="f5c69e75-436e-4e77-9093-ff67179c955e" TYPE="xfs" 
[root@localhost ~]# blkid /dev/sdb6
/dev/sdb6: UUID="6b5d4060-bca2-49c0-b23d-457cc144f734" TYPE="xfs" 

2、执行vi /etc/fstab命令打开/etc目录下的fstab文件,填写以下内容。

UUID="232e1a5f-65d2-4509-b446-99be7c2d6293"  /root/data/usb1 xfs defaults 0 0
UUID="f5c69e75-436e-4e77-9093-ff67179c955e" /root/data/usb2 xfs defaults 0 0
UUID="6b5d4060-bca2-49c0-b23d-457cc144f734" /root/data/usb3 xfs defaults 0 0

其中内容格式为

[UUID] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
dump-能否被dump备份命令作用
fsck-是否以fsck检验扇区

3、执行mount -a命令进行语法检查,正常则无任何回显消息;反之,会报错。

[root@localhost usb1]# mount -a

4、执行df /root/data/usb1命令查看/dev/sdb1是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb1
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb1       10475520 32992  10442528   1% /root/data/usb1

5、执行df /root/data/usb2命令查看/dev/sdb5是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb2
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb5        5232640 32992   5199648   1% /root/data/usb2

6、执行df /root/data/usb3命令查看/dev/sdb6是否挂载成功。这里显示挂载成功。

[root@localhost usb1]# df /root/data/usb3
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb6        5229568 32992   5196576   1% /root/data/usb3

取消永久挂载1-/etc/fstab 1、执行umount命令取消挂载文件系统到data/usb1、data/usb2、data/usb3空目录中。

[root@localhost ~]# umount data/usb1 data/usb2 data/usb3 

2、执行df /root/data/usb1命令查看/dev/sdb1是否取消挂载成功。这里显示取消挂载成功。/dev/sdb2和/dev/sdb3类似。可自行演示。

[root@localhost ~]# df /root/data/usb1
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  16762880 4943956  11818924  30% /

永久挂载2-/etc/rc.local

把挂载命令写入到/etc/rc.local,注意命令最好写为绝对路径

[root@localhost ~]# echo "mount /dev/sdb1 data/usb1" >> /etc/rc.local
[root@localhost ~]# echo "mount /dev/sdb5 data/usb2" >> /etc/rc.local
[root@localhost ~]# echo "mount /dev/sdb6 data/usb3" >> /etc/rc.local

取消永久挂载2-/etc/rc.local

将上面挂载命令从/etc/rc.local移除

六、swap

6.1 什么是swap

Swap 是一块磁盘空间,通常是专门为操作系统准备的,用于存储物理内存中暂时不需要的数据。这允许操作系统将内存中的数据交换到磁盘上,并在需要时将其恢复,从而有效地扩展了系统的内存容量。

swap作用:

  • 虚拟内存扩展:当物理内存不足以容纳当前正在运行的进程和应用程序的数据时,操作系统可以使用 Swap 来存储不活动的数据,以释放物理内存供活动数据使用。
  • 内存回收:Swap 允许操作系统将不活动的内存页移出物理内存,以腾出空间供新数据加载。这有助于避免内存耗尽和系统崩溃。
  • 暂时性存储:Swap 还用于存储暂时性数据,如进程的状态、挂起的任务等。

6.2 创建swap

1、创建指定大小的文件1g的文件

[root@k8s-node01 ~]# dd if=/dev/zero of=/tmp/1g bs=1M count=1000

上面参数说明:

  • dd: 这是一个用于数据拷贝和转换的命令行工具。
  • if=/dev/zero: 这是输入文件(input file)的路径。在这里,/dev/zero 表示一个特殊的设备文件,它会产生无限数量的零字节。
  • of=/tmp/1g: 这是输出文件(output file)的路径。在这里,你正在创建一个名为 "1g" 的文件,将它放在 /tmp 目录下。
  • bs=1M: 这表示每次拷贝的块大小为1兆字节(1 MB)。
  • count=1000: 这表示要拷贝的块数,因此总共将拷贝 1000 个块,每个块的大小是1 MB。

2、把文件转换成swap

[root@k8s-node01 ~]# mkswap /tmp/1g

3、查看文件格式

[root@k8s-node01 ~]# file /tmp/1g
/tmp/1g: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label, UUID=fd80c4fe-57e7-48bc-b5bc-6a9f6a5d12d1

4、执行chmod 600 /tmp/1g命令将/tmp/1g权限设置为600

[root@k8s-node01 ~]# chmod 600 /tmp/1g

5、执行free -h命令查看Swap分区大小,方便等下对比看。

[root@k8s-node01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        385M        3.6G         11M        3.8G        7.1G
Swap:          4.0G          0B        4.0G

6、执行swapon /tmp/1g命令扩展swap分区

[root@k8s-node01 ~]# swapon /tmp/1g

7、再次执行free -h命令查看Swap分区大小,观察到已扩充。

[root@k8s-node01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        386M        3.6G         11M        3.8G        7.1G
Swap:          5.0G          0B        5.0G

8、当以上面的扩容后想还原,可执行swapoff /tmp/1g命令还原swap分区。

[root@k8s-node01 ~]# swapoff /tmp/1g

9、再次执行free -h命令查看Swap分区大小,观察到已还原。

[root@k8s-node01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        385M        3.6G         11M        3.8G        7.1G
Swap:          4.0G          0B        4.0G

10、配置永久挂载,执行vim /etc/fstab命令打开文件,文件末尾添加以下内容。

[root@k8s-node01 ~]# vim /etc/fstab
...
...
...
/tmp/1g                                 swap                   swap   defaults        0 0

除了上面的方法外,还有如下方法可以实现同样的目的

[root@k8s-node01 ~]# echo "swapon /tmp/1g" >> /etc/rc.local

七、企业分区方案

1、服务器存放的数据,不重要

分区 作用与大小
/boot/ 引导分区 引导系统启动与存放引导文件,存放系统内核镜像,推荐1G即可
swap 根据实际内存配置,大于8G,swap配置8G即可
低于实际内存低于8G, 1.5倍或2倍 ,最大8G.
/根分区 所有剩余空间给根

2、服务器存放重要的数据

分区 作用与大小
/boot/ 引导分区 引导系统启动与存放引导文件,存放系统内核镜像,推荐1G即可
swap 根据实际内存配置,大于8G,swap配置8G即可
低于实际内存低于8G, 1.5倍或2倍 ,最大8G.
/根分区 给40G-200G,主要安装一些软件,重要数据单独存放
/data/ 剩余所有空间

3、不知道是否重要

分区 作用与大小
/boot/ 引导分区 引导系统启动与存放引导文件,存放系统内核镜像,推荐1G即可
swap 根据实际内存配置,大于8G,swap配置8G即可
低于实际内存低于8G, 1.5倍或2倍 ,最大8G.
/根分区 给40G-200G,主要安装一些软件,重要数据单独存放
剩余空间不划分 未来谁使用谁划分

八、磁盘管理常用故障案例

8.1 磁盘空间不足-block占用导致

8.1.1 故障环境模拟

1、创建1个大文件

[root@k8s-node01 ~]# dd if=/dev/zero  of=/boot/nginx.log    bs=1M count=800

2、使用df -h命令查看磁盘使用率/boot分区磁盘使用率已达到93%,达到环境模拟的效果

[root@k8s-node01 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   12M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   35G  5.5G   30G  16% /
/dev/sda1               1014M  940M   75M  93% /boot
tmpfs                    797M     0  797M   0% /run/user/0

8.1.2 排查步骤

1、使用df -h命令查看/boot分区磁盘使用率已达到93%

[root@k8s-node01 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   12M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   35G  5.5G   30G  16% /
/dev/sda1               1014M  940M   75M  93% /boot
tmpfs                    797M     0  797M   0% /run/user/0

2、使用du -sh命令排查具体的大文件或者目录,找出后确认是否可以删除

[root@k8s-node01 ~]# cd /boot
[root@k8s-node01 boot]# du -sh /boot/*
152K    /boot/config-3.10.0-1160.el7.x86_64
0       /boot/efi
4.0K    /boot/grub
8.0M    /boot/grub2
60M     /boot/initramfs-0-rescue-8716e64f6ad24b78b6e10efb1d4c35b0.img
21M     /boot/initramfs-3.10.0-1160.el7.x86_64.img
800M    /boot/nginx.log
316K    /boot/symvers-3.10.0-1160.el7.x86_64.gz
3.5M    /boot/System.map-3.10.0-1160.el7.x86_64
6.5M    /boot/vmlinuz-0-rescue-8716e64f6ad24b78b6e10efb1d4c35b0
6.5M    /boot/vmlinuz-3.10.0-1160.el7.x86_64

3、找出/boot/nginx.log文件最大,删除此文件

[root@k8s-node01 boot]# rm -rf /boot/nginx.log

4、再次使用df -h命令查看/boot分区磁盘使用率已恢复正常

[root@k8s-node01 boot]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   12M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   35G  5.5G   30G  16% /
/dev/sda1               1014M  138M  877M  14% /boot
tmpfs                    797M     0  797M   0% /run/user/0

8.2 磁盘空间不足-inode不足导致

8.2.1 故障环境模拟

1、创建指定大小文件

[root@k8s-node01 ~]# dd if=/dev/zero  of=/tmp/1g-new   bs=1M  count=1000

2、磁盘格式化

[root@k8s-node01 ~]# mkfs.xfs /tmp/lg-new

3、创建挂载点

[root@k8s-node01 ~]# mkdir  -p /app/test

4、进行挂载

[root@k8s-node01 ~]# mount /tmp/1g-new /app/test

5、创建测试文件,观察到/app/test新建文件会发生以下报错

[root@k8s-node01 ~]# cd /app/test
[root@k8s-node01 test]# echo zq{01..522080}.txt | xargs touch
...
...
...
touch: cannot touch zq522077.txt’: No space left on device
touch: cannot touch zq522078.txt’: No space left on device
touch: cannot touch zq522079.txt’: No space left on device
touch: cannot touch zq522080.txt’: No space left on device

8.2.2 排查步骤

1、使用df -h命令查看/app/test磁盘使用情况,观察到使用正常

[root@k8s-node01 test]# df -h /app/test/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      997M  300M  697M  31% /app/test

2、使用df -i命令查看/app/test的inode使用情况,观察到已全部使用

[root@k8s-node01 test]# df -i /app/test/
Filesystem     Inodes  IUsed IFree IUse% Mounted on
/dev/loop0     512128 512128     0  100% /app/test

3、使用ll | wc -l命令查看/app/test的文件个数

[root@k8s-node01 test]# ll | wc -l
512126

4、使用ls | xargs rm -f命令删除/app/test下面的文件

[root@k8s-node01 ~]# cd /app/test
[root@k8s-node01 test]# ls | xargs rm -f

再次使用df -i命令查看/app/test的inode使用情况,观察到已恢复正常

[root@k8s-node01 test]# df -i /app/test
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/loop0     512128     3 512125    1% /app/test

8.3 磁盘空间不足-未彻底删除导致故障

8.3.1 文件删除原理

1个文件被彻底删除的条件:

  • 条件1:删除文件,硬连接数为0,文件相当于被删除了. 使用rm命令
  • 条件2:文件调用数为0,文件是否被使用中(命令,服务)

排查:

  • 如何知道硬连接数是否为0,一般rm后通过ls,find查看,没有则为0
  • 如何知道进程调用数是否为0, lsof(list open files显示打开的文件), lsof |grep 文件名

演示查看进程调用数:

1、在一个窗口A执行tail -f /etc/passwd命令模拟调用进程

[root@k8s-node01 ~]# tail -f /etc/passwd

2、新起一个窗口B使用lsof命令显示打开的文件

[root@k8s-node01 ~]# lsof | grep passwd
tail      129307         root    3r      REG              253,0      1016   33633011 /etc/passwd

losf回显内容说明:

losf每一列 说明
第1列 命令或服务名字
第2列 pid
第3列 用户
第7列 文件大小(字节)
第8列 文件inode号码
最后1列 文件名

3、显示出系统中所有被打开的文件(被调用的文件)

[root@k8s-node01 ~]# ps -ef | grep tail
root     129307   2991  0 22:38 pts/0    00:00:00 tail -f /etc/passwd
root     129671 127047  0 22:45 pts/1    00:00:00 grep --color=auto tail

8.3.2 故障环境模拟

1、创建指定大小文件

[root@k8s-node01 ~]# dd if=/dev/zero  of=/tmp/1g-new   bs=1M  count=1000

2、磁盘格式化

[root@k8s-node01 ~]# mkfs.xfs /tmp/lg-new

3、创建挂载点

[root@k8s-node01 ~]# mkdir  -p /app/test

4、进行挂载

[root@k8s-node01 ~]# mount /tmp/1g-new /app/test

5、创建一个包含从1到500,000,000的数字序列,并将该序列写入名为 big.log 的文件

[root@k8s-node01 ~]# cd /app/test
[root@k8s-node01 test]# seq 500000000 >big.log

此时查看/app/test磁盘使用率,已达到100%

[root@k8s-node01 test]# df -h /app/test
Filesystem               Size  Used Avail Use% Mounted on
/dev/loop0               997M  997M   20K 100% /app/test

6、模拟调用big.log 文件

[root@k8s-node01 test]# tail -f /app/test/big.log

8.3.3 排查步骤

1、查看磁盘使用率,观察到/app/test分区已达到100%

[root@k8s-node01 test]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   12M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   35G  6.4G   29G  19% /
/dev/sda1               1014M  138M  877M  14% /boot
tmpfs                    797M     0  797M   0% /run/user/0
/dev/loop0               997M  997M   20K 100% /app/test

2、使用du -sh命令查看/app/test目录哪个文件最大,观察到/app/test/big.log文件最大

[root@k8s-node01 ~]# du -sh /app/test/*
965M    /app/test/big.log

3、删除/app/test/big.log文件

[root@k8s-node01 ~]# rm -rf /app/test/big.log

4、再次查看磁盘使用率,观察到/app/test分区还是达到100%。

[root@k8s-node01 ~]# df -h /app/test
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      997M  997M   20K 100% /app/test

5、使用lsof命令继续排查,观察到该文件已被调用,没有彻底被删除。在lsof中delete标记表示这个文件没有入口(硬连接数为0),但是还有进程调用

[root@k8s-node01 ~]# lsof |grep delete
tuned       1536         root    8u      REG              253,0       4096   33632973 /tmp/#33632973 (deleted)
gmain       1536 1781    root    8u      REG              253,0       4096   33632973 /tmp/#33632973 (deleted)
tuned       1536 1782    root    8u      REG              253,0       4096   33632973 /tmp/#33632973 (deleted)
tuned       1536 1784    root    8u      REG              253,0       4096   33632973 /tmp/#33632973 (deleted)
tuned       1536 1785    root    8u      REG              253,0       4096   33632973 /tmp/#33632973 (deleted)
tail      130624         root    3r      REG                7,0 1011269632         67 /app/test/big.log (deleted)

6、使用kill命令杀掉调用进程

[root@k8s-node01 ~]# kill 130624

7、再次查看磁盘使用率,观察到/app/test分区磁盘使用率恢复正常

[root@k8s-node01 ~]# df -h /app/test
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      997M   33M  965M   4% /app/test

8.4 小结

磁盘空间不足故障分类 现象 排查 解决
block df -h磁盘空间不足 df -h,du -sh一层一层找,直到找出对应的文 件或目录 确认后再 删除
inode df -h磁盘空间有剩余,创建文件,操作服务提示磁盘空间不足 df -h,df -i,找出系统中的大目录 确认后再 删除
block文件未彻底删除 df -h查看磁盘空间不足,du -sh 查看磁盘空间还有剩余 losf | grep delete,找出进程或服务 重启服务

九、文件系统

常见文件系统 说明
xfs Centos7默认的文件系统即可
ext4 Centos6.x ubuntu默认的文件系统
ext3 Centos5.x 默认的文件系统
swap 交换分区,也算是文件系统

大话存储(终极版) (豆瓣) (douban.com)

十、磁盘性能指标

磁盘性能指标 说明
吞吐量(读写速度) 一般指的是读写速度
iops 每秒可以进行的io数量(io per second),每秒可以进行读写次数
延迟 进行读写的时候操作延时
故障间的平均时间(MTBF) 固态硬盘,基本都是百万小时

其中相关命令说明:

  • 连续读写:dd命令测试
  • 随机读写:fio测试
  • fio可以测试这些指标

更多资料请参考:测试块存储性能_云服务器 ECS-阿里云帮助中心 (aliyun.com)