一 逻辑卷LVM
1.1 LVM 概述
LVM:Logical Volume Manage 逻辑卷管理
能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性
/boot 分区用于存放引导文件,不能基于 LVM 创建
1.2,LVM机制概念
PV (Physical Volume,物理卷)
物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录LVM的属性,并把存储空间分割成默认大小为4MB的基本单元(PE) ,从而构成物理卷。
VG (Volume Group,卷组)
由一个或多个物理卷组成一个整体,即称为卷组,在卷组中可以动态地添加或移除物理卷。
LV (Logical volume,逻辑卷)
从卷组中分割出的一块空间,形成逻辑卷。使用mkfs等工具可在逻辑卷上创建文件系统。
1.3, LVM 管理命令
pvcreate 设备名1 [设备名2 .....] #创建物理卷
vgcreate 卷组名 物理卷名1 物理卷名2 .... #创建卷组
vgextend 卷组名 物理卷名1 .... #卷组扩容
lvcreate -L 容量大小 -n 逻辑卷名 卷组 #从卷组中创建逻辑卷 # -l 小写l 表示pe个数
lvextend -L +容量大小 逻辑卷 #将逻辑卷扩容
mkfs -t 文件系统 逻辑卷 #格式化逻辑卷
xfs_growfs 逻辑卷 #扩展xfs格式文件系统
resize2fs 逻辑卷 #扩展ext4 格式文件系统
命令汇总:
1.4 创建逻辑卷
1.4.1 fdisk 工具修改要使用的分区的id 为8e 逻辑卷类型
[root@promote ~]# fdisk /dev/sdb欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。
命令(输入 m 获取帮助):t #修改分区hex 代码
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xfbdee661
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 8e Linux LVM
/dev/sdb2 20973568 41945087 10485760 8e Linux LVM
命令(输入 m 获取帮助):w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
[root@promote ~]# partprobe /dev/sdb #刷新分区表
1.4.2 创建物理卷 PV
[root@promote ~]# pvcreate /dev/sdb1 /dev/sdb2 #将/dev/sdb1 /dev/sdb2 创建为物理卷
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
1.4.3 创建卷组VG
[root@promote ~]# vgcreate vgdata /dev/sdb1 /dev/sdb2 #以物理卷/dev/sdb1 和 /dev/sdb2 创建卷组 vgdata
Volume group "vgdata" successfully created
1.4.4 创建逻辑卷LV
[root@promote ~]# lvcreate -L 12G -n lvdata /dev/vgdata #以物理卷vgdata创建逻辑卷 lvdata 大小为12G
Logical volume "lvdata" created.
1.5 格式化逻辑卷并挂载使用
[root@promote ~]# mkfs -t xfs /dev/vgdata/lvdata #将逻辑卷格式为xfs格式
meta-data=/dev/vgdata/lvdata isize=512 agcount=4, agsize=786432 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3145728, 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
[root@promote ~]# mount /dev/vgdata/lvdata /mnt #挂载逻辑卷
[root@promote ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 56G 4.7G 51G 9% /
devtmpfs devtmpfs 978M 0 978M 0% /dev
tmpfs tmpfs 993M 0 993M 0% /dev/shm
tmpfs tmpfs 993M 9.0M 984M 1% /run
tmpfs tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 151M 346M 31% /boot
tmpfs tmpfs 199M 24K 199M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vgdata-lvdata xfs 12G 33M 12G 1% /mnt
1.6 逻辑卷扩容
1.6.1 卷组容量够用,可以直接扩容,然后扩展文件系统
[root@promote ~]# lvextend -L +5G /dev/vgdata/lvdata #将逻辑卷lvdata 扩容5G
Size of logical volume vgdata/lvdata changed from 12.00 GiB (3072 extents) to 17.00 GiB (4352 extents).
Logical volume vgdata/lvdata successfully resized.
[root@promote ~]# lsblk /dev/vgdata/lvdata #逻辑卷已经成功扩容(或者用lvdisplay 查看)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vgdata-lvdata 253:0 0 17G 0 lvm
[root@promote ~]# df -h #但是此时文件系统还没有扩展
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 56G 4.7G 51G 9% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 497M 151M 346M 31% /boot
tmpfs 199M 24K 199M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vgdata-lvdata 12G 33M 12G 1% /mnt
[root@promote ~]# xfs_growfs /dev/vgdata/lvdata #扩展xfs格式的文件系统
meta-data=/dev/mapper/vgdata-lvdata isize=512 agcount=4, agsize=786432 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3145728, 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 3145728 to 4456448
[root@promote ~]# df -h #文件系统成功扩展
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 56G 4.7G 51G 9% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 497M 151M 346M 31% /boot
tmpfs 199M 24K 199M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vgdata-lvdata 17G 33M 17G 1% /mnt
1.6.2 物理卷容量不够下扩容逻辑卷
(1) 先扩容物理卷
[root@promote ~]# fdisk /dev/sdb #过程略。划分新分区并修改id
[root@promote ~]# pvcreate /dev/sdb3
[root@promote ~]# pvcreate /dev/sdb3 #创建新的物理卷
Physical volume "/dev/sdb3" successfully created.
[root@promote ~]# vgextend vgdata /dev/sdb3 #扩容卷组vgdata
Volume group "vgdata" successfully extended
[root@promote ~]# vgdisplay #查看卷组信息
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
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 4352 / 17.00 GiB
Free PE / Size 3325 / <12.99 GiB
VG UUID qzmlO0-vNqW-Jd0G-MAVi-gWKA-G7G4-Gvaeua
(2)再扩容逻辑卷和文件系统
[root@promote ~]# lvextend -L +10G /dev/vgdata/lvdata
Size of logical volume vgdata/lvdata changed from 17.00 GiB (4352 extents) to 27.00 GiB (6912 extents).
Logical volume vgdata/lvdata successfully resized.
[root@promote ~]# xfs_growfs /dev/vgdata/lvdata
meta-data=/dev/mapper/vgdata-lvdata isize=512 agcount=6, agsize=786432 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4456448, 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 4456448 to 7077888
[root@promote ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 56G 4.7G 51G 9% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 497M 151M 346M 31% /boot
tmpfs 199M 24K 199M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vgdata-lvdata 27G 33M 27G 1% /mnt
[root@promote ~]#
二:设置磁盘配额
当Linux根分区的磁盘空间耗尽时,Linux操作系统将无法再建立新的文件,同时也可能会出现服务程序崩溃、系统无法启动等故障。
为了避免在服务器中出现类似磁盘空间不足的问题,可以启用磁盘配额功能,对用户在指定文件系统 (分区)中使用的磁盘空间、文件数量进行限制,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。在CentOS系统中,不同的文件系统使用不同磁盘配额配置管理工具。
例如,XFS文件系统通过xfs_quota工具进行管理; EXT3/4 文件系统通过 quota 工具进行管理。
2.1 磁盘限额的条件与特点
需要Linux 内核支持
安装xfsprohs 与quota 软件包
Linux 磁盘限额的特点
作用范围 | 针对指定的文件系统 |
限制对象 | 用户账号,组账号 |
限制类型 | 磁盘容量,文件数量 |
限制方法 | 软限制,硬限制 |
2.2 磁盘配额流程
1、以支持配额功能的方式挂载文件系统
2、编辑用户和组账号的配额设置
3、验证磁盘配额功能
4、查看磁盘配额使用情况
2.3 以支持配额功能的方式挂载文件系统
(1) 先分区,然后格式化文件系统
[root@promote ~]#fdisk /dev/sdb #过程略
[root@promote ~]#partprobe
[root@promote ~]# mkfs.xfs /dev/sdb5 #格式化为xfs 文件系统
meta-data=/dev/sdb5 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
[root@promote ~]# mount -o usrquota,grpquota /dev/sdb5 /mnt
#以支持用户限制,组限制的配额功能挂载(临时挂载)usrquota,用户限制。grpquota 组限制
[root@promote ~]# vim /etc/fstab #永久挂载
/dev/sdb5 /mnt xfs defaults,usrquota,grpquota 0 0
[root@promote ~]# mount -a
2.4 编辑用户和组账号配额配置
2.4.1 进行用户配额限制
[root@promote ~]# userdel -r test
[root@promote ~]# useradd test
[root@promote ~]# echo "123" | passwd --stdin test
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@promote ~]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M isoft=8 ihard=10 test' /mnt
#此命令可以查看xfs_quota的man 手册,搜索EXAMPLE
#对挂载点/mnt 目录进行限制,限制用户test 磁盘容量软限制为80M ,硬限制为100M 。文件数软限制为8,硬限制为10
-x: 表示启动专家模式, 在当前模式下允许对配额系统进行修改的所有管理命令可用。
-c∶表示直接调用管理命令。
-u∶指定用户账号对象
g∶ 指定组账号对象
bsoft∶ 设置磁盘容量的软限制数值(默认单位为 KB)。
bhard∶ 设置磁盘容量的硬限制数值(默认单位为 KB)。
isoft∶ 设置磁盘文件数的软限制数值。
ihard∶ 设置磁盘文件数的硬限制数值。
2.4.2 查看用户配额
[root@promote ~]# xfs_quota -c'quota -uv test' /mnt #查看用户test的磁盘容量限制
Disk quotas for User test (1000)
Filesystem Blocks Quota Limit Warn/Time Mounted on
/dev/sdb5 0 81920 102400 00 [--------] /mnt
[root@promote ~]# xfs_quota -c'quota -iv test' /mnt #查看用户test 的文件数量限制
Disk quotas for User test (1000)
Filesystem Files Quota Limit Warn/Time Mounted on
/dev/sdb5 0 8 10 00 [--------] /mnt
2.5 验证磁盘配额
[root@promote ~]# chmod 777 /mnt
[root@promote ~]# su test
[test@promote root]$ cd /mnt/
[test@promote mnt]$ dd if=/dev/zero of=/mnt/text.txt bs=10M count=12 #验证磁盘容量限制
dd: 写入"/mnt/text.txt" 出错: 超出磁盘限额
记录了11+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.513552 秒,204 MB/秒
dd 命令是一个设备转换和连续复制命令
"if="指定输入设备(或文件)
"of="指定输出设备(或文件)
"bs="指定读取数据块的大小
"count="指定读取数据块的数量
/dey/zero "零"设备文件, 可以无限的提供空字符。常用来生成一个特定大小的文件。
[test@promote mnt]$ du -h /mnt #查看/mnt 目录容量只有100M
100M /mnt
[test@promote mnt]$ rm -rf *
[test@promote mnt]$ touch {1..12}.txt #验证文件熟练限制
touch: 无法创建"11.txt": 超出磁盘限额
touch: 无法创建"12.txt": 超出磁盘限额
[test@promote mnt]$ ls
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
2.6 查看配额使用情况
[root@promote ~]# xfs_quota -x -c'report -abih' #查看磁盘容量和文件数报告 (默认磁盘容量单位为kb)
User quota on /mnt (/dev/sdb5)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 0 0 0 00 [------] 3 0 0 00 [------]
test 0 80M 100M 00 [------] 10 8 10 00 [6 days]
Group quota on /mnt (/dev/sdb5)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 0 0 0 00 [------] 3 0 0 00 [------]
test 0 0 0 00 [------] 10 0 0 00 [------]