一、LVM逻辑卷
1.1 LVM概述
LVM:逻辑卷,能够在保持现有数据不变的情况下动态调整磁盘的容量
是一个可动态扩展。快速创建和方便管理的逻辑上的磁盘,而不用考虑实际的硬件分区
LVM可方便的对存储空间进行管理,如动态增加或缩减逻辑卷大小,移动逻辑卷备份和恢复逻辑卷,以实现热备份等
tips:
热备份:不停机备份,实时备份,有多少备份多少
冷备份:停机备份,只能备份当前数据,开机后的新数据不再备份
LVM的作用:
- 打破了分区只能单个挂载,单个使用的限制
- 打破了磁盘分区大小的限制(扩容)
- 打破了磁盘分区必须是连续空间的限制
注意:/boot分区存放引导文件,不能创建LVM
1.2 LVM的组成结构
PV物理卷:真正的物理硬盘或分区,由不同的硬盘提供真实的存储空间
VG卷组:把不同分区的硬盘打包在一起,形成一个逻辑上的硬盘
LV逻辑卷:分区,格式化,挂载
PE:是用来保存数据的最小单位,大小可改,默认4MB
1.3 LVM的管理命令
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
Scan 扫描 | pvscan | vgscan | lvscan |
Create 建立 | pvcreate | vgcreate | lvcreate |
Display 显示 | pvdisplay | vgdisplay | lvdisplay |
Remove 删除 | pvremove | vgremove | lvremove |
Extend 扩展 | ————— | vgextend | lvextend |
Reduce 减少 | ————— | vgreduce | lvreduce |
1.4 创建LVM过程实例演示
1.4.1 在硬盘中分区,分别在sdb,sdc,sdd中创建sdb1,sdc1,sdd1
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x5595ab53 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):W
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xf33392af 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xbe396255 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 10G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 10G 0 part
sr0 11:0 1 1024M 0 rom
1.4.2 创建物理卷,将sdb1,sdc1,sdd1创建为物理卷
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdd1" successfully created.
1.4.3 创建卷组
[root@localhost ~]# vgcreate yun /dev/sdb1 /dev/sdc1 /dev/sdd1 //创建卷组名为yun的卷组
Volume group "yun" successfully created
[root@localhost ~]# vgdisplay yun //查看卷组情况
--- Volume group ---
VG Name yun
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size <29.99 GiB
PE Size 4.00 MiB
Total PE 7677
Alloc PE / Size 0 / 0
Free PE / Size 7677 / <29.99 GiB
VG UUID hN1Mkr-FOLL-t3zI-5P5V-XwAu-G9h1-UdLfxO
1.4.4 创建逻辑卷
lvcreate -L 逻辑卷大小 -n 逻辑卷名称 卷组名称
-L:指定逻辑卷的大小,单位为M,G,T
-n:指定逻辑卷的名称
-l:按照PE个数指定逻辑卷大小,需要换算容量,太麻烦
[root@localhost ~]# lvcreate -L 10G -n jisuan yun //创建大小为10G,逻辑卷名为jisuan的逻辑卷
Logical volume "jisuan" created.
[root@localhost ~]# lvdisplay /dev/yun/jisuan //查看逻辑卷情况
--- Logical volume ---
LV Path /dev/yun/jisuan
LV Name jisuan
VG Name yun
LV UUID iTIUZt-FCxY-BFQs-02ng-p89h-Y58s-M6Ynvq
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-05-09 02:04:19 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
1.4.5 创建文件系统
/目录/卷组名/逻辑卷名
[root@localhost ~]# mkfs.xfs /dev/yun/jisuan
meta-data=/dev/yun/jisuan isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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
1.4.6 挂载
[root@localhost /]# mkdir data
[root@localhost /]# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost ~]# blkid
/dev/mapper/centos-root: UUID="1871dac0-5ec8-4132-a7ab-f3f9c29f4825" TYPE="xfs"
/dev/sda2: UUID="VNY0Qc-0Q7z-7FM2-ST8T-ApMY-SZWn-5ELzv3" TYPE="LVM2_member"
/dev/sda1: UUID="fa602757-026a-4b15-9bdb-05bf9c751ed8" TYPE="xfs"
/dev/mapper/centos-swap: UUID="b2c1d539-9794-4d64-b70d-61da5cea4ae0" TYPE="swap"
/dev/sdb1: UUID="D0HrSm-vNMs-E2od-EDmo-2gxj-2znF-fSb79Z" TYPE="LVM2_member"
/dev/sdc1: UUID="ECvOfU-DV9d-4Gv8-1mzi-ZeE1-718V-ROHNBT" TYPE="LVM2_member"
/dev/sdd1: UUID="d1kEb9-qhb1-4Lr9-J8Fa-l9N2-uXuV-OJlwNK" TYPE="LVM2_member"
/dev/mapper/yun-jisuan: UUID="3f966bff-86da-47bd-a33f-108e99baed5b" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Apr 26 00:42:50 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fa602757-026a-4b15-9bdb-05bf9c751ed8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=3f966bff-86da-47bd-a33f-108e99baed5b /data xfs defaults 0 0
:wq
[root@localhost /]# mount -a //刷新
1.5 LVM扩容
[root@localhost /]# lvextend -L +12G /dev/yun/jisuan -r //扩容12G逻辑卷
Size of logical volume yun/jisuan changed from 10.00 GiB (2560 extents) to 22.00 GiB (5632 extents).
Logical volume yun/jisuan successfully resized.
meta-data=/dev/mapper/yun-jisuan isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, 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
data blocks changed from 2621440 to 5767168
[root@localhost /]# lvdisplay /dev/yun/jisuan
--- Logical volume ---
LV Path /dev/yun/jisuan
LV Name jisuan
VG Name yun
LV UUID iTIUZt-FCxY-BFQs-02ng-p89h-Y58s-M6Ynvq
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-05-09 02:04:19 +0800
LV Status available
# open 1
LV Size 22.00 GiB //扩容成功
Current LE 5632
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
当卷组空间不够逻辑卷扩容是,添加卷组
①在硬盘中分区
[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (20973568-83886079,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-83886079,默认为 83886079):+15G
分区 2 已设置为 Linux 类型,大小设为 15 GiB
命令(输入 m 获取帮助):w
[root@localhost /]# partprobe
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 10G 0 part
│ └─yun-jisuan 253:2 0 22G 0 lvm /data
└─sdb2 8:18 0 15G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 10G 0 part
└─yun-jisuan 253:2 0 22G 0 lvm /data
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 10G 0 part
└─yun-jisuan 253:2 0 22G 0 lvm /data
sr0 11:0 1 1024M 0 rom
②添加新的分区到卷组中
[root@localhost /]# vgextend yun /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
Volume group "yun" successfully extended
[root@localhost /]# vgdisplay /dev/yun
--- Volume group ---
VG Name yun
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size 44.98 GiB //添加成功
PE Size 4.00 MiB
Total PE 11516
Alloc PE / Size 5632 / 22.00 GiB
Free PE / Size 5884 / 22.98 GiB
VG UUID hN1Mkr-FOLL-t3zI-5P5V-XwAu-G9h1-UdLfxO
二、磁盘配额
2.1 概述及实现条件
磁盘配额:磁盘配额是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。
- 需要Linux内核支持
- 安装 xfsprogs 和 quota 软件包
2.2 特点
- 作用范围:针对指定的文件系统
- 限制对象:用户账号,组账号
- 限制类型:磁盘容量(对磁盘空间的限制),文件数量(对inode号的限制)
- 限制方法:软限制,硬限制 □≤ ≤□
2.3 演示案例
2.3.1 查看软件是否安装;若没有,就安装软件
[root@localhost /]# rpm -q xfsprogs quota
xfsprogs-4.5.0-12.el7.x86_64
quota-4.01-14.el7.x86_64 //已有,不用安装
2.3.2 以支持磁盘配额的方式挂载
[root@localhost /]# umount /dev/yun/jisuan /data/ //如果之前挂载了,需要先解挂载
[root@localhost /]# mount -o usrquota,grpquota /dev/yun/jisuan /data/
以支持磁盘配额的方式挂载
2.3.3 创建用户
[root@localhost /]# useradd ky29
[root@localhost /]# passwd ky29
更改用户 ky29 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
2.3.4 磁盘配额
[root@localhost /]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M ky29' /data/
限制磁盘空间
[root@localhost /]# xfs_quota -x -c 'limit -u isoft=4 ihard=6 ky29' /data/
限制文件数量
常用选项:
- -x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
- -c:表示直接调用管理命令。
- -u:指定用户账号对象。
- -g:指定组账号对象。
限制字段:
- bsoft:设置磁盘容量的软限制数值(默认单位为KB)。
- bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
- isoft:设置磁盘文件数的软限制数值。
- ihard:设置磁盘文件数的硬限制数值。
2.3.5 给/data赋权
[root@localhost /]# chmod 777 /data/ //设置所有人对/data都有读写执行的权限
2.3.6 验证磁盘配额
使用命令
dd:是一个设备转换和连续复制命令
“if=” 指定输入设备(或文件)
"of="指定输出设备(或文件)
"bs=" 指定读取数据块的大小
"count=”指定读取数据块的数量
/dev/zero “零"设备文件,可以无限的提供空字符。常用来生成-一个特定大小的文件
验证
验证磁盘容量
[root@localhost /]# su - ky29
上一次登录:二 5月 9 03:16:07 CST 2023pts/3 上
[ky29@localhost ~]$ dd if=/dev/zero of=/data/123.txt bs=10M count=12
dd: 写入"/data/123.txt" 出错: 超出磁盘限额
记录了11+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.0597864 秒,1.8 GB/秒
[ky29@localhost ~]$ cd /data
[ky29@localhost data]$ rm -rf *
[ky29@localhost data]$ touch {1..10}.txt
touch: 无法创建"7.txt": 超出磁盘限额
touch: 无法创建"8.txt": 超出磁盘限额
touch: 无法创建"9.txt": 超出磁盘限额
touch: 无法创建"10.txt": 超出磁盘限额
2.3.7 取消磁盘限额
[root@localhost /]# xfs_quota -x -c 'disable -up' /data
[root@localhost /]# su - ky29
上一次登录:二 5月 9 03:17:16 CST 2023pts/3 上
[ky29@localhost ~]$ dd if=/dev/zero of=/data/123.txt bs=10M count=12
记录了12+0 的读入
记录了12+0 的写出
125829120字节(126 MB)已复制,0.0478918 秒,2.6 GB/秒
[ky29@localhost ~]$ cd /data/
[ky29@localhost data]$ ls
123.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt
[ky29@localhost data]$ touch {1..10}.txt
[ky29@localhost data]$ ls
10.txt 123.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
若要再次设置磁盘配额,需要重新以支持磁盘配额的方式挂载