运维SRE-04 磁盘管理体系

磁盘管理体系详解

磁盘管理系统概述

  • 目标

    • 熟练掌握常用磁盘配置(容量,转速,个数)
    • 熟练说出来或写出来: raid级别
    • 熟练掌握磁盘基础使用:拿到一块硬盘到可以向硬盘写入数据分区,格式化,挂载
    • 熟练掌握: 磁盘空间不足 no space left on device 故障,原因,排查,解决.
      磁盘基础内容
  • 磁盘基本内容

  • 磁盘Raid(磁盘阵列)

  • 磁盘分区知识点与实战

  • 磁盘格式化,磁盘挂载

  • 磁盘故障案例: 磁盘空间不足 no space left on device

  • 磁盘性能测试

  • 其他补充

磁盘管理基础

1)磁盘分类与接口

  • 磁盘分类:机械硬盘,固态硬盘
  • 磁盘接口:Sata(接口,家用),SAS(接口,企业级),pci-e(固态硬盘,企业,家用)

2)磁盘选型

  • 企业磁盘选型
接口应用场景
sata企业内部使用,存放备份,线下业务(给自己内部人员使用)4T 6T 7.2k转*8
SAS企业标配,线上业务(线上环境,生产环境)使用(提供给用户环境)300g 600g 900g 15k硬盘* 8
固态硬盘访问量大(并发量高),数据量不是很大(架构优化策略:把用户经常访问的数据存放在固态)500g 1tb 2tb *4

3)磁盘内部结构

  • 机械
    • 磁头
    • 盘片
  • 机械硬盘细致结构
    • 磁头:用于读写数据,径向运行(半径),从数字0开始命名.
    • 磁道: 类似于环形跑道,用来存放数据区域
      • 最外面的圈开始是0号磁道.
      • 每个磁道存放的数据量是一样的
    • 扇区: 存放数据最小单位. 默认是512字节
    • 柱面: 不同盘面上,相同的磁道组成形状. 磁盘读写是以柱面为单位进行的

4)机械 VS 固态
在这里插入图片描述

RAID

1)概述

  • 磁盘冗余阵列

  • 物理服务器的硬盘,通过raid管理,才能使用

  • 使用raid优势(好处)

    • 可以获取更高容量
    • 可以获取更高性能(读写速度 io)
    • 可以获取更高的冗余(安全性)

3)raid级别

  • raid:raid管理磁盘具体方式
  • 常见的raid级别:raid 0,raid1,raid5,raid10
至少几块硬盘容量冗余性能使用场景举例
raid 01所有硬盘容量综合最低,没有冗余最快不要求安全,只要求速度数据库从库
存储从库
web服务器
raid 12块硬盘(制作的时候,1次只能给2块硬盘做raid1)一半冗余100%写入性能较慢,读取类似于单块硬盘只追求安全性,对于速度没系统盘,监控服务器
raid 5至少3块硬盘损失n-1(n>=3)损坏1块读取性能还可以,写入较慢对于速度安全要求不高普遍数据库,存储访问量不高
raid 10至少4块硬盘一半损坏1半,但不能在一个组里读写性能比较强悍对于安全和性能都要高并发或高访问量数据库主库,存储

4)未来应用

  • 物理服务器需要配置raid
  • 物理服务器拿到手
    • 拆开包装
    • 上架
    • 上电
    • 配网
    • 配置远程控制卡
    • 配置raid
    • 安装系统(光盘,U盘,pxe)
    • 创建磁盘分区
    • 选择软件包
    • 安装完成
    • 部署环境

磁盘分区

1)磁盘分区概述

  • 磁盘的第一个扇区:0磁头(盘面)0磁道1个扇区512字节
  • MBR 磁盘的引导程序(主引导记录):引导系统启动;
  • 分区表:存放分区开始结束信息
  • 主分区:最多有4个,每个占用16字节分区表空间
  • 扩展分区:
    • 主要用来解决主分区最多4个
    • 主分区无法直接存放数据与使用
    • 如果要使用需要在扩展分区中创建逻辑分区
    • 扩展分区在一个磁盘只有1个
  • 逻辑分区
    • 需要先创建扩展分区
    • 使用逻辑分区存放数据

