LVM和磁盘配额
许多Linux使用者在安装操作系统时都会遇到这样的困境;如何精确评估和分配各个硬盘分区的容量,如果当初估计不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。
文章目录
LVM概述
Logical Volume Manager,逻辑卷管理
- 动态调整磁盘容量,从而提高磁盘管理的灵活性
- /boot分区用于存放引导文件,不能基于LVM创建
- 图形界面管理工具
system-config-lvm
LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,它是建立在硬盘和分区之上、文件系统之下的一个逻辑层,在建立文件系统时屏蔽了下层的磁盘分区布局,因此能够在保持现有数据不变的情况下动态调整磁盘容量,从而增强磁盘管理的灵活性。
在安装 CentOS 系统的过程中选择自动分区时,就会默认采用 LVM 分区方案,不需要再进行手动配置。如果有特殊需要,也可以使用安装向导提供的磁盘定制工具调整 LVM 分区。需要注意的是,/boot 分区不能基于 LVM 创建,必须独立出来。
LVM机制的基本概念
-
PV(物理卷)
-
VG(卷组)
-
LV(逻辑卷)
PV(Physical Volume,物理卷)
物理卷是 LVM 机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录 LVM 的属性,并把存储空间分割成默认大小为 4MB 的基本单元(Physical Extent,PE),从而构成物理卷
VG(Volume Group,卷组)
由一个或多个物理卷组成一个整体,即称为卷组,在卷组中可以动态地添加或移除物理卷。许多个物理卷可以分别组成不同的卷组,卷组的名称由用户自行定义。
LV(Logical Volume,逻辑卷)
逻辑卷建立在卷组之上,与物理卷没有直接关系。对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中“切出”一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷
LVM的命令管理
主要命令
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
Scan扫描 | pvscan | vgscan | lvscan |
Create显示 | pvcreate | vgcreate | lvcreate |
Display显示 | pvdisplay | vgdisplay | lvdisplay |
Remove删除 | pvremove | vgremove | lvremove |
Extend扩展 | ———— | vgextend | lvextand |
Reduce减少 | ———— | vgreduce | lvreduce |
pvcreate 设备名1 [设备名2 … …]
vgcreate 卷组名 物理卷名1 物理卷名2
lvcreate -L 容量大小 -n 逻辑卷名 卷组名
lvextend -L +大小 /dev/卷组名/逻辑卷名
先在虚拟机中加四块硬盘,硬盘每块1G容量 添加完毕后重启虚拟机
root@localhost ~]# fdisk -l //查看下四块硬盘
磁盘 /dev/sda:214.7 GB, 214748364800 字节,419430400 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a54e4
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 419430399 208665600 8e Linux LVM
磁盘 /dev/sdc:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdd:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sde:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# yum -y install lvm2 //如果是最小安装需要安装lvm2
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc //硬盘做下物理卷
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvdisplay //查看下物理卷
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <199.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 50943
Free PE 1
Allocated PE 50942
PV UUID Fh7dYb-ikXl-L11c-USkC-Zvhy-WcgU-InrzWb
"/dev/sdc" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID YZcHQP-M283-d032-m8im-eKaX-8YlP-zUjit1
"/dev/sdb" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID K6L6gD-2Ry6-xIR3-Ndp4-2PsQ-RkxS-BVXrsT
[root@localhost ~]# vgcreate vg01 /dev/sdb /dev/sdc //创建卷组vg01 将2块硬盘添加到vg01
Volume group "vg01" successfully created
[root@localhost ~]# vgdisplay //查看下卷组
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <199.00 GiB
PE Size 4.00 MiB
Total PE 50943
Alloc PE / Size 50942 / 198.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID cPXeqM-avWL-xtCd-nPRM-XHiR-U3pO-HIHnjv
--- Volume group ---
VG Name vg01
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 1.99 GiB
PE Size 4.00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1.99 GiB
VG UUID JoGF1W-8Jup-jXUF-WoTy-p6OO-BPlk-yQr34y
[root@localhost ~]# vgscan //卷组扫描
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
Found volume group "vg01" using metadata type lvm2
[root@localhost ~]# lvcreate -n lv01 -L 500M vg01 //创建逻辑卷vg01 500M
Logical volume "lv01" created.
[root@localhost ~]# mkfs.ext4 /dev/vg01/lv01 //LV创建后是挂载的 首先要格式化
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=34078720
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
设置自动挂载
[root@localhost ~]# vi /etc/fstab //开机启动 加入自动挂载
shift+g
o
/dev/vg01/lv01 /mnt ext4 defaults 0 0
保存退出
[root@localhost ~]# mount -a //一般没问题,不会报出相关提示
[root@localhost ~]# df -hT //查看挂载情况
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 4.9G 46G 10% /
devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 13M 3.8G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 179M 836M 18% /boot
/dev/mapper/centos-home xfs 142G 33M 142G 1% /home
tmpfs tmpfs 781M 12K 781M 1% /run/user/42
tmpfs tmpfs 781M 0 781M 0% /run/user/0
/dev/mapper/vg01-lv01 ext4 477M 2.3M 445M 1% /mnt
扩容
[root@localhost ~]# lvextend -L +500M /dev/vg01/lv01 //加500M空间
Size of logical volume vg01/lv01 changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
Logical volume vg01/lv01 successfully resized.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID mtEndz-edDl-9cYM-FDax-ktgi-XTTq-pbJS9z
LV Write Access read/write
LV Creation host, time localhost, 2020-06-10 18:54:45 +0800
LV Status available
# open 2
LV Size <7.88 GiB
Current LE 2016
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/home
LV Name home
VG Name centos
LV UUID JvR4tU-JOf3-iRiY-wK2o-FuqA-epBx-Rm1bIi
LV Write Access read/write
LV Creation host, time localhost, 2020-06-10 18:54:45 +0800
LV Status available
# open 1
LV Size <141.12 GiB
Current LE 36126
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID flgSfw-DVwT-vbth-4vdZ-fbjQ-gKvb-uq7zTL
LV Write Access read/write
LV Creation host, time localhost, 2020-06-10 18:54:46 +0800
LV Status available
# open 1
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID uRXzwN-eQpS-16F5-JVYQ-AXwU-xOUE-Q3Za2B
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-06-16 18:22:43 +0800
LV Status available
# open 1
LV Size 1000.00 MiB
Current LE 250
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@localhost ~]# resize2fs /dev/vg01/lv01 //初始化
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /mnt; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/vg01/lv01 is now 1024000 blocks long.
VG扩容
[root@localhost ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# vgextend vg01 /dev/sdd
Volume group "vg01" successfully extended
磁盘配额概述
当 Linux 根分区的磁盘空间耗尽时,Linux 操作系统将无法再建立新的文件(包括程序运行的临时文件),从而出现服务程序崩溃、系统无法启动等故障。为了避免在服务器中出现类似磁盘空间不足的问题,可以启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行限制,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。
在 CentOS 系统中,内核已经定制了支持 Linux 文件系统的磁盘配额功能,并且在系统中配置和管理磁盘配额的工具由 xfsgrogs 软件包的 xfs_quota 配额管理程序提供。注意:在 CentOS 系统中,不同的文件系统使用不同磁盘配额配置管理工具。
实现磁盘限额的条件
- 需要Linux内核支持
- 安装xfsprogs与quota软件包
Linux磁盘限额的特点
-
作用范围:针对指定的文件系统(分区)
xfs_quota 设置的磁盘配额功能,只在指定的文件系统(分区)内有效,用户使用其他未设置配额的文件系统时,将不会受到限制。 -
限制对象:用户账号、组账号
xfs_quota 主要针对系统中指定的用户账号、组账号进行限制,没有被设置限额的用户或组将不受影响。对组账号设置配额后,组内所有用户使用的磁盘容量、文件数量的总和不能超过限制。 -
限制类型:磁盘容量、文件数量
磁盘容量:限制用户能够使用的磁盘数据块(Block)大小,也就是限制磁盘空间大小,默认单位为 KB。
文件数量:限制用户能够拥有的文件个数。在 Linux 操作系统中,每一个文件都有一个对应的数字标记,称为 i 结点(Inode)编号,这个编号在同一个文件系统内是唯一的,因此 xfs_quota 通过限制i 结点的数量来实现对文件数量的限制。 -
限制方法:软限制、硬限制
软限制:指定一个软性的配额数值(如 480MB 磁盘空间、180 个文件),在固定的宽限期(默认为七天)内允许暂时超过这个限制,但系统会给出警告信息。
硬限制:指定一个硬性的配额数值(如 500MB 磁盘空间、200 个文件),是绝对禁止用户超过的限制值,当达到硬限制值时,系统也会给出警告并禁止继续写入数据。硬限制的配额值应大于相应的软限制值,否则软限制将失效。
从以上描述中可以看出,在实施磁盘配额的实际过程中,只有当用户(或组)、文件系统(分区)及配额数值都满足限额条件时,xfs_quota 才会对操作进行限制。
配置步骤
临时设置(大部分都是通过命令实现),永久设置(都是通过源码文件中配置)
大部分命令设置都是临时生效,重启失效
配置文件是永久生效
编辑用户和组账号的配额设置:组的配额是固定的,
编辑用户和组账号的配额设置
使用xfs_quota命令编辑配额设置
-
常用选项
-u //user
-g //group
-x //专家模式
-c //命令(command) -
限制字段
bsoft //容量软限制
bhard //容量硬限制 (block 块)
isoft //数量软限制
ihard //数量硬限制 (inode 节点)
启用文件系统的配额支持
添加userqouta、grpquota挂载参数
磁盘配额
[root@localhost ~]# mount -o remount,usrquota,grpquota /dev/vg01/lv01
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=3978036k,nr_inodes=994509,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup
...... //省略部分内容
临时关闭核心防护
[root@localhost ~]# setenforce 0
永久关闭
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled
若 需 要 在 每 次 开 机 后 自 动 以 支 持 配 额 功 能 的 方 式 挂 载 该 分 区 , 可 以 将“usrquota,grpquota”挂载参数写入“/etc/fstab”文件中。
[root@localhost ~]# lvcreate -n lv02 -L 500M vg01
Logical volume "lv02" created.
[root@localhost ~]# mkfs.ext4 /dev/vg01/lv02
mke2fs 1.42.9 (28-Dec-2013)
/dev/vg01/lv02 已经挂载;will not make a 文件系统 here!
[root@localhost ~]# mkfs.ext4 /dev/vg01/lv02
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=34078720
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mount -o usrquota,grpquota /dev/vg01/lv02 /opt
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=3978036k,nr_inodes=994509,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
...... //省略部分内容
安装quota
[root@localhost ~]# yum -y install quota
....... //省略内容
[root@localhost ~]# quotacheck -cvug /opt
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/mapper/vg01-lv02 [/opt] done
quotacheck: Checked 3 directories and 2 files
创建tom用户
[root@localhost ~]# useradd tom
[root@localhost ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# edquota -u tom
Disk quotas for user tom (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vg01-lv02 0 10000 10240 0 5 6
开启磁盘配额功能
[root@localhost ~]# quotaon -p /opt
group quota on /opt (/dev/mapper/vg01-lv02) is off
user quota on /opt (/dev/mapper/vg01-lv02) is off
[root@localhost ~]# quotaon /opt
[root@localhost ~]# quotaon -p /opt
group quota on /opt (/dev/mapper/vg01-lv02) is on
user quota on /opt (/dev/mapper/vg01-lv02) is on
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vg01-lv02 0 10000 10240 0 5 6
~
[root@localhost ~]# chmod 777 /opt
[root@localhost ~]# su tom
[tom@localhost root]$
[tom@localhost opt]$ quota
quota: Cannot open quotafile /mnt/aquota.user: 没有那个文件或目录
Disk quotas for user tom (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/vg01-lv02
10240* 10000 10240 7days 2 5 6
查看所有用户磁盘配额情况
[root@localhost ~]# repquota -a
repquota: Cannot open quotafile /mnt/aquota.user: 没有那个文件或目录
*** Report for user quotas on device /dev/mapper/vg01-lv02
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 13 0 0 2 0 0
tom +- 10240 10000 10240 6days 2 5 6