理论篇-Linux---LVM与磁盘配额(逻辑卷管理与磁盘配额管理)

一、LVM概述

Logical Volume Manager,逻辑卷管理

  • 动态调整磁盘容量,从而提高磁盘管理的灵活性

  • /boot分区用于存放引导文件,不能基于LVM创建

  • 图形界面管理工具

    • system-config-lvm

LVM机制的基本概念
PV(物理卷)
VG(卷组)
LV(逻辑卷)

1.1 PV(Physical Volume,物理卷)

物理卷是 LVM 机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录 LVM 的属性,并把存储空间分割成默认大小为 4MB 的基本单元(Physical Extent,PE),从而构成物理卷
在这里插入图片描述
对用于转换成物理卷的普通分区,建议先使用 fdisk 工具将分区类型的 ID 标记号改为“8e”。若是整块硬盘,可以将所有磁盘空间划分为一个主分区后再做相应调整。

1.2 VG(Volume Group,卷组)

由一个或多个物理卷组成一个整体,即称为卷组,在卷组中可以动态地添加或移除物理卷。
许多个物理卷可以分别组成不同的卷组,卷组的名称由用户自行定义。
在这里插入图片描述

1.3 3.LV(Logical Volume,逻辑卷)

逻辑卷建立在卷组之上,与物理卷没有直接关系。对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中“切出”一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷。
使用 mkfs 等工具在逻辑卷上创建文件系统以后,就可以挂载到 Linux 操作系统中的目录下使用。
在这里插入图片描述
通过上述对物理卷、卷组、逻辑卷的解释可以看出,建立 LVM 分区管理机制的过程如下: 首先,将普通分区或整个硬盘创建为物理卷;然后,将物理上比较分散的各物理卷的存储空间组成一个逻辑整体,即卷组;最后,基于卷组这个整体,分割出不同的数据存储空间,形成逻辑卷。逻辑卷才是最终用户可以格式化并挂载使用的存储单位。

二、LVM 的管理命令

LVM 管理命令主要包括三大类:物理卷(PV)管理、卷组(VG)管理、逻辑卷(LV)管理,对应的命令程序文件分别以“pv”“vg”“lv”开头

功能 PV 管理命令 VG 管理命令 LV 管理命令
Scan(扫描) pvscan vgscan lvscan
Create(建立) pvcreate vgcreate lvcreate
Display(显示) pvdisplay vgdisplay lvdisplay
Remove(移除) pvremove vgremove lvremove
Extend(扩展) vgextend lvextend
Reduce(减少) vgreduce lvreduce

几个主要命令的格式
pvcreate 设备名1 [设备名2 … …]
vgcreate 卷组名 物理卷名1 物理卷名2
lvcreate -L 容量大小 -n 逻辑卷名 卷组名
lvextend -L +大小 /dev/卷组名/逻辑卷名

2.1 物理卷管理

2.1.1 pvscan 命令

  • pvcreate用于将分区或整个硬盘转换为物理卷,主要是添加LVM属性并划分PE存储单元

  • 该命令需要使用硬盘或分区的设备文件作为参数

例如

[root@localhost ~]# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created.

2.1.2 pvscan命令

  • pvscan命令用于扫描系统中的所有物理卷,并输出相关信息。

例如

[root@localhost ~]# pvscan
  PV /dev/sdd1                      lvm2 [5.00 GiB]
  Total: 3 [44.99 GiB] / in use: 2 [39.99 GiB] / in no VG: 1 [5.00 GiB]

2.1.3 pvdisplay命令

  • pvdisplay命令用于显示物理卷的详细信息

  • 需要使用指定的物理卷作为命令参数,默认时将显示所有物理卷信息

例如

[root@localhost ~]# pvdisplay /dev/sdd1
  "/dev/sdd1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bNDg18-PxbF-0GCW-365f-RnO0-OHJ0-n5RzJE

2.1.4 pvremove命令

  • pvremove命令用于将物理卷还原成普通分区或磁盘,不再用于LVM体系

  • 被移除的物理卷将无法被pvscan命令识别

例如

[root@localhost ~]# pvremove /dev/sd[b-c]1
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
[root@localhost ~]# pvscan
No matching physical volumes found

2.2 VG卷组管理

2.2.1 vgcreate命令

  • vgcreate命令用于将一个或多个物理卷创建为一个卷组
  • 第一个命令参数用于设置新卷组的名称。然后依次指定需要加入到该卷组的物理卷作为参数
    root@localhost ~]# vgcreate 卷组名称 物理卷