3)Linux系统磁盘及分区命名规则

[root@hb-sre-001 ~]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 8月   1 00:50 /dev/sda
brw-rw----. 1 root disk 8, 1 8月   1 00:50 /dev/sda1
brw-rw----. 1 root disk 8, 2 8月   1 00:50 /dev/sda2

#Linux系统磁盘名字的命名规则
sata/sas/pci-e   接口的硬盘
/dev/sd? 开头
##云服务器
/dev/vd? 开头

## 第1块硬盘
/dev/sda
## 第2块硬盘
/dev/sdb

#Linux系统磁盘分区名字的命名规则

#主分区或扩展分区 1-4
/dev/sda1-4

#逻辑分区从5开始
/dev/sda5

#第3块sata硬盘的第1个主分区
/dev/sdc1

#第4块sas硬盘的第2个逻辑分区
/dev/sdd6


4)MBR VS GPT

  • MBR主引导记录,磁盘分区格式
  • 磁盘大小不能大于2tb,如果大于2tb则无法使用.

  • GPT分区表格式,解决问题.
  • 解决系统支持大硬盘的问题.
  • 主分区随便用,不用区分主分区,扩展分区逻辑分区.
MBR VS GPT支持主分区数量支持的硬盘大小磁盘分区命令
MBR支持的主分区+扩展分区最多4个小于2T硬盘
GPT可以理解为无线可以各种容量的磁盘parted/gdisk 支持GPT和MBR

5)磁盘分区-fdisk

#01 查看磁盘信息
[root@hb-sre-001 ~]# fdisk -l |grep '/dev/sd[a-c]'
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
磁盘 /dev/sdb:106 MB, 106954752 字节,208896 个扇区
磁盘 /dev/sdc:106 MB, 106954752 字节,208896 个扇区

#02 对/dev/sdb进行分区
[root@hb-sre-001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x9e228625 创建新的 DOS 磁盘标签。

#03 fdisk 磁盘分区命令详解
p (print)  显示当前磁盘分区信息.
n	(new)	创建磁盘分区.
d (delete) 删除分区.
q (quit) 退出不保存.
w (write) 保存并退出. 让磁盘分区生效.

#03 案例01 在/dev/sdb中创建1个10mb的磁盘分区
fdisk /dev/sdb
n #创建分区
Partition type: # 请选择分区类型
   p   primary # 主分区 (0 primary, 0 extended, 4 free)
   e   extended # 扩展分区
Select (default p):
Select (default p): p  
分区号 (1-4,默认 1):1
起始 扇区 (2048-208895,默认为 2048):# 磁盘分区的第1个扇区是从哪里开始
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-208895,默认为 208895):# 磁盘分区到哪里结束
Last 扇区, +扇区 or +size{K,M,G} (2048-208895,默认为 208895):+10M
分区 1 已设置为 Linux 类型,大小设为 10 MiB

命令(输入 m 获取帮助):w

[root@hb-sre-001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sdb:106 MB, 106954752 字节,208896 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9e228625

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048       22527       10240   83  Linux



6)磁盘分区-parted

  • /dev/sdc
##01 查看所有磁盘信息
parted -l

##02 进入磁盘
p

##03 创建磁盘分区表
mktable gpt ## mklabel 也行     gpt格式 :mktable gpt mbr格式: mktable msdos

##04 创建磁盘分区
(parted) mkpart primary 0 #(开始) 10(10MB)
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? Ignore                                           
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      17.4kB  10.0MB  9983kB               primary

##05 删除分区
(parted) rm  6      

##06 退出
q (quit) #退出  

7)磁盘分区指令小结

  • fdisk mbr 磁盘不能大于2tb
  • parted mbr(msdos),gpt 都支持 2tb以上。
  • gdisk 用法与fdisk一致。仅支持gpt格式,大于2tb硬盘。

磁盘使用全流程

1)磁盘使用流程概述:

  • 一般流程:
    • 1 磁盘分区
    • 2 格式化(创建文件系统)
    • 3 挂载

2)磁盘使用流程实战

