Linux LVM和磁盘配额
导图
一.LVM
1. LVM (Logical Volume Manager 逻辑卷管理)
管理大存储设备,并允许用户动态调整文件系统的大小,LVM 的快照功能可以帮助我们快速备份数据;
-
-
卷组(Volume Group,VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。
-
逻辑卷(Logical Volume,LV):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
-
pv物理卷 | vg卷组 | lv逻辑卷 | |
---|---|---|---|
scan扫描 | pvscan | vgscan | lvscan |
create创建 | pvcreate | vgcreate | lvcreate |
display显示 | pvdisplay | vgdisplay | lvdisplay |
remove删除 | pvremove | vgremove | lvremove |
extend扩展 | vgextend | lvextend | |
vgreduce | lvreduce |
1.1创建LVM
lvcreate选项
选项 | 功能 |
-L | 指定逻辑卷大小 |
-l | 按照PE个数指定逻辑卷大小 |
-n | 逻辑卷名 |
-r | 直接刷新挂载点 |
[root@localhost ~]# fdisk /dev/sdb //给sdb建立分区 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 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):+5G 分区 1 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):t //更改分区id 已选择分区 1 Hex 代码(输入 L 列出所有代码):l 0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris 1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx 5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据 6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具 8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt 9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问 a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC 11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要 16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动 1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep 1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT 1e 隐藏的 W95 FAT1 80 旧 Minix Hex 代码(输入 L 列出所有代码):8e //输入代码更改类型 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):w //保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
创建LVM [root@localhost ~]# lsblk //查看磁盘使用情况 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc //sdb1(8e) //创建物理分区 加入分区(分区要修改id)或者设备 Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdc" successfully created. [root@localhost ~]# vgcreate suoluo /dev/sdb1 /dev/sdc //创建卷组suoluo Volume group "suoluo" successfully created [root@localhost ~]# lvcreate -n suo -L 10G suoluo -r //创建逻辑卷suo Logical volume "suo" created. [root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/suoluo/suo //逻辑卷路径 LV Name suo //逻辑卷 VG Name suoluo //卷组 LV UUID JqEkLs-gVCi-gHjJ-x3oC-yff3-BYF8-fAUnT7 LV Write Access read/write LV Creation host, time localhost.localdomain, 2022-09-28 14:57:05 +0800 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:2 [root@localhost /]# mkfs.xfs /dev/suoluo/suo //创建文件管理系统(格式化) meta-data=/dev/suoluo/suo 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@localhost /]# mount /dev/suoluo/suo /data //挂载 [root@localhost /]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 10G 0 lvm /data //挂载完成 sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom
1.2 扩展逻辑卷
扩展的逻辑卷的容量需要从卷组取
tops:
扩展不会影响当前文件使用,缩容影响当前文件使用
1.2.1 卷组容量足够,直接扩展
[root@localhost /]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 10G 0 lvm /data sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost /]# [root@localhost /]# [root@localhost /]# lvextend -L +5G /dev/suoluo/suo //扩展逻辑卷 5G Size of logical volume suoluo/suo changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents). Logical volume suoluo/suo successfully resized. [root@localhost /]# lsblk //查看是否扩展成功 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 15G 0 lvm /data sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 50G 3.3G 47G 7% / devtmpfs 897M 0 897M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.1M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 5.0G 179M 4.9G 4% /boot tmpfs 183M 12K 183M 1% /run/user/42 tmpfs 183M 0 183M 0% /run/user/0 /dev/mapper/suoluo-suo 10G 33M 10G 1% /data //内存未刷新 [root@localhost /]# xfs_growfs /data/ //xfs_growfs 挂载点 刷新挂载点 meta-data=/dev/mapper/suoluo-suo 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 3932160 [root@localhost /]# df -h //查看 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 50G 3.3G 47G 7% / devtmpfs 897M 0 897M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.1M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 5.0G 179M 4.9G 4% /boot tmpfs 183M 12K 183M 1% /run/user/42 tmpfs 183M 0 183M 0% /run/user/0 /dev/mapper/suoluo-suo 15G 33M 15G 1% /data //刷新成功
1.2.2 卷组容量不足,先扩展卷组,再扩展逻辑卷
[root@localhost /]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 15G 0 lvm /data sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost /]# vgextend suoluo /dev/sdd //1.扩展卷组 Physical volume "/dev/sdd" successfully created. Volume group "suoluo" successfully extended [root@localhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 50G 3.3G 47G 7% / devtmpfs 897M 0 897M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.1M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 5.0G 179M 4.9G 4% /boot tmpfs 183M 12K 183M 1% /run/user/42 tmpfs 183M 0 183M 0% /run/user/0 /dev/mapper/suoluo-suo 15G 33M 15G 1% /data [root@localhost /]# lvextend -L +20G /dev/suoluo/suo //2.再扩展逻辑卷 Size of logical volume suoluo/suo changed from 15.00 GiB (3840 extents) to 35.00 GiB (8960 extents). Logical volume suoluo/suo successfully resized. [root@localhost /]# xfs_growfs /data //刷新挂载点 meta-data=/dev/mapper/suoluo-suo isize=512 agcount=6, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=3932160, 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 3932160 to 9175040 [root@localhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 50G 3.3G 47G 7% / devtmpfs 897M 0 897M 0% /dev tmpfs 912M 0 912M 0% /dev/shm tmpfs 912M 9.1M 903M 1% /run tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 5.0G 179M 4.9G 4% /boot tmpfs 183M 12K 183M 1% /run/user/42 tmpfs 183M 0 183M 0% /run/user/0 /dev/mapper/suoluo-suo 35G 33M 35G 1% /data //扩展成功
1.3 缩减扩展卷(生产环境会影响业务,不建议缩减)
ext可以缩减
xfs不能缩减
缩减过程: 1.解挂载 2.检查文件系统完整性 3.缩减文件系统 4.缩减逻辑卷上下一致 5.再挂载回去
二.磁盘配额
1.实现磁盘配额的条件
- 需要Linux内核支持
- 安装xfsprogs和quota软件包
2.磁盘限额的特点
- 作用范围:针对指定的文件系统(分区)
- 限制对象:用户账户,组账户
- 限制类型:磁盘容量,文件数量
- 限制方法:软限制,硬限制 (软限制:超过限制会提醒【CentOS 7 BUG 不会提醒】,但不会阻止。 硬限定:不能超过限制,超过的限制写入不了
磁盘配额选项
选项 | 作用 |
-x | 启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可以使用 |
-c | 直接调用管理命令 |
-u | 指定用户账户对象 |
-g | 指定组账户对象 |
磁盘配额参数
参数 | 作用(数值单位默认为KB) |
bsoft | 设置磁盘容量的软限制数值 |
bhard | 设置磁盘容量的硬限制数值 |
isoft | 设置磁盘文件数的软限制数值 |
ihard | 设置磁盘文件数的硬限制数值 |
实际操作 [root@localhost /]# rpm -q xfsprogs quota //查看是否安装了两个软件包 xfsprogs-4.5.0-12.el7.x86_64 quota-4.01-14.el7.x86_64 [root@localhost /]# lsblk //查看磁盘使用情况 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 35G 0 lvm /data sdd 8:48 0 20G 0 disk └─suoluo-suo 253:2 0 35G 0 lvm /data sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost /]# umount /data //有挂载,先解挂载 [root@localhost /]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 5G 0 part /boot └─sda2 8:2 0 54G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─suoluo-suo 253:2 0 35G 0 lvm sdd 8:48 0 20G 0 disk └─suoluo-suo 253:2 0 35G 0 lvm sde 8:64 0 20G 0 disk sr0 11:0 1 4.2G 0 rom #1.临时挂载 [root@localhost /]# mount -0 usrquota,grapquota /dev/suoluo/suo /data #2.永久/自动 挂载 [root@localhost /]# vim /etc/fstab //编写配置文件做永久挂载 /dev/suoluo/suo /data xfs default,usrquota,grpquota 0 0 //写入的配置 [root@localhost /]# mount -a //重新挂载fstab里所有的挂载 [root@localhost /]# xfs_quota -x -c 'limit -u bsoft=50M bhard=100M suoluo' /data/ //软限制容量50M 硬限制100M [root@localhost /]# xfs_quota -x -c 'limit -u isoft=5 ihard=10 suoluo' /data/ //软限制文件数5个 硬限制文件数10个 xfs_quota -C 'quota -uv suoluo' /data/ //查看磁盘容量限制
xfs_quota -c 'quota -i -uv suoluo' /data/ //查看文件数限制
检验磁盘限额 [root@localhost /]# chmod 777 /data [root@localhost /]# su suoluo [suoluo@localhost /]$ cd /data [suoluo@localhost data]$ dd if=/dev/zero of=/data/text.txt bs=10M count=12 dd: 写入"/data/text.txt" 出错: 超出磁盘限额 记录了11+0 的读入 记录了10+0 的写出 104857600字节(105 MB)已复制,0.21698 秒,483 MB/秒 [suoluo@localhost data]$ xfs_quota -x -c ' report -abih' Group quota on /data (/dev/mapper/suoluo-suo) Blocks Inodes Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace ---------- --------------------------------- --------------------------------- suoluo 100M 0 0 00 [------] 1 0 0 00 [------] XFS_GETQUOTA: 不允许的操作 XFS_GETQUOTA: 不允许的操作 XFS_GETQUOTA: 不允许的操作 xfs_ quota -C 'quota -uv lisi' /opt/ #查看zhangsan磁盘:容量限制 xfs quota -c 'quota -i -uv lisi' /opt/ #查看zhangsan文件数限制 取消设置 [root@localhost ~]#xfs_quota -x -c 'disable -up' /data xfs_quota -x -c "disable -up" /data/ #暂时取消 xfs_quota -x -c 'enable ' /data/ 重新开启 xfs_quota -x -c "off -up" /data/ #需要重新挂载,完全关闭之后就不能再通过enable方式启动了,必须执行:umount /data;mount -a 重新激活quota功能 xfs_quota -x -c "remove -p" /data/ #移除设置 需要在off状态下
三.总结
LVM可以解决磁盘分区的局限性,进行动态整合调整文件系统的大小;
扩展逻辑卷的空间要从卷组中去,卷组不足要加磁盘设备;
扩展逻辑卷不会影响当前文件的使用,但缩减逻辑卷对当前文件会有影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律