第十二篇:系统管理体系之磁盘管理

磁盘管理体系概述

磁盘基础

  • 内存:临时存放,断电后丢失
  • 磁盘:永久保存

  分类

运行方式与原理 详细信息
机械硬盘(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 + uctr + 删除键
# 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)

 

posted @   猿小姜  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示