实验环境:公司准备在Internet中搭建FTP服务器(CentOS73系统平台),面向全国各地的员工及部分VIP客户提供资料上传下载的空间。考虑动态扩容的需要,计划增加两块SCSI硬盘并构建LVM逻辑卷(挂载到/date目录下)专门用于存放电子邮件数据,并通过磁盘配额的方式限制用户的电子邮箱空间。

需求描述

  • 采用LVM磁盘管理方案:添加两块SCSI硬盘设备,完成硬盘检测及分区,建立逻辑卷mbox,格式化为XFS文件系统,挂载到/date目录下。
  • 设置磁盘配额,要求用户jerry最多只能使用500MB磁盘空间,appc组的用户合计最多只能使用5GB磁盘空间。

实验步骤如下:

1、关机后添加新硬盘,重新开机进入CentOS系统。

关机后点击“编辑虚拟机设置”

Linux实验案例:LVM卷管理及配额设置_linux

点击“添加”

Linux实验案例:LVM卷管理及配额设置_标识符_02

选择“硬盘”,点击“下一步”

Linux实验案例:LVM卷管理及配额设置_centos_03

选择“SCSI”类型,点击“下一步”

Linux实验案例:LVM卷管理及配额设置_标识符_04

选择“创建新虚拟磁盘”,点击“下一步”

Linux实验案例:LVM卷管理及配额设置_标识符_05

输入磁盘容量,选择“将虚拟磁盘拆分成多个文件”,点击“下一步”

Linux实验案例:LVM卷管理及配额设置_centos_06

点击“完成”

Linux实验案例:LVM卷管理及配额设置_centos_07

两块硬盘添加完成,点击“确定”,添加完成

Linux实验案例:LVM卷管理及配额设置_标识符_08

点击“开启此虚拟机”

Linux实验案例:LVM卷管理及配额设置_linux_09

进入CentOS系统

Linux实验案例:LVM卷管理及配额设置_标识符_10

2、添加磁盘设备并建立LVM磁盘管理方案

创建分区并格式化为XFS文件系统

[root@pd001 ~]# pvscan 
PV /dev/sda2 VG centos lvm2 [<59.00 GiB / 0 free]
Total: 1 [<59.00 GiB] / in use: 1 [<59.00 GiB] / in no VG: 0 [0 ]
[root@pd001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xb798967b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb798967b

设备 Boot Start End Blocks Id System

命令(输入 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):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb798967b

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Empty”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@pd001 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xe25786ad 创建新的 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):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Empty”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@pd001 ~]# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, versinotallow=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@pd001 ~]# mkfs -t xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, versinotallow=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

将/dev/sdb1和/dev/sdc1转换为物理卷,并查看物理卷的详细信息

[root@pd001 ~]# pvcreate /dev/sdb1 /dev/sdc1
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
WARNING: xfs signature detected on /dev/sdc1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdc1.
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
[root@pd001 ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<59.00 GiB / 0 free]
PV /dev/sdb1 lvm2 [<20.00 GiB]
PV /dev/sdc1 lvm2 [<20.00 GiB]
Total: 3 [98.99 GiB] / in use: 1 [<59.00 GiB] / in no VG: 2 [<40.00 GiB]
[root@pd001 ~]# pvdisplay /dev/sdb1 /dev/sdc1
"/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 XNqxcr-aSfP-HbNz-ba9y-X7y6-7KPO-j4wC8O

"/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 XuJf2h-lRb0-HQCp-rFCM-cUlf-6jrc-mX733r

将上述两个物理卷整合,创建名为mail_store的卷组

[root@pd001 ~]# vgcreate mail_store /dev/sdb1 /dev/sdc1
Volume group "mail_store" successfully created
[root@pd001 ~]# vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
Found volume group "mail_store" using metadata type lvm2
[root@pd001 ~]# vgdisplay mail_store
--- Volume group ---
VG Name mail_store
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
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID O5w25j-DFhv-u3Yd-c5Dk-qriK-hJYF-TX7J1U

在mail_store卷组中创建一个名为mbox的逻辑卷,容量设置为20GB,并查看,使用mkfs命令多逻辑卷Mbox进行格式化,创建XFS文件系统,并挂载到/date目录下

