一、什么是LVM
LVM 是逻辑卷管理,它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。LVM 为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。
重点在于可以弹性地调整文件系统的容量,需要文件的读写性能或是数据的可靠性,LVM可以整合多个物理分区,让这些分区看起来像是一块磁盘一样,能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性。
注意:/boot分区用于存放引导文件,不能基于LVM创建
LVM的优点:
- LVM是可以允许对卷组进行方便操作的抽象层,包括重新设定文件系统的大小。
- 允许在多个物理设备间重新组织文件系统。
- 可以弹性的更改LVM的容量。
二、LVM机制的基本概念
PE(物理扩展块):VM 默认使用4MB的PE数据块,它是整个LVM中最小的存储数据单位,也就是说我们的文件数据都是借由写入PE来完成的
PV(物理卷): 物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录LVM的属性,并把存储空间分割成默认大小为4MB的基本单元(PE),从而构成物理卷。物理卷一般直接使用设备文件名称,例如:/dev/sdb1、/dev/sdc1、/dev/sdd 等。
VG(卷组): 由一个或多个物理卷组成一个整体,即称为卷组,许多个物理卷可以分别组成不同的卷组,卷组的名称可以由我们自行定义,在卷组中可以随时根据需求动态地添加或移除物理卷。
LV(逻辑卷): 逻辑卷基于PE建立在卷组之上,与物理卷没有直接关系。对于逻辑卷来说,每一个卷组就是一个整体,从卷组中分割出的一块空间,形成逻辑卷。使用mkfs 等工具可在逻辑卷上创建文件系统,就可以挂载到Linux系统中的目录下使用。
三、LVM的管理命令
主要命令:
| 功能 | PV管理命令 | VG管理命令 | LV管理命令 |
|---|---|---|---|
| Scan(扫描) | pvscan | vgscan | lvscan |
| Create(建立) | pvcreate | vgcreate | lvcreate |
| Display(显示) | pvdisplay | vgdisplay | redisplay |
| Remove(移除) | pvremove | vgremove | lvremove |
| Extend(扩展) | —— | vgextend | lvextend |
| Reduce(减少) | —— | vgreduce | lvreduce |
四、逻辑卷配置,详细流程
1、创建步骤:
1)创建物理卷:将/dev/sdb1和/dev/sdc1创建成物理卷;
2)创建卷组:创建卷组nmixx,将2个物理卷分配给nmixx
3)创建逻辑卷:从vg01中取8G容量创建逻辑卷twice
查看一下
4)格式化逻辑卷:将逻辑卷格式化为XFS文件系统
5)挂载逻辑卷:将逻辑卷twice挂载到/mnt/itzy 目录下
需要使用到的命令
pvcreate 设备名1 设备名2 [设备名3]... //创建物理卷
vgcreate 卷组名 物理卷名1 物理卷名2 [物理卷3]... //创建卷组
lvcreate -L 容量大小 -n 逻辑卷名 卷组名 //创建逻辑卷
mkfs.xfs 逻辑卷名(/dev/卷组名/逻辑名) //将逻辑卷格式化
mount 逻辑卷名(/dev/卷组名/逻辑名) 挂载点 //将逻辑卷挂载
vim /etc/fstab //将逻辑卷永久挂载
2、扩展逻辑卷
1)如果此时卷组不够,需再创建物理卷
2)先重新读分区表,然后用vgextend命令,扩展卷组
3)### 再扩展逻辑卷lvextend,并将文件系统扩容(激活)
4)解绑后重新挂载逻辑卷:将逻辑卷twice挂载到/mnt/itzy 目录下
扩展中会用到的命令
[root@localhost ~]# fdisk /dev/sdc(要创建的分区) //规划磁盘分区,新建第二个分区
[root@localhost ~]# partprobe //刷新分区,使系统识别到新建的分区
[root@localhost ~]# pvcreate /dev/sdc2 //创建物理卷/dev/sdc2
[root@localhost ~]# pvdisplay /dev/sdc2 //查看物理卷
[root@localhost ~]# vgextend nmixx /dev/sdc2 //将物理卷/dev/sdc2加入卷组 nmixx
[root@localhost ~]# vgdisplay nmixx //显示卷组的信息
[root@localhost ~]# lvextend -L +10G /dev/nmixx/twice //为逻辑卷扩容5G
[root@localhost ~]# lvdisplay /dev/nmixx/twice //显示逻辑卷信息
[root@localhost ~]# xfs_growfs /dev/nmixx/twice //将文件系统扩容
umount 逻辑卷名(/dev/卷组名/逻辑名) 挂载点 //将逻辑卷解绑
mount 逻辑卷名(/dev/卷组名/逻辑名) 挂载点 //将逻辑卷挂载
[root@localhost ~]# df -Th //查看磁盘信息
五、磁盘配额
1、磁盘配额概述
1.1 磁盘配额综述
磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。
在此概念中,有以下几个重点需要注意:
- 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;
- 磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;
- 我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)
磁盘配额就好像我们出租写字楼,虽然整栋楼的空间非常大,但是酬整栋楼的成本太高。我们可以分开出租,用户如果觉得不够用,则还可以租用更大的空间。不过租用是不能随便进行的,其中有几个规矩必须遵守:
- 我的楼是租给外来用户的(普通用户),可以租给一个人(用户),也可以租给一家公司(用户 组),但是这栋楼的所有权是我的,所以不能租给我自己(root 用户);
- 如果要租用,则只能在每层租用一定大小的空间,而不能在一个房间中再划分出子空间来租用(配额只能针对分区,而不能限制某个目录);
- 租户可以决定在某层租用多大的空间(磁盘容量限制),也可以在某层租用几个人员名额,这样只有这几个人员才能进入本层(文件个数限制)。
1.2 磁盘配额的使用条件
磁盘配额要想正常使用,有以下几个前提条件:
- 内核必须支持磁盘配额。
- 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
- 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。
1.3 磁盘配额中的常见概念
磁盘容量限制和文件个数限制
我们除了可以通过限制用户可用的 block 数量来限制用户可用的磁盘容量,也可以通过限制用户可用的 inode 数量来限制用户可以上传或新建的文件个数。
软限制和硬限制
软限制可理解为警告限制,硬限制就是真正的限制了。比如,规定软限制为 100MB,硬限制为 200MB,那么,当用户使用的磁盘空间为 100~200MB 时,用户还可以继续上传和新建文件,但是每次登录时都会收到一条警告消息,告诉用户磁盘将满。
2、启用磁盘配额支持
1)检查CentOS 7系统中是否已安装 xfsprogs 和 xfs_quota 软件包
[root@localhost ~]# rpm -q xfsprogs quota //检查软件包是否安装,发现都已安装
2)添加磁盘配额属性,启用文件系统的配额支持
方式一:使用 mount 命令,添加usrquota、grpquota挂载参数。
[root@localhost ~]# umount /dev/sdb1 //因为sdb1之前已经挂载过,需要先解挂
[root@localhost ~]# mount -o usrquota,grpquota /dev/sdb1 /data/aa
方式二:手动添加的方式,会在下次重新挂载时消失,因此我们可以直接修改 /etc/fstab 文件,将挂载参数写入到配置文件中,这样,即便重新挂载也不会消失。
[root@localhost ~]# vim /etc/fstab //修改配置文件,启用磁盘配额支持
UUID=e0b714cd-c33e-42b2-a051-1e1f3333b4b7 /data/aa xfs defaults,usrquota,grpquota 0 0
[root@localhost ~]# mount -a //重新挂载
3、磁盘配额管理
1、编辑用户和组账号的配额设置
使用 xfs_quota 命令编辑配额设置:
xfs_quota -x -c "limit -u bsoft=N bhard=N isoft=N ihard=N 用户名" 挂载点
常用选项:
- -x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
- -c:表示直接调用管理命令。
- -u:指定用户账号对象。
- -g:指定组账号对象。
限制字段:
- bsoft:设置磁盘容量的软限制数值(默认单位为KB)。
- bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
- isoft:设置磁盘文件数的软限制数值。
- ihard:设置磁盘文件数的硬限制数值。
2、查看磁盘配额使用
xfs_quota 命令查看磁盘配额的设置和使用情况:
xfs_quota -x -c "report 选项" 挂载点
report 常用选项:
- -u:对用户查看
- -g:对组查看
- -a:查看所有可用分区的配额使用报告
- -b:查看磁盘容量
- -i:查看文件数
- -h:人性化显示
3、验证磁盘配额功能
1)验证lili用户的容量硬限制100M
[root@localhost ~]# chmod 777 /data/aa //设置所有人对/data/aa目录都有读写执行的全新
[root@localhost ~]# su lili //切换为lili用户
[lili@localhost root]$ cd /data/aa //切换到/data/aa目录下
[lili@localhost aa]$ dd if=/dev/zero of=/data/aa/yuji.txt bs=10M count=11 //复制110M的内容到aa目录下的文件中,提示超出磁盘限额,只能写入100M dd: 写入"/data/aa/yuji.txt" 出错: 超出磁盘限额
2)验证lili用户的文件数量硬限制5个
[root@localhost ~]# su lili
[lili@localhost root]$ cd /data/aa
[lili@localhost aa]$ touch file1.txt //创建一个文件,因为之前100M的容量已被使用,故即使文件数量限制还未达到,也无法创建
touch: 无法创建"file1.txt": 超出磁盘限额
[lili@localhost aa]$ rm -rf * //清空目录
[lili@localhost aa]$ touch file{1..10}.txt //一次性创建10个文件,系统提示后5个文件超出磁盘限额
touch: 无法创建"file6.txt": 超出磁盘限额
touch: 无法创建"file7.txt": 超出磁盘限额
touch: 无法创建"file8.txt": 超出磁盘限额
touch: 无法创建"file9.txt": 超出磁盘限额
touch: 无法创建"file10.txt": 超出磁盘限额
[lili@localhost aa]$ ls //列出目录内容,发现只有5个文件
file1.txt file2.txt file3.txt file4.txt file5.txt
[lili@localhost aa]$ exit //退出lili用户,回到root用户 exit
[root@localhost ~]# xfs_quota -x -c "report -ubih" /data/aa //查看磁盘配额使用情况,lili用户已创建5个文件
4、取消磁盘配额
命令格式:
xfs_quota -x -c "disable -up" 挂载点 #暂时取消quota的限制,但其实系统还是在计算quota中,只是没有管制而已。
xfs_quota -x -c "enable -up" 挂载点 #恢复到正常管制的状态,与disable相互取消、启用。
xfs_quota -x -c "off -up" 挂载点 #完全关闭quota的限制,使用了这个状态后,只有卸载再重新挂载才能再次启动quota。(并不移除quota的限制设置,只是关闭。)
xfs_quota -x -c "remove -p" 挂载点 #必须要在off的状态下才能执行的指令,可以移除quota的限制设置。(注意:"remove -p"会移除所有项目的限制)