第十二篇:系统管理体系之磁盘管理
磁盘管理体系概述
磁盘基础
- 内存:临时存放,断电后丢失
- 磁盘:永久保存
分类
运行方式与原理 | 详细信息 |
机械硬盘(HDD) | 电机带动磁盘高速旋转,读取数据(速度可达到5400,7200rpm每分钟多少转) |
固态硬盘(SSD) | 集成电路与芯片,存储芯片 |
磁盘接口
磁盘接口:磁盘的读写速度(类似于水壶的壶嘴)
接口分类 | 说明 | |
SATA | 一般用于机械硬盘,也可用于固态硬盘,容量大,价格较低(家用) |
|
SAS | 一般用于机械硬盘,也可用于固态硬盘(企业使用) |
|
PCI-E | 用于固态硬盘(企业) | ![]() |
U.2 | 企业级固态硬盘使用 | ![]() |
企业级环境磁盘选型⭐⭐⭐⭐⭐
磁盘选型 | 应用建议 |
一般情况下,数据备份 | SATA硬盘,10k rpm 4TB、8TB存放备份 |
网站服务器使用 | SAS接口 15k rpm 300G、600G、900G |
高并发网站服务器 | 可以选择固态硬盘的PCL-E,SAS,SATA |
机械硬盘 vs 固态硬盘
固态硬盘存储颗粒:SLC、TLC、MLC、3D Nand
磁盘内部结构(了解)
机械硬盘内部组成 | 说明 |
盘片 | 实际存放数据的地方 |
磁头 | 贴近盘片,读写数据 |
磁道 | 磁盘中的圆环形区域(从0开始) |
扇区 | 磁盘上最小存储单位(默认512字节) |
柱面 | 不同盘面上相同的磁道组成的形状 |
raid级别(磁盘冗余阵列)⭐⭐⭐⭐⭐
概述
- 在使用物理服务器时,通过raid卡(设备),统一管理多块硬盘
- 需要做raid后才能安装系统,部署服务
- raid(磁盘冗余阵列):管理磁盘的方式
特点
- 可以获得更高的容量
- 可以获得更高的性能
- 可以获得更高的安全(冗余)
raid级别⭐⭐⭐⭐⭐
raid级别就是对硬盘的管理方式
raid 0 | raid 1 | raid 5 | raid 10 |
![]() |
![]() |
![]() |
![]() |
磁盘分区⭐⭐⭐⭐⭐
磁盘分区基本知识点
磁盘分区概念⭐
- 主分区:直接用于存储数据的分区,可以直接被操作系统识别
- 扩展分区:无法直接用于存储数据,而是作为一个容器,允许在内部创建多个逻辑分区
- 逻辑分区:扩展分区内创建的分区单位,可以直接存储数据
MBR(磁盘引导程序)⭐⭐⭐
磁盘分区表格式:MBR、GPT
MBR(磁盘引导程序):引导系统的启动(每一块硬盘上存放磁盘引导程序,引导程序在磁盘开头部分)
位置:位于磁盘的第一个扇区(512字节)
- 分区表64字节,每个分区占用16字节,最多只能有4个分区
- 全为主分区
- 如果只划分一个分区使用所有空间,将无法继续划分分区
- 如果划分4个分区,但磁盘还有剩余,剩余空间将无法使用
- 3主分区+1扩展分区
- 扩展分区用于解决主分区数量限制问题
- 需要在扩展分区下面创建逻辑分区存放数据
主分区-扩展分区-逻辑分区关系⭐⭐⭐
磁盘及分区命名
命名方式
磁盘文件或分区文件放在/dev/下面
- 磁盘命名
# 磁盘接口 sas、sata、scsi接口的磁盘,硬盘名字是以sd开头 虚拟机(kvm)/公有云的磁盘,硬盘名字是以vd开头 # 第几块硬盘:通常以字母表示(从字母a开始以此类推) /dev/sda
- 分区命名
分区命名时根据分区类型进行命名 主分区、扩展分区 1-4 逻辑分区 从5开始 # 案例:硬盘及分区命名 第2块SATA硬盘的第1个主分区 /dev/sdb1 第3块SAS硬盘的第2个逻辑分区 /dev/sdc6 第5块公有云的云盘的第3个主分区 /dev/vde3
磁盘分区实战
df | 查看已格式化并挂载的磁盘的使用情况 |
fdisk | 列出所有硬盘及其分区信息(包括未挂载的分区) |
lsblk | 显示块设备的层次结构(包括挂载点和大小) |
- 打隔断:分区操作
- 装修,格式化:创建文件系统
- 安装门窗:挂载(命令,配置文件)
# 环境准备(添加两块1个G硬盘) [root@yuan ~]# fdisk -l |grep '/dev/sd*' 磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区 /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 104857599 51379200 8e Linux LVM 磁盘 /dev/sdc:1073 MB, 1073741824 字节,2097152 个扇区 磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
磁盘分区⭐⭐⭐
案例:创建20MB的分区 温馨提示:fdisk操作时,按删除键会出现无法删除现象 ctrl + u 或 ctr + 删除键 # 1 操作硬盘 fdisk /dev/sdb # 2 对磁盘分区进行增删改查 p print 输出磁盘分区信息 n new 创建分区 d delete 删除分区 w write 保存并退出 q quit 退出不保存 # 3 创建20MB分区 命令(输入 m 获取帮助):n # 创建分区 Partition type: # 提示选择、类型 p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p # 输入p或回车默认使用主分区 分区号 (1-4,默认 1):1 # 输入1或回车使用分区号 起始 扇区 (2048-2097151,默认为 2048): # 回车,使用默认的起点 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):+20M # +20M 分区20MB 分区 1 已设置为 Linux 类型,大小设为 20 MiB # 4 通过p查看 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x2da82560 设备 Boot Start End Blocks Id System /dev/sdb1 2048 43007 20480 83 Linux # 通过w保存 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 # 6 查看/dev/sab* [root@yuan ~]# ll /dev/sdb* brw-rw----. 1 root disk 8, 16 9月 27 19:57 /dev/sdb brw-rw----. 1 root disk 8, 17 9月 27 19:57 /dev/sdb1
创建文件系统(格式化)⭐⭐⭐⭐⭐
- 创建文件系统(make filesystem):给磁盘分区创建规则,对存储设备进行初始化过程
- mkfs 命令创建文件系统
格式化的格式:ext4、xfs、FAT32
挂载
将存储设备与操作系统的文件系统连接起来,使得用户和应用程序能够访问存储设备上的数据(类似于驱动器)
挂载⭐⭐⭐⭐⭐
临时挂载
- Linux中需要通过挂载命令,给设备指定挂载点已经存在的空目录),否者将无法使用
- 通过mount命令指定设备,指定挂载点(目录)mount 设备 目录
- 挂载点:一般是个空目录就行
# 临时挂载(重启linux系统后挂载失效) [root@yuan ~]# mount /dev/sdb1 /mnt/ # 给/dev/sdb1分区设置入口,入口叫做/mnt/ [root@yuan ~]# df -h |grep mnt # df 显示系统中磁盘空间的使用情况 /dev/sdb1 17M 1.1M 16M 7% /mnt # 卸载 umount + 挂载点 # 表示卸载 umount + /mnt # 挂载光盘到/media目录 mount /dev/cdrom /media/
永久挂载
- 把挂载命令mount /dev/sdb1 /data/写到/etc/rc.local中(最好写绝对路径)
- 专业的开机自动挂载配置文件/etc/fstab,根据配置文件的要求把mount命令改为配置文件形式
/etc/fstab每一列含义
第1列 | 第2列 | 第3列 | 第4列 | 第5列 | 第6列 |
设别名字/dev/sdb1或UUID形式 | 挂载点 | 文件系统类型:xfs、ext4、swap | 挂载选项(一般是default) | 是否备份 | 是否检查 |
设备名字方式:/dev/sdb1 | /data/ | xfs | default | 0 | 0 |
UUID形式: UUID=74b69113-bbb0-4017-8ad7-f2463c060c1d |
配置文件形式的mount命令 mount /dev/sdb1 /data/ #/etc/fstab配置中的样子 /dev/sdb1 /data/ xfs defaults 0 0
MBR vs GPT
- 利用parted命令创建磁盘分区时实时生效
磁盘分区表格式 | 特点 | 对应的命令 |
MBR | 最大支持2TB的硬盘,区分主分区,扩展分区,逻辑分区 | fdisk/parted |
GPT | 支持大容量硬盘,主分区无限使用 | gdisk/parted |
# 案例:创建GPT格式的分区,分区大小为10MB(/dev/sdc) # 编辑/dev/sdc parted /dev/sdc # 创建磁盘分区表gpt mktable gpt 或者 mklabel gpt # 注意:磁盘分区格式为mbr类型 mktable msdos # 创建分区10MB mkpart <part-name> <start> <end> mkpart primary 0 10 mkpart primary 10 20 # 删除分区 rm 1(磁盘分区Number) # 退出编辑 q 或 quit
swap创建⭐⭐⭐⭐⭐
- swap交换分区:内存不足的时候临时充当内存,swap占用磁盘空间
- 建议:如果内存充足且服务对性能要求较高,可以关闭swap
# 案例:服务器运行Java程序,大量占用内存,以至于开始占用swap如何解决 增加1G的swap空间 1.创建指定大小的文件 2.把文件转换成swap 3.激活这个swap,将其加入到Linux中 4.配置永久挂载
操作过程 # 1.创建指定大小的文件(1G的文件) dd if=/dev/zero of=/tmp/swap_1g bs=1M count=1000 if === input file 输入文件(数据从哪里来) of === output file 创建文件,存放数据,数据文件 bs === block size 每次读取多少(一般1MB大小) count === 读取次数 # 2.把文件转换成swap [root@yuan ~]# file /tmp/swap_1g # file命令查看文件的类型 /tmp/swap_1g:data [root@yuan ~]# file /tmp/1g /tmp/1g: cannot open (No such file or directory) [root@yuan ~]# # file 检查文件类型 [root@yuan ~]# file /tmp/swap_1g /tmp/swap_1g: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label, UUID=e607b45d-b099-433e-94aa-0f74d58a2334 # 3.激活这个swap,将其加入到Linux中 [root@yuan ~]# free -h total used free shared buff/cache available Mem: 1.9G 262M 74M 9.5M 1.6G 1.5G Swap: 2.0G 8K 2.0G [root@yuan ~]# chmod 600 /tmp/swap_1g [root@yuan ~]# swapon /tmp/swap_1g [root@yuan ~]# free -h total used free shared buff/cache available Mem: 1.9G 263M 73M 9.5M 1.6G 1.5G Swap: 3.0G 8K 3.0G # 4.永久挂载 方法1:swapon /tmp/swap_1g写入rc.loacl 方法2:写入/etc/fstab /tem/swap_1g swap swap defaults 0 0
企业分区方案⭐⭐⭐⭐⭐
如何设置/、/boot、/swap大小
公有云
物理机//虚拟机(私有云)
服务器存放的数据相对不那么重要
分区 | 作用 | 大小 |
/boot引导分区 | 引导系统使用与存放引导文件,存放系统内核镜像 | 512-1025MB |
/swap |
物理内存不足充当临时内存 |
根据内存进行配置 内存大于8G,配置8G即可 内存小于8G,内存的1.5~2倍即可(最大8G) |
/根分区 | 存放系统的所有核心文件和目录,操作系统的所有关键组件 | 所有剩余空间都给根分区 |
服务器存放重要数据
分区 | 作用 | 大小 |
/boot引导分区 | 引导系统使用与存放引导文件,存放系统内核镜像 | 512-1025MB |
/swap |
物理内存不足充当临时内存 |
根据内存进行配置 内存大于8G,配置8G即可 内存小于8G,内存的1.5~2倍即可(最大8G) |
/根分区 | 存放系统的所有核心文件和目录,操作系统的所有关键组件 | 40G~200G, |
/data(名字可自定义) | 存放数据库及存储服务等重要数据(系统出现故障,该分区数据可以恢复) | 剩余所有空间 |
LVM(逻辑卷管理器)
# 了解即可
# LVM(逻辑卷管理器):Linux中用于管理磁盘存储的工具 # 基本概念 物理卷(PV, Physical Volume):LVM管理的基础存储单位,通常是一个分区或整个磁盘。 卷组(VG, Volume Group):由一个或多个物理卷组成的存储池,逻辑卷是从卷组中分配的。 逻辑卷(LV, Logical Volume):从卷组中分配的存储空间,类似于传统的分区。可以进行格式化并挂载到文件系统。 元数据:LVM使用元数据来存储卷组、物理卷和逻辑卷的信息。 # LVM的优点 动态调整:可以在线扩展或缩减逻辑卷,无需重启操作系统。 快照:允许创建逻辑卷的时间点快照,方便备份与恢复。 条带化和镜像:支持将数据条带化到多个物理卷上,提升性能;也可以创建镜像逻辑卷,增加数据安全性。 简化管理:通过将多个物理卷汇总成卷组,可以简化存储管理。 # 常用命令 创建物理卷:pvcreate /dev/sdX 创建卷组:vgcreate myvg /dev/sdX /dev/sdY 创建逻辑卷:lvcreate -n mylv -L 10G myvg 格式化逻辑卷:mkfs.ext4 /dev/myvg/mylv 挂载逻辑卷:mount /dev/myvg/mylv /mnt 扩展逻辑卷:lvextend -L +5G /dev/myvg/mylv 或 lvextend -l +100%FREE /dev/myvg/mylv 缩减逻辑卷:lvreduce -L -5G /dev/myvg/mylv(注意,请先卸载逻辑卷并在缩减之前调整文件系统大小) 创建快照:lvcreate --size 1G --snapshot --name mysnapshot /dev/myvg/mylv 查看LVM信息:pvdisplay, vgdisplay, lvdisplay
磁盘管理之故障案例⭐⭐⭐⭐⭐
掌握Linux常见的磁盘空间不足故障案例(模拟、排查、原因、解决方法)
磁盘空间不足--(block占用导致磁盘空间不足)
- 错误提示:no space left on device
- 现象:利用df -h命令查询到某个磁盘磁盘分区使用率达到100%
- 注意:/sys/ /proc/等目录是虚拟目录,/dev/是设备目录,不要在里面创建
- 模拟:创建一个大文件
- dd if=/dev/zero of=/var/opt/nginx.log bs=1M count=5000
# 1.df -h 命令查看哪个分区空间不足 [root@yuan ~]# df -h # 假设根目录空间使用100% 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 47G 6.9G 41G 15% / /dev/sda1 1014M 138M 877M 14% /boot tmpfs 199M 0 199M 0% /run/user/0 # 2.du -sh 命令查看目录所占空间 su -sh /* su -sh /var/* su -sh /var/opt* # 找到具体的大文件或大目录 # 3.找出后取人是否可以删除
磁盘空间不足--(inode占用导致磁盘空间不足)
inode在磁盘格式化后,数量是固定的
现象:操作时提示no space left on device ,df -h 命令查看磁盘空间没有满
# 创建指定大小文件(用于作为磁盘分区) dd if=/dev/zero of=/tmp/size_100MB bs=1M count=100 # 磁盘格式化 mkfs.xfs /tmp/size_100MB # 创建挂载点进行挂载 touch -p /yuan/inode mount /tmp/size_100MB /yuan/inode # 创建测试文件 [root@yuan ~]# cd /yuan/inode [root@yuan inode]# echo yuan{01..51300}.txt|xargs touch 接下来会出现磁盘空间不足的报错(no space left on device) # 解决 df -h # 磁盘空间没有满 df -i # inode号使用100% 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 /dev/loop1 51200 51200 0 100% /yuan/inode find / -type d -size +1M
ls |xargs rm -f
磁盘空间不足--未彻底删除导致故障
- linux中一个文件彻底删除的条件:
- 硬链接数为0
- 文件调用数为0
- 排查
- 如何知道硬链接数为0(一般rm后通过ls、find查看,没有则为0)
- 如何知道进程调用数为0(lsof(list open files 显示打开的文件),lsof |grep 文件名)
# 两个xshell远程连接桌面同时连接同一台虚拟机 其中一台:tail -f /etc/passwd [root@yuan ~]# lsof /etc/passwd # 显示系统中所有被打开的文件(被调用的文件) COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME tail 23327 root 3r REG 253,0 938 34235338 /etc/passwd
lsof每一列 | 说明 |
第1列 | 命令或服务名字 |
第2列 | pid |
第3列 | 用户 |
第7列 | 文件大小(字节) |
第8列 | 文件inode号码 |
第9列 | 文件名 |
- 故障模拟
- 提示磁盘空间不足,df -h 提示磁盘空间满了
- 继续排查du -sh 排查、统计总大小,发现没有满
- 怀疑可能是文件未删除导致的
# 1.故障模拟 seq 50000000 >/yuan/inode/big.log # 会显示磁盘已满 tail -f /yuan/inode/big.log # 连接同一台虚拟机的另一个窗口执行 ls /yuan/inode/big.log |xargs rm -rf # 2.排查 [root@yuan ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/loop1 97M 97M 20K 100% /yuan/inode [root@yuan ~]# du -sh /yuan/inode 0 /yuan/inode # 3.发现问题继续排查 [root@yuan ~]# lsof |grep delete tail 25657 root 3r REG 7,1 95862784 67 /yuan/inode/big.log (deleted) # 在lsof中delete标记这个文件没有入口(硬链接数为0),但是还有进程调用 # 4.结束这个进程,重启服务 kill 进程号
总结
磁盘空间不足故障分类 | 现象 | 排查 | 解决 |
block | df -h磁盘空间不足 | df-h,du -sh,一层一层的往下找 | 确认后再删除 |
inode | df -h磁盘空间有剩余,创建文件,操作服务显示磁盘空间不足 | df -h,df -i,找出系统中最大的目录 | 确认后再删除 |
block文件未能彻底删除 | df -h查看磁盘空间不足,du -sh查看磁盘空间还有剩余 | lsof |grep delete,找出进程或服务 | 重启服务 |
文件系统
磁盘中文件的组织方式
常见文件系统 | 说明 |
xfs | centos 7默认的文件系统 |
ext4 | centos 6.x Ubuntu默认的文件系统 |
ext3 | centos 5.x 默认的文件系统 |
swap | 交换分区(也可以算是文件系统) |
磁盘性能指标
磁盘新能指标 | 说明 |
吞吐量(读写速度) | 一般指的是磁盘读写速度 |
iops | 每秒可以进行的io次数(io per second) |
延迟 | 进行读写的操作延迟 |
测试块存储性能:如何在Linux实例中使用FIO工具测试块存储性能_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战