@TOC

LVM与磁盘配额

LVM概述

  • Logical Volume Manager,逻辑卷管理
    • 能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性
    • ==/boot分区用于存放引导文件(内核,系统镜像等很重要的文件),不能基于LVM创建==
  • LVM机制的基本概念
    • PV(Physical Volume物理卷):物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录LVM的属性,并把存储空间分割成多个默认大小为4MB的基本单元(PE),从而构成物理卷。
    • VG(Volume Group卷组):由一个或多个物理卷组成一个整体,即称为卷组,在卷组中可以动态地添加或移除物理卷。
    • LV(Logical Volume逻辑卷):从卷组中分割出的一块空间,形成逻辑卷。使用mkfs等工具可在逻辑卷上创建文件系统。

LVM的管理命令

  • 主要命令

    功能 物理卷管理 卷组管理 逻辑卷管理
    Scan 扫描 pvscan vgscan lvscan
    Create 建立 pvcreate vgcreate lvcreate
    Display 显示 pvdisplay vgdisplay lvdisplay
    Remove 删除 pvremove vgremove lvremove
    Extend扩展 --- vgextend lvextend
    Reduce 减少 --- vgreduce lvreduce
  • LVM主要命令步骤

    1. 关闭主机,添加两块新硬盘,重启主机

    2. 先使用fdisk 工具将磁盘设备/dev/sdb、/dev/sdc划分出主分区sdb1、sdc1,==并且把分区类型的ID标记号改为"8e"(命令"t")(8e:Linux LVM)==

      fdisk /dev/sdb

      fdisk /dev/sdc

    3. 创建物理卷

      pvcreate /dev/sdb1 /dev/sdc1

    4. 创建卷组,卷组名为vgname1

      vgcreate vgname1 /dev/sdb1 /dev/sdc1 //也可vgcreate vgname1 /dev/sd{b,c}1,也可vgcreate vgname1 /dev/sd[b-c]1

    5. 创建逻辑卷,逻辑卷名为lvname1,容量为 20GB,生成的文件路径为/dev/vgname1/lvname1

      lvcreate -L 20G -n lvname1 vgname1 //-l指定PE的个数

    6. 对逻辑卷进行格式化,创建XFS文件系统,并挂载到/opt目录下

      mkfs -t xfs /dev/vgname1/lvname1

      mount /dev/vgname1/lvname1 /opt

      df -hT

    7. 再扩容(新磁盘创建完物理卷后)

      vgextend vgname1 /dev/sdc2 //扩容卷组

      lvextend -L +10G /dev/vgname1/lvname1 //扩容逻辑卷

      xfs_growfs /dev/vgname1/lvname1 //刷新xfs文件系统容量

      esize2fs /dev/vgname1/lvname1 //刷新ext4类型文件系统容量

LNM应用实例

磁盘配额概述

  • 设置磁盘限额

    当Linux根分区的磁盘空间耗尽时,Linux操作系统将无法再建立新的文件,同时也可能会出现服务程序崩溃、系统无法启动等故障。为了避免在服务器中出现类似磁盘空间不足的问题,可以启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行限制,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。

  • 在CentOS系统中,不同的文件系统使用不同磁盘配额配置管理工具。

    例如:XFS文件系统通过xfs_quota工具进行管理;EXT3/4文件系统通过quota工具进行管理。

  • 实现磁盘限额的条件

    • 需要Linux内核支持
    • 安装xfsprogs与quota软件包
  • Linux磁盘限额的特点

    • 作用范围:针对指定的文件系统(分区)
    • 限制对象:用户帐号、组帐号
    • 限制类型:磁盘容量、文件数量
    • 限制方法:软限制(提示即将超额)、硬限制(使用上限)
  • 配置过程

    1. 以支持配额功能的方式挂载文件系统(mount -o)(修改/etc/fstab,实现永久挂载)
    2. 编辑用户和组账号的配额设置
    3. 验证磁盘配额功能
    4. 查看磁盘配额使用情况

磁盘配额管理

CentOS7中设置磁盘配额步骤

  1. 检查是否已安装xfsprogs和xfs_quota软件包、

    rpm -q xfsprogs quota

    yum install -y xfsprogs quota

  2. 以支持配额功能的方式挂载文件系统

    umount /dev/vgame1/lvname1

    mount-o usrquota,grpquota /dev/vgame1/lvname1 /opt //添加挂载参数"usrquota,grpquota"用于增加对用户、组配额功能的支持

    或者

    vim /etc/fstab

    /dev/vgname/lvname1 /opt xfs defaults,usrquota,grpquota 0 0

    umount /dev/vgname1/lvname1

    mount -a //-a选项,将/etc/fatab的所有内容重新加载

  3. 编辑用户和组账号的配额设置

    useradd zhangsan

    passwd zhangsan

    xfs_quota -x -c 'limit -u bsoft=80M bhard=100M isoft=40 ihard=50 zhangsan' /opt/

    • -x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
    • -c:表示直接调用管理命令。
    • -u:指定用户账号对象
    • -g:指定组账号对象
    • bsoft:设置磁盘容量的软限制数值(默认单位为KB)
    • bhard:设置磁盘容量的硬限制数值(默认单位为KB)
    • isoft:设置磁盘文件数的软限制数值(i指的是inode号)
    • ihard:设置磁盘文件数的硬限制数值

    xfs_quota -x -c 'limit -u bsoft=80M bhard=100M zhangsan' /opt/ //仅限制磁盘容量

    xfs_quota -x -c 'limit -u isoft=40 ihard=50 zhangsan' /opt/ //仅限制文件数

    xfs_quota -c 'quota -uv zhangsan' /opt/ //查看zhnangsan磁盘容量限制

    xfs_quota -c 'quota -i -uv zhangsan' /opt/ //查看zhangsan文件数限制

  4. 验证磁盘配额功能

    chmod 777 /opt

    su zhangsan

    cd /opt

    dd if=/dev/zero of=/opt/ddtest.txt bs=10M count=12 //验证磁盘容量超限(xfs没有提示,ext4会有提示)

    touch {aa,bb,cc,dd,ee,ff}.txt //验证磁盘文件数超限

    dd命令是一个设备转换和连续复制命令

    "if=":指定输入设备(或文件)

    "of=":指定输出设备(或文件)

    "bs=":指定读取数据块的大小

    "count=":指定读取数据块的数量

    /dev/zero:"零"设备文件,可以i无限的提供空字符。常用来生成一个特定大小的文件。

  5. 查看配额使用情况

    xfs_quota -x -c 'report -a' //查看所有可用分区的磁盘容量配额使用情况

    xfs_quota -x -c 'report -aih'

一些排障方法

  • 检测磁盘是否损坏

    badblocks -sv /dev/sda1

  • 磁盘容量的使用情况

    df -h

    df -i

  • 磁盘的IO使用情况(iotop和atop需要额外安装)

    iosatat

    • %iowait(cpu等待输入输出完成的百分比):值过高,表示硬盘的IO不足,出现瓶颈
    • %idle:
    • 值高时,CPU比较空闲(如果值高但是响应慢,可能是CPU在等待分配内存,可能是此时内存不够用,需要加大内存容量或者释放缓存)
    • 值持续低于十,可能是CPU的处理能力变低,需要加大CPU性能,或者排查有无大量占用CPU使用率的进程

    iotop

    atop

  • 内存的使用情况

    free [-m] //-m以兆为单位