#对 /dev/sdb 创建1个分区,使用全部空间,挂载到/mnt目录.
##01 磁盘分区
[root@hb-sre-001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-208895,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-208895,默认为 208895):
将使用默认值 208895
分区 1 已设置为 Linux 类型,大小设为 101 MiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

##02 格式化
## 创建文件系统
mkfs.xfs /dev/sdb1


##03 挂载
linux下面,设备(磁盘,磁盘分区,光盘) 不挂载无法使用,挂载给设备设置入口.    
入口叫做挂载点.   挂载点是目录.   
/mnt linux 临时挂载点
给/dev/sdb1 设置挂载点 为/mnt
[root@hb-sre-001 mnt]# mount /dev/sdb1 /mnt
[root@hb-sre-001 mnt]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 898M     0  898M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.7M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  6.1G   11G   36% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    182M     0  182M    0% /run/user/0
/dev/sdb1                 98M  5.3M   93M    6% /mnt

挂载生效问题
mount /dev/sdb1 /mnt	# 临时挂载,重启Liunx后挂载失效
永久挂载?
/data  # 新目录
两种方法.
卸载分区
umount /mnt umount #挂载点
挂载生效问题
  • 目标:掌握磁盘永久挂载方法
    a) 修改/etc/rc.local
    存放的命令,脚本会在开机的时候自动运行.
    第1次使用,需要给 /etc/rc.d/rc.local 加上执行权限.
    chmod +x /etc/rc.d/rc
#mount /dev/sdb1   /data  填上rc.local里

b)修改/etc/fstab

  • fstab开机自动挂载配置文件
# 命令blkid可以看uuid
# fstab格式
/dev/mapper/centos_oldboy--81--golden-root /                       xfs     defaults        0 0
UUID=9bd35a90-452f-4179-b123-183ee2e5a61c /boot                   xfs     defaults        0 0
/dev/mapper/centos_oldboy--81--golden-home /home                   xfs     defaults        0 0
/dev/mapper/centos_oldboy--81--golden-swap swap                   swap   defaults        0 0
配置一共是6列.
#
#/dev/sdb1 /data xfs     defaults    0 0

在这里插入图片描述

  1. 小结
  • 磁盘使用三部曲: 分区,格式化,挂载
  • 命令:fdisk/parted/gdisk, mkfs.xfs ,mount/umount
  • 永久挂载: /etc/rc.local /etc/fstab

磁盘企业级分区方案

  • 新安装的系统如何划分分区及配置容量

1)物理机

#磁盘分区方案 01 通用 运行不太重要的环境,没有用户数据。
/boot 分区   #用于引导系统启动,linux内核文件。         1G即可(如果需要升级linux内核) (200MB)
swap 分区   #内存不足的时候,swap空间临时充当内存使用。  
             #内存小于8G swap 可以给内存的1.5倍或2倍。 最大控制在8-16G
             #内存大于8G swap 给8G 8-16G
             
             #在一些生产环境中为了极致的速度、性能。会关闭swap. 温馨提示:云服务器默认没有swap.
/     分区    #剩余多少给多少。
#磁盘分区方案 02 通用 有重要数据的时候
/boot 分区   #用于引导系统启动,linux内核文件。         1G即可(如果需要升级linux内核) (200MB)
swap 分区   #内存不足的时候,swap空间临时充当内存使用。  
             #内存小于8G swap 可以给内存的1.5倍或2倍。 最大控制在8-16G
             #内存大于8G swap 给8G 8-16G
             
             #在一些生产环境中为了极致的速度、性能。会关闭swap. 温馨提示:云服务器默认没有swap.
             
/     分区   根分区40-100G 
/data 数据分区 重要数据放在/data 目录、分区中。
#磁盘分区方案 03 不知道是否有重要数据。
/boot 分区   #用于引导系统启动,linux内核文件。         1G即可(如果需要升级linux内核) (200MB)
swap 分区   #内存不足的时候,swap空间临时充当内存使用。  
             #内存小于8G swap 可以给内存的1.5倍或2倍。 最大控制在8-16G
             #内存大于8G swap 给8G 8-16G
             
             #在一些生产环境中为了极致的速度、性能。会关闭swap. 温馨提示:云服务器默认没有swap.
             