[root@pd001 ~]# lvcreate -L 20G -n mbox mail_store
Logical volume "mbox" created.
[root@pd001 ~]# mkfs -t xfs /dev/mail_store/mbox
meta-data=/dev/mail_store/mbox isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, versinotallow=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@pd001 ~]# lvdisplay
..省略部分内容
--- Logical volume ---
LV Path /dev/mail_store/mbox
LV Name mbox
VG Name mail_store
LV UUID xBO0WK-IhVn-Zp47-JZ4q-Ev9P-Sa13-h1VJd9
LV Write Access read/write
LV Creation host, time pd001, 2022-07-05 17:27:47 +0800
LV Status available
# open 0
LV Size 20.00 GiB
Current LE 5120
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

root@pd001 ~]# mkdir /date
[root@pd001 ~]# mount /dev/mail_store/mbox /date
[root@pd001 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 58G 5.1G 53G 9% /
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 179M 836M 18% /boot
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/mapper/mail_store-mbox xfs 20G 33M 20G 1% /date

3、设置磁盘配额,要求用户jerry最多只能使用500MB磁盘空间,appc组的用户合计最多只能使用5GB磁盘空间。

创建jerry和zhangsan两个用户,创建accp组,将张三加入到appc组中

[root@pd001 ~]# useradd jerry
[root@pd001 ~]# passwd jerry
更改用户 jerry 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@pd001 ~]# useradd zhangsan
[root@pd001 ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@pd001 ~]# groupadd appc
[root@pd001 ~]# gpasswd -a zhangsan appc
正在将用户“zhangsan”加入到“appc”组中
[root@pd001 ~]# groups zhangsan
zhangsan : zhangsan appc
[root@pd001 ~]# tail -2 /etc/passwd
jerry:x:1001:1001::/home/jerry:/bin/bash
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
[root@pd001 ~]#

设置磁盘配额,要求用户jerry最多只能使用500MB磁盘空间,appc组的用户合计最多只能使用5GB磁盘空间。

[root@pd001 ~]# umount /date/
[root@pd001 ~]# mount -o usrquota,grpquota /dev/mail_store/mbox /date
[root@pd001 ~]# mount
..省略部分内容
/dev/mapper/mail_store-mbox on /date type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[root@pd001 ~]# chmod 777 /date/ //为了后续测试,允许任何用户写入数据
[root@pd001 ~]# xfs_quota -x -c 'limit -u bhard=500M jerry' /date/
[root@pd001 ~]# xfs_quota -x -c 'limit -g bhard=5G appc' /date/

验证磁盘配额功能,使用jerry账号验证

[jerry@pd001 ~]$ dd if=/dev/zero of=/date/ddtest.data bs=2M count=5
记录了5+0 的读入
记录了5+0 的写出
10485760字节(10 MB)已复制,0.00365622 秒,2.9 GB/秒
[jerry@pd001 ~]$ ls -lh /date/ddtest.data
-rw-rw-r--. 1 jerry jerry 10M 7月 6 10:15 /date/ddtest.data
[jerry@pd001 ~]$ cd /date
[jerry@pd001 date]$ dd if=/dev/zero of=date bs=2M count=100
记录了100+0 的读入
记录了100+0 的写出
209715200字节(210 MB)已复制,0.0851234 秒,2.5 GB/秒
[jerry@pd001 date]$ dd if=/dev/zero of=date bs=2M count=200
记录了200+0 的读入
记录了200+0 的写出
419430400字节(419 MB)已复制,0.131844 秒,3.2 GB/秒
[jerry@pd001 date]$ dd if=/dev/zero of=date bs=2M count=300
dd: 写入"date" 出错: 超出磁盘限额
记录了246+0 的读入
记录了245+0 的写出
513802240字节(514 MB)已复制,0.153236 秒,3.4 GB/秒
[jerry@pd001 date]$

查看组账号的磁盘容量限制

[root@pd001 ~]# xfs_quota -c 'quota -gv appc' /date/
Disk quotas for Group appc (1003)
Filesystem Blocks Quota Limit Warn/Time Mounted on
/dev/mapper/mail_store-mbox
0 0 5242880 00 [--------] /date