一 LVM 逻辑卷管理
1.1 LVM概述
- LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,它是建立在硬盘和分区之上、文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,因此 能够在保持现有数据不变的情况下动态调整磁盘容量,从而增强磁盘管理的灵活性。
- 在安装 CentOS 系统的过程中选择自动分区时,就会默认采用 LVM 分区方案,不需要再进行手动配置。如果有特殊需要,也可以使用安装向导提供的磁盘定制工具调整 LVM 分区。需要注意的是,/boot 分区不能基于 LVM 创建,必须独立出来。
- 在学习 LVM 的管理操作之前需要了解 LVM 的几个基本术语。
1. PV(Physical Volume,物理卷)
物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录LVM的属性,并把存储空间分割成默认大小为4MB的基本单元(Physical Extent,PE),从而构成物理卷
2. VG(Volume Group,卷组)
卷组:由一个或多个物理卷组成一个整体。在卷组中可以动态的添加或移除物理卷,许多个物理卷可以分别组成不同的卷组,卷组的名称由用户自定义
3. LV(Logical Volume,逻辑卷 )
逻辑卷建立在卷组之上,与物理卷没有直接关系,对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中“切出”一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷,使用mkfs等工具在逻辑卷上创建文件系统以后,就可以挂载到Linux系统中的目录下使用
二 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 |
2.1 物理卷管理
1 pvscan 命令
pvscan 命令用于扫描系统中所有的物理卷,并输出相关信息。使用自动分区方案安装的 CentOS,其系统盘 sda 被划分为 sda1 和 sda2 两个分区,其中 sda2 分区被转换为物理卷,并基于该物理卷创建 cl 卷组
[root@localhost ~]# pvscan
PV /dev/sda2 VG cl lvm2 [99.00 GiB / 4.00 MiB free]
Total: 1 [99.00 GiB] / in use: 1 [99.00 GiB] / in no VG: 0 [0 ]
2 pvcreate 命令
pvcreate 命令用于将分区或整个硬盘转换成物理卷,主要是添加 LVM 属性信息并划分
PE 存储单位。该命令需要使用硬盘或分区的设备文件作为参数(可以有多个)。例如,执
行以下操作将把分区/dev/sdb1、/dev/sdb2、/dev/sdb3 转换成物理卷。
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1. //分区签名的警告提示
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb2.
WARNING: dos signature detected on /dev/sdb3 at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb3.
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
3 pvdisplay 命令
pvdisplay 命令用于显示物理卷的详细信息,需要使用指定的物理卷作为命令参数,默认时将显示所有物理卷的信息。例如,执行以下“pvdisplay /dev/sdb3”命令可以查看物理卷
/dev/sdb3 的详细信息
[root@localhost ~]# pvdisplay /dev/sdb3
"/dev/sdb3" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb3 VG Name
PV Size 20.00 GiB
Allocatable NO PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rxXULc-L7ov-FTlF-rj7s-XZAr-ysHE-rhJTww
4 pvremove 命令
pvremove 命令用于将物理卷还原成普通分区或磁盘,不再用于 LVM 体系,被移除的物理卷将无法被 pvscan 识别。例如,执行以下“pvremove /dev/sdb3”命令可以将物理卷
/dev/sdb3 从 LVM 体系中移除。
[root@localhost ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped
2.2 卷组管理
1 vgscan 命令
vgscan 命令用于扫描系统中已建立的 LVM 卷组及相关信息。例如,通过执行以下的
vgscan 命令后可以列出 cl 卷组
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "cl" using metadata type lvm2
2 vgcreate 命令
vgcreate 命令用于将一个或多个物理卷创建为一个卷组,第一个命令参数用于设置新卷组的名称,其后依次指定需要加入该卷组的物理卷作为参数。例如,若要使用物理卷
/dev/sdb1 和/dev/sdb2 创建名为 web_document 的卷组,可以执行以下操作:
[root@localhost ~]# vgcreate web_document /dev/sdb1 /dev/sdb2
Volume group "web_document" successfully created
3 vgdisplay 命令
vgdisplay 命令用于显示系统中各卷组的详细信息,需要使用指定卷组名作为命令参数
(未指定卷组时将显示所有卷组的信息)。
[root@localhost ~]# vgdisplay web_document
--- Volume group ---
VG Name web_document 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 Pk3kqd-1ydD-kvId-6E39-hTnD-592f-Q7DG22
4 vgremove 命令
vgremove 命令用于删除指定的卷组,将指定卷组名称作为参数即可。删除时应确保该卷组中没有正在使用的逻辑卷。
[root@localhost ~]# vgremove web_document
Volume group "web_document" successfully removed
5 vgextend 命令
vgextend 命令用于扩展卷组的磁盘空间。当创建了新的物理卷,并需要将其添加到已有卷组中时,就可以使用 vgextend 命令。该命令的第一个参数为需要扩展容量的卷组名称, 其后为需要添加到该卷组中的各物理卷。
[root@localhost ~]# vgcreate web_document /dev/sdb1
Volume group "web_document" successfully created
[root@localhost ~]# vgextend web_document /dev/sdb2
Volume group "web_document" successfully extended
2.3 逻辑卷管理
1 lvscan 命令
lvscan 命令用于扫描系统中已建立的逻辑卷及相关信息。
[root@localhost ~]# lvscan
ACTIVE '/dev/cl/swap' [7.88 GiB] inherit
ACTIVE '/dev/cl/home' [41.12 GiB] inherit
ACTIVE '/dev/cl/root' [50.00 GiB] inherit
2 lvcreate 命令
lvcreate 命令用于从指定的卷组中分割空间,以创建新的逻辑卷。需要指定逻辑卷大小、名称及所在的卷组名作为参数。逻辑卷创建完成以后,可以通过“/dev/卷组名/逻辑卷名”(或“/dev/mapper/卷组名-逻辑卷名”)形式的设备文件进行访问。此命令的基本格式如下
- lvcreate –L 容量大小 -n 逻辑卷名 卷组名
[root@localhost ~]# lvcreate -L 10G -n bdqn web_document
Logical volume "bdqn" created.
[root@localhost ~]# ls /dev/web_document/bdqn
/dev/web_document/bdqn //逻辑卷bdqn 的链接文件
[root@localhost ~]# ls /dev/mapper/web_document-bdqn
/dev/mapper/web_document-bdqn //逻辑卷bdqn 的设备文件
3 lvdisplay 命令
lvdisplay 命令用于显示逻辑卷的详细信息,可以指定逻辑卷的设备文件作为参数,也
可以使用卷组名作为参数,以显示该卷组中所有逻辑卷的信息。
[root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
LV Path /dev/web_document/bdqn
LV Name bdqn
VG Name web_document
LV UUID I6IdqV-wTGz-Dg6o-6vwq-5D4h-E7VW-K2kmSh
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-05-02 09:51:18 -0400
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit Read ahead sectors auto
- currently set to 8192
Block device 253:3
4 lvextend 命令
lvextend命令用于动态扩展逻辑卷的空间,当目前使用的逻辑卷空间不足时,可以从所在卷组中分割额外的空间进行扩展。只要指定增加的容量大小和逻辑卷文件位置即可。前提是该卷组中还有尚未分配的磁盘空间,否则需要先扩展卷组容量
- lvextend -L +大小 /dev/卷组名/逻辑卷名
[root@localhost ~]# lvextend -L +10G /dev/web_document/bdqn
Size of logical volume web_document/bdqn changed from 10.00 GiB (2560 extents)
to 20.00 GiB (5120 extents).
Logical volume web_document/bdqn successfully resized.
[root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
……
LV Size 20.00 GiB //容量已由原来的 10GB 变为 20GB
……
[root@localhost ~]# xfs_growfs /dev/web_document/bdqn
meta-data=/dev/mapper/web_document-bdqn isize=512 agcount=8, agsize=655360 blks
=
= sectsz=512 attr=2, projid32bit=1
crc=1 finobt=0 spinodes=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 bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
5 lvremove 命令
lvremove命令用于删除指定的逻辑卷,直接使用逻辑卷的设备文件作为参数即可
[root@localhost ~]# lvremove /dev/web_document/bdqn
Do you really want to remove active logical volume web_document/bdqn?[y/n]: y
Logical volume "bdqn" successfully remove
2.4 LVM应用实例
1 命令实操演示
- 首先在VMware软件centos 7系统中添加两块10G大小的硬盘
- 将/dev/sdb 和/dev/dbc 分区转换为物理卷
- 将上述两个物理卷整合,创建名为vg01的卷组
- 在vg01卷组中创建一个名为lv01的逻辑卷,容量设置为15GB
- 使用mkfs命令对逻辑卷lv01进行格式化,创建xfs文件系统,并挂载到/maibox目录下
- 使用lvextend命令为逻辑卷lv01加2GB,再用xfs-grows命令更新系统识别的文件大小
三 磁盘配额
3.1 磁盘配额概述
1 磁盘配额的作用范围
xfs_quota 设置的磁盘配额功能,只在指定的文件系统(分区)内有效,用户使用其他未设置配额的文件系统时,将不会受到限制。
2 磁盘配额的限制对象
xfs_quota 主要针对系统中指定的用户账号、组账号进行限制,没有被设置限额的用户或组将不受影响。对组账号设置配额后,组内所有用户使用的磁盘容量、文件数量的总和不 能超过限制。
3 磁盘配额的限制类型
- 磁盘容量:限制用户能够使用的磁盘数据块(Block)大小,也就是限制磁盘空间大小,默认单位为 KB。
- 文件数量:限制用户能够拥有的文件个数。在 Linux 操作系统中,每一个文件都有一个对应的数字标记,称为 i 结点(Inode)编号,这个编号在同一个文件系统内是唯一的,因此 xfs_quota 通过限制 i 结点的数量来实现对文件数量的限制。
4 磁盘配额的限制方法
-
软限制:指定一个软性的配额数值(如 480MB 磁盘空间、180 个文件),在固定的宽限期(默认为七天)内允许暂时超过这个限制,但系统会给出警告信息。
-
硬限制:指定一个硬性的配额数值(如 500MB 磁盘空间、200 个文件),是绝对禁止用户超过的限制值,当达到硬限制值时,系统也会给出警告并禁止继续写入数 据。硬限制的配额值应大于相应的软限制值,否则软限制将失效。
从以上描述中可以看出,在实施磁盘配额的实际过程中,只有当用户(或组)、文件系统(分区)及配额数值都满足限额条件时,xfs_quota 才会对操作进行限制。
3.2 磁盘配额步骤
临时设置(大部分都是通过命令实现),永久设置(都是通过源码文件中配置)
大部分命令设置都是临时生效,重启失效
配置文件是永久生效
编辑用户和组账号的配额设置:组的配额是固定的,
3.3 启动磁盘配额支持
添加usrquota,grpquota挂载参数
临时设置需要加上 -o 参数
3.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