/     分区   根分区40-100G 
剩余空间暂不分配,未来谁使用谁分配。
  1. 云服务器
  • 根据需求,规划好。所需要的磁盘空间。
  • 如果后期添加,扩容云服务器都很方便。
/     系统分区 根分区 40-100G   /dev/vda 
/data 数据分区 数据分区 不限制。

磁盘故障案例-磁盘空间不足案例no space left on device

  • 导致磁盘空间不足的原因:

1)因为大文件

  1. 如何模拟
  2. 如何排查
  3. 如何解决
#01 模拟
dd  if=/dev/zero  of=/usr/local/big     bs=1M  count=5000
dd 创建指定大小文件
   if input file 输入文件.
   of output file 输出文件.
   bs block size 每次读取多少.
   count         次数.
    
   bs * count就是文件大小.
   
#02 排查
- 目标:定位大文件在哪里,在哪个目录,是什么文件名字.
整体查看下:是哪里磁盘空间不足(哪个分区)
根据有问题的分区,详细,一层一层排查,排查到具体目录或文件.
#整体查看下:是哪里磁盘空间不足(哪个分区)
df -h
#根据有问题的分区,详细,一层一层排查,排查到具体目录或文件.
du -sh /*

[root@oldboy81-golden-lnb ~]# du -sh /* |grep G
6.5G /usr
du -sh /* |sort -hr  # sort -hr以人类读形式进行排序. 
#01 发现/分区占用空间大.
du -sh /* |sort -hr
#02 发现 /usr/目录占用空间大.
du -sh /usr/* |sort -hr
#03 发现 /usr/local/ 占用空间大
du -sh /usr/local/* |sort -hr
#04 最终找到 大文件 //usr/local/big 
[root@oldboy81-golden-lnb ~]# du -sh /usr/local/* |sort -hr
4.9G /usr/local/big

#05 确认文件是否重要,确认是否可以删除

今日核心:

  • 磁盘分区格式化与挂载
  • 永久挂载
  • 磁盘分区方案
  • 磁盘故障案例-磁盘空间不足案例 no space left on device

2)因为inode用光导致磁盘空间不足

  • 原理:

    • inode存放文件属性信息,inode数量是在格式化后固定
    • 如果耗尽也会提示磁盘空间不足no space left on device
  • 解决:

    • 删除,大量小文件。
  • 小结:

    • 排查inode导致的磁盘空间不足
    • 排查流程:
      • df -h;然后看下df -i inode使用情况;
      • 如何查找有大量小文件的目录。找系统中目录大小大于1MB即可,find / -type d -size +1M
      • 精确到具体问题的目录,看看内容,确认是否删除
    • 模拟故障作为熟悉项目

3)因为文件没有被彻底删除导致的磁盘空间不足

  • 文件删除原理:
    • 没有入口了(硬连接数为0,rm删除)
    • 这个文件没有任何调用(服务软件/命令)
#排查
df -h       #磁盘满了
du -sh /*  #计算,发现没满.
基本是文件未被彻底删除导致的故障.
lsof |grep delete #即可 lsof 显示系统中所有被打开的文件.
                  #delete表示文件没有入口,进程调用数不为0
yum install -y lsof
#解决
重启或关闭对应服务/进程.

4)小结

  • 原理:文件被彻底删除原理(文件删除原理)
  • 故障:
    • 现象:df -h 磁盘满,du -sh 磁盘没满。怀疑文件未彻底删除导致的故障
    • 排查:df -h,du -sh ;lsof |grep delete
    • 解决:找出占用文件的服务/进程,重启。

磁盘空间不足案例总结

磁盘空间不足原因现象排查解决
常规大文件(大量文件) block不足.创建文件或使用服务
报错提示磁盘空间不足no space left on device
df -h ; du -sh 一层一层排查.最终精确到文件或目录.确认后删除
大量inode使用,inode不足.创建文件后提示磁盘空间不足.df -h磁盘没满df -i ; 哪个分区inode满了.
使用find找分区中大于1MB目录.
确认后删除目录中大量小文件.
文件未彻底删除导致的磁盘空间不足.提示磁盘空间不足. df -h 真的不足. du -sh看还有剩余.lsofgrep delete
待讲解 to be continued

磁盘管理体系之swap

swap概述
  • swap交换分区,内存不足的时候临时充当内存
swap手动创建
  • 目录:熟练掌握手动创建swap方法

1)案例01 通过dd创建swap并添加到系统中

#01 dd创建500MB文件
dd if=/dev/zero of=/tmp/500mb bs=1M count=500
#02 500MB文件成为swap(创建文件系统)
mkswap /tmp/500mb
#03 激活swap(让它加入系统)(挂载)
chmod 600 /tmp/500mb
swapon /tmp/500mb
#04 永久生效
01) 方法01 /etc/rc.local  
swapon /tmp/500mb
02) 方法02 /etc/fstab  
/dev/mapper/centos_oldboy--81--golden-swap swap                   swap   defaults        0 0
#/tmp/500mb
UUID=756762b6-a234-4b59-999f-1e5efaa54a1d   swap                   swap   defaults        0 0

#05 关闭swap
swapoff

2)案例02 通过创建磁盘分区创建swap

#01 fdisk parted进行分区
#02 500mb文件成为swap(创建文件系统)
mkswap /dev/sdc1
#03 激活swap(让它加入系统)(挂载)
swapon /dev/sdc1
swapon -s
应用场景及建议
  • 建议高并发,内存足够的时候,可以不开启swap
  • 对于其他场景,不确定,就可以创建些swap
企业故障案例:
  • 背景:企业生产环境运行java程序,突然发现大量占用swap
  • 如何处理:
    • 临时增加swap,防止系统宕机
    • 后续根据日志,软件日志排查原因
  • 结果:
    • 分析日志,找出原因

磁盘管理体系之性能测试

磁盘核心性能指标
磁盘关键性能指标
随机的读写次数(iops)io读写per seconde磁盘每秒的读写次数(小文件测试)
吞吐量连续读写速度磁盘最大读写速度(大文件测试)
延迟(随机读写延迟)
容量硬盘/磁盘容量
测试
# dd
# fio(连续读写,随机读写,读写延迟)

#测试顺序读
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting
-filename=/dev/sda -name=Read_PPS_Testing
#测试顺序写
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting
-filename=/dev/sda  -name=Write_PPS_Testing
#测试随机读 iops
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -
group_reporting -filename=/dev/sda -name=Rand_Read_Testing
#测试随机写  
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -
group_reporting -filename=/dev/sda -name=Rand_Write_Testing
#测试延迟 随机读
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -
filename=/dev/sda -name=Rand_Read_Latency_Testing

更多测试参考[https://help.aliyun.com/zh/ecs/user-guide/test-the-performance-of-block-storage-devices]

磁盘管理体系之文件系统

  • 目标:认识文件系统即可,认识常见系统的默认文件系统

  • 文件系统:组织和存放磁盘中文件的方式

  • Linux

    • XFS(Centos 7默认的文件系统)
    • EXT4(Centos 6及之前的文件系统)
    • EXT3(Centos 5.x)
    • EXT2(裸奔状态文件系统)
    • Btrfs(小文件)
  • Windows:

    • Fat32
    • NTFS

磁盘管理体系-总结

  • 磁盘选型
  • Raid级别
  • Raid应用场景
  • 磁盘分区:fdisk/parted/gdisk进行分区即可
  • 磁盘分区格式化挂载
  • 永久挂载(当前及重启后都生效)
    • /etc/rc.local
    • /etc/fstab(每一列的含义)
  • 磁盘分区方案
  • 故障案例:磁盘空间不足故障案例,原因,排查,解决
  • 故障案例:企业生产环境运行java程序(Tomcat)软件,突然发现大量占用swap。需要临时添加swap
  • 添加swap
  • 磁盘性能衡量指标:容量,吞吐量(顺序读写),iops,延迟 dd,fio
  • 文件系统(了解)
  • 软件包管理体系:
    • 软件包安装与管理方式
    • rpm命令
    • yum命令
    • 软件仓库
    • 编译安装
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值