2.2.2 vgscan命令

  • vgscan命令用于扫描系统中已建立的LVM卷组及相关信息

2.2.3 vgdisplay命令

  • vgdisplay命令用于显示系统中各卷组的详细信息

  • 需要指定卷组名称作为命令参数(未指定卷组名称时将显示所有卷组的信息)

  • 命令格式同pvdisplay

2.2.4 vgremove命令

  • vgremove命令用于删除指定的卷组,指定卷组名称作为参数即可

  • 删除时应确保该卷组中没有正在使用的逻辑卷

2.2.5 vgextend命令

  • vgextend命令用于扩展卷组的磁盘空间

  • 当建立了新的物理卷,并需要将其添加到已有的卷组中时,就可以使用vgextend命令

  • vgextend命令第一个参数为需要扩展容量的卷组名称,其后为需要添加到该卷组中的各物理卷

例如
[root@localhost ~]# vgextend 123 /dev/sdd1
  Volume group "123" successfully extended

2.2.6 vgreduce命令

  • vgreduce命令:从卷组中删除物理卷

  • vgreduce指令通过删除LVM卷组中的物理卷来减少卷组容量。

  • 删除删除卷组中丢失的物理卷,使卷组恢复正常状态

vgreduce [选项] [参数]

2.3 LV逻辑卷管理

2.3.1 lvcreate命令

  • lvcreate命令用于从指定的卷组中分割空间,以创建新的逻辑卷

  • 需要指定逻辑卷大小,名称和所在的卷组名称作为参数

  • 逻辑卷创建好以后,可以通过“/dev/卷组名/逻辑卷名”形式的设备文件进行访问(或/dev/mapper/卷组名-逻辑卷名)

lvcreate -L 容量大小 -n 逻辑卷名 卷组名

2.3.2 lvscan命令

  • lvscan命令用于扫描系统中已建立的逻辑卷及相关信息

2.3.3 lvdisplay命令

  • lvdisplay命令用于显示逻辑卷的详细信息

  • 需要指定逻辑卷的设备文件作为参数,也可以使用卷组名作为参数(显示该卷组中的所有逻辑卷信息)

  • 不指定参数则显示所有,同pvdisplay和vgdisplay

2.3.4 lvextend命令

  • lvextend命令用于动态扩展逻辑卷的空间,当目前使用的逻辑卷空间不足时,可以从所在卷组中分割额外的空间进行扩展

  • 需要指定增加的容量大小和逻辑卷文件位置

  • 前提是该卷组中还有尚未分配的磁盘空间,否则需要先扩展卷组容量

  • 挂载文件系统后扩容,需要执行以下命令才能被系统识别

xfs格式的扩容需要输入这条命令
xfs_growfs /dev/卷组名/逻辑卷名

ext 4 格式的扩容需要输入这条命令
resize2fs /dev/卷组名/逻辑卷名
  • xfs 只支持扩容,不支持减少

  • ext 4 的更新形式。可以reduce

lvextend命令基本格式
lvextend -L +大小 /dev/卷组名/逻辑卷名
例如

[root@localhost ~]# lvextend -L +10G /dev/123/111
  Size of logical volume 123/111 changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
  Logical volume 123/111 successfully resized.

2.3.5 lvremove命令

  • lvremove命令用于删除指定的逻辑卷

  • 直接使用逻辑卷的设备文件作为参数即可

2.3.6 lvreduce命令

  • lvreduce命令用于减少LVM逻辑卷占用的空间大小。

  • 使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。
    例如

[root@localhost ~]# lvreduce -L -5G /dev/123/111
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce 123/111? [y/n]: y
  Size of logical volume 123/111 changed from 15.00 GiB (3840 extents) to 10.00 GiB (2560 extents).
  Logical volume 123/111 successfully resized.

三、LVM应用步骤

在这里插入图片描述
1、VMware软件中,在centos 7系统中添加两块20G磁盘

[root@localhost ~]# fdisk -l		

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c1f00

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

2、开始创建分区,同样的方法创建/dev/sdc

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

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

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

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

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e		//分区ID改成8e,8e是lvm格式,我们保持前后格式相同
已将分区“Linux”的类型更改为“Linux LVM”

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

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

3、查看分区创建情况

[root@localhost ~]# fdisk -l		
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c1f00

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x50f1e234

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6a90762a

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM

4、创建物理卷

[root@localhost ~]# pvcreate /dev/sd[b-c]1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvscan		'//查看物理卷'
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  PV /dev/sdb1                      lvm2 [<20.00 GiB]
  Total: 2 [<40.00 GiB] / in use: 0 [0   ] / in no VG: 2 [<40.00 GiB]

