磁盘管理体系详解
磁盘管理系统概述
-
目标
- 熟练掌握常用磁盘配置(容量,转速,个数)
- 熟练说出来或写出来: 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 0 | 1 | 所有硬盘容量综合 | 最低,没有冗余 | 最快 | 不要求安全,只要求速度 | 数据库从库 存储从库 web服务器 |
raid 1 | 2块硬盘(制作的时候,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
- 小结
- 磁盘使用三部曲: 分区,格式化,挂载
- 命令: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
剩余空间暂不分配,未来谁使用谁分配。
- 云服务器
- 根据需求,规划好。所需要的磁盘空间。
- 如果后期添加,扩容云服务器都很方便。
/ 系统分区 根分区 40-100G /dev/vda
/data 数据分区 数据分区 不限制。
磁盘故障案例-磁盘空间不足案例no space left on device
- 导致磁盘空间不足的原因:
1)因为大文件
- 如何模拟
- 如何排查
- 如何解决
#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看还有剩余. | lsof | grep 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命令
- 软件仓库
- 编译安装