什么是LVM?
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以实现一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。
LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。需要注意的是/boot分区不能基于LVM创建,必须独立出来。
LVM能够解决的需求痛点
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;
2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。
3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。
当采用LVM时,情况有所不同:
1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;
3.文件系统建立在LVM上,可以跨分区,方便使用;
4.使用LVM方便管理、增加了系统的扩展性
【名词解释】
PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区
VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV
LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变
磁盘配额介绍
quota软件设置的磁盘配额功能,只在指定的文件系统(分区)有效,磁盘配额的限制对象为系统中指定的用户账号、组账号进行限制。
磁盘配额的限制类型分为:
磁盘容量:限制用户能够使用的磁盘数据块大小,也就是限制磁盘空间的大小,默认单位为KB。
文件数量:限制用户能够拥有的文件个数,在linux中每一个文件都有一个对应的数字标记,称为i节点号,这个编号在同一个文件系统内是唯一的。
磁盘配额的限制方法:
软限制:指在固定期限内暂时允许这个用户超过这个限制(默认期限为7天超过7天后用户无法再写入数据),但是系统会给出警告。
硬限制:指绝对禁止用户超过此限制,硬限制的值不能小于软限制否则软限制失效。
实验环境介绍:
VMware Workstation虚拟机环境,Linux系统采用CentOS7
实验步骤:
首先添加两块新硬盘,重启主机(否则在系统中看不到新加的磁盘)
使用fdisk -l命令可以看到两块新加的盘/sdb,/sdc
[root@localhost ~]# fdisk -l
................
磁盘 /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 字节
使用fdisk命令对两块磁盘进行分区,并更改磁盘文件系统格式为物理盘格式(8e)
会进入一个交互的模式,具体选择如下:
[root@localhost ~]# fdisk /dev/sdb #对sdb进行分区
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x1ce46bfe 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):n #按n 创建一个新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #按p 选择创建主分区
分区号 (1-4,默认 1):1 #默认为第一分区
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB命令(输入 m 获取帮助):t #按t 进行文件系统格式的转换
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e #输入8e 转换成LVM格式
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):p #按p 查看分区信息
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1ce46bfe设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 8e Linux LVM #刚刚创建的分区/dev/sdb1命令(输入 m 获取帮助):w #按w 保存设置并退出互动模式
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。第二块磁盘/dev/sdc创建分区过程相同
再次使用fdisk -l命令可以看到新磁盘创建好的分区
[root@localhost ~]# fdisk -l
..............
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1ce46bfe设备 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
磁盘标识符:0x3dd2601b设备 Boot Start End Blocks Id System
/dev/sdc1 2048 41943039 20970496 8e Linux LVM
创建PV物理卷
使用pvcreate进行创建,另外还可以使用pvscan,pvdisplay查看物理卷详细信息
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.[root@localhost ~]# pvscan
PV /dev/sdb1 lvm2 [<20.00 GiB]
PV /dev/sdc1 lvm2 [<20.00 GiB]
Total: 2 [<40.00 GiB] / in use: 0 [0 ] / in no VG: 2 [<40.00 GiB]
[root@localhost ~]# pvdisplay
"/dev/sdb1" is a new physical volume of "<20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID xZ0LQe-x27m-eaNv-bgw4-9RHu-wZ6C-hrRd4P
"/dev/sdc1" is a new physical volume of "<20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1oMWW7-HBje-o6Pg-UlXx-edxp-gk8B-ugMW0S
创建VG卷组,将PV物理卷/dev/sdb1,/dev/sdc1加入VG卷组benet
使用vgcreate进行创建,另外还可以使用vgscan,vgdisplay查看卷组详细信息
[root@localhost ~]# vgcreate benet /dev/sdb1 /dev/sdc1
Volume group "benet" successfully created
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "benet" using metadata type lvm2
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name benet
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 #组成的卷组benet大小
PE Size 4.00 MiB #每个PE的单位
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID e1gm4p-8Z2Y-WW1G-EpiH-4rNy-1JBi-NgcJAT
在VG卷组benet中创建LV逻辑卷
使用lvcreate进行创建,可以使用lvscan查看LV逻辑卷详情,也可使用lvextend进行扩容
其中的选项含义: -L 指定大小 -n 进行命名
[root@localhost ~]# lvcreate -L 15G -n lv01 benet #创建逻辑卷lv01,大小指定为15G
Logical volume "lv01" created.
[root@localhost ~]# lvcreate -L 15G -n lv02 benet #创建逻辑卷lv01,大小指定为15G
Logical volume "lv02" created.
[root@localhost ~]# lvscan #查看LV逻辑卷信息
ACTIVE '/dev/benet/lv01' [15.00 GiB] inherit
ACTIVE '/dev/benet/lv02' [15.00 GiB] inherit[root@localhost ~]# lvextend -L +5G /dev/benet/lv01 #将lv01进行扩容5G
Size of logical volume benet/lv01 changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents).
Logical volume benet/lv01 successfully resized.
[root@localhost ~]# lvscan
ACTIVE '/dev/benet/lv01' [20.00 GiB] inherit #再次查看,可看到lv01扩容成功
ACTIVE '/dev/benet/lv02' [15.00 GiB] inherit
格式化lv 挂载使用
在此我们将lv01格式化为EXT4格式,将lv02格式化为XFS
mkfs.ext4 /dev/benet/lv01
mkfs.xfs /dev/benet/lv02
[root@localhost ~]# mkdir /mnt1 /mnt2
[root@localhost ~]# mount /dev/benet/lv01 /mnt1
[root@localhost ~]# mount /dev/benet/lv02 /mnt2
[root@localhost ~]# df -h.............
/dev/mapper/benet-lv01 20G 45M 19G 1% /mnt1
/dev/mapper/benet-lv02 15G 33M 15G 1% /mnt2
磁盘配额(quota)
使用yum安装quota软件包,关闭防火墙,关闭增强型功能(否则容易出问题)
yum install quota -y
setenforce 0
systemctl stop firewalld.service
设置开机自动挂载,将lv02挂载到/mnt2下
vim /etc/fstab
.............. #最后一行添加配置
/dev/benet/lv02 /mnt2 xfs defaults,usrquota,grpquota 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep lv02 #可以看到lv02拥有磁盘配额功能
/dev/mapper/benet-lv02 on /mnt2 type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
检查磁盘配额开启是否成功
[root@localhost ~]# quotaon -p /dev/benet/lv02
group quota on /mnt2 (/dev/mapper/benet-lv02) is on
user quota on /mnt2 (/dev/mapper/benet-lv02) is on
添加一个caiwu组,用户tom,并将tom的基本组设置为caiwu
[root@localhost ~]# groupadd caiwu
[root@localhost ~]# useradd -g caiwu tom
[root@localhost ~]# id tom
uid=1001(tom) gid=1001(caiwu) 组=1001(caiwu)
给用户tom设置配额,
第一组soft和hard是软、硬限制是空间的大小
第二组soft和hard是软、硬限制是文件数量
[root@localhost ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard/dev/mapper/benet-lv02 0 1024 2048 0 2 4 #最多可写2M大小的文件,文件个数最大限额为4
给caiwu组做配额
[root@localhost ~]# edquota -g caiwu
Disk quotas for group caiwu (gid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/benet-lv02 0 2048 4096 0 3 5 #最多可写4M大小的文件,文件个数最大限额为5
赋予普通用户读写执行权限
chmod 777 /mnt2
验证磁盘配额结果
切换到tom用户身份进行登录,在/mnt2目录下写入内容
[root@localhost ~]# su - tom
[tom@localhost ~]$ cd /mnt2
[tom@localhost mnt2]$ dd if=/dev/zero of=test1 bs=1M count=1 #从/dev/zero中取1M大小的内容写入test1文件中,总共取1次
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00484565 秒,216 MB/秒
[tom@localhost mnt2]$ dd if=/dev/zero of=test2 bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00335958 秒,312 MB/秒
[tom@localhost mnt2]$ dd if=/dev/zero of=test3 bs=1M count=1 #超出了对tom用户设定的最大限额2M,因此写入文件内容失败
dd: 打开"test3" 失败: 超出磁盘限额[tom@localhost mnt2]$ exit
登出
更改对tom用户的限额,将写入文件大小扩大为100M,caiwu组限额不变
[root@localhost ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/benet-lv02 2048 1024 102400 2 2 4
再次切换到tom身份进行验证
[root@localhost ~]# su - tom
上一次登录:日 9月 16 20:52:55 CST 2018pts/0 上
[tom@localhost ~]$ cd /mnt2
[tom@localhost mnt2]$ rm -rf * #将之前写入的内容删掉
[tom@localhost mnt2]$ dd if=/dev/zero of=test1 bs=1M count=2
记录了2+0 的读入
记录了2+0 的写出
2097152字节(2.1 MB)已复制,0.00502173 秒,418 MB/秒
[tom@localhost mnt2]$ dd if=/dev/zero of=test2 bs=1M count=2
记录了2+0 的读入
记录了2+0 的写出
2097152字节(2.1 MB)已复制,0.00540753 秒,388 MB/秒
[tom@localhost mnt2]$ dd if=/dev/zero of=test3 bs=1M count=2 #可以看到文件大小超出caiwu组的限额,用户tom也不能进行写入操作
dd: 打开"test3" 失败: 超出磁盘限额