5、创建卷组

[root@localhost ~]# vgcreate mail_stor /dev/sd[b-c]1
  Volume group "mail_stor" successfully created
[root@localhost ~]# vgscan		'//扫描卷组'
  Reading volume groups from cache.
  Found volume group "mail_stor" using metadata type lvm2
[root@localhost ~]# vgdisplay		'//查看卷组详细信息'
  --- Volume group ---
  VG Name               mail_stor
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               iEKi0I-hg0i-it0a-cOwe-DfPj-FkXs-fnSP4N

6、创建逻辑卷

[root@localhost ~]# lvcreate -L 20G -n mbox mail_stor
  Logical volume "mbox" created.
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/mail_stor/mbox
  LV Name               mbox
  VG Name                mail_stor
  LV UUID                VXD0B0-wxqV-wXgk-b7N4-GEPE-c1au-u6nGBs
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-11-04 14:45:59 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

7、格式化逻辑卷

[root@localhost 1]# mkfs.xfs /dev/mail_stor/mbox
meta-data=/dev/mail_stor/mbox              isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

8、创建挂载点,设置自动挂载

[root@localhost 1]# mkdir mailbox
[root@localhost 1]# vim /etc/fstab

加入一行
在这里插入图片描述
9、启用挂载

[root@localhost 1]# mount -a
[root@localhost 1]# df -hT		'//查看是否挂载成功'

10、给逻辑卷扩容10G

[root@localhost 1]# lvextend -L +10G /dev/mail_stor/mbox
  Size of logical volume 1/11 changed from 20.00 GiB (5120 extents) to 30.00 GiB (7680 extents).
  Logical volume 1/11 successfully resized.

11、使用xfs_growfs命令使Linux系统重新识别文件系统大小

[root@localhost 1]# xfs_growfs /dev/mail_stor/mbox

四、磁盘配额

4.1 磁盘配额概述

实现磁盘限额的条件

  • 需要Linux内核支持
  • 安装xfsprogs与quota软件包
  • quota软件包在7.0版本自动加入到xfsprogs,所以 只需要安装xfsprogs就可以。

Linux磁盘限额的特点

  • 作用范围:针对指定的文件系统(分区)

  • 限制对象:用户账号,组账号

  • 限制类型:磁盘容量,文件数量

  • 限制方法:软限制,硬限制

  • 软限制:可以超出限制,但是有时限期,如时限7天,超出时间就将多余的删除

  • 软限制 小于等于 硬限制

4.2 磁盘配额步骤

  • 临时设置(大部分都是通过命令实现),永久设置(都是通过源码文件中配置)

  • 大部分命令设置都是临时生效,重启失效

  • 配置文件是永久生效

  • 编辑用户和组账号的配额设置:组的配额是固定的
    在这里插入图片描述

4.3 启动磁盘配额支持

添加usrquota,grpquota挂载参数
临时设置需要加上 -o 参数

4.4 磁盘配额管理

编辑用户和组账号的配额设置
使用xfs_quota命令编辑配额设置
xfs_quota -x -c’limit -u bsoft =N bhard=N isoft=N ihard=N 用户名’挂载点

  • 常用选项
    -u //user
    -g //group
    -x //专家模式
    -c //命令(command)

  • 限制字段
    bsoft //容量软限制
    bhard //容量硬限制 (block 块)
    isoft //数量软限制
    ihard //数量硬限制 (inode 节点)

验证磁盘配额功能

  • 切换到设置配额的分区(挂载目录)
  • 创建指定数量的文件:使用touch命令,或cp命令
  • 创建指定容量的文件:使用dd命令,或cp命令 (dd命令等同于复制,一般用于验证)

查看配额使用情况
xfs_quota -x -c 'report 选项’挂载点

  • report常用选项
    -a //all 所有
    -i //节点,数量
    -b //block 块,容量
    -u //user
    -g //group

  • 查看所有用户配额

[root@localhost ~]# xfs_quota -x -c 'report -a' /挂载点
  • 查看用户配额信息,看容量信息
[root@localhost ~]# xfs_quota -c 'quota -uv 用户名' /挂载点
  • 查看用户配额信息,看节点信息
[root@localhost ~]# xfs_quota -c 'quota -iuv 用户名' /挂载点
  • 连续复制文件(/mail/demo01.txt是自己刚刚创建的文件),每次复制1M,连续复制N次
[root@localhost ~]# dd if=/dev/zero of=/mail/demo01.txt bs=1M count=80

猜你喜欢

转载自blog.csdn.net/ycycyyc_/article/details/107052474