Linux之高级文件系统管理——10

一、磁盘配额

  1. 磁盘配额概念
  2. 磁盘配额条件
  • 内核必须支持磁盘配额
[root@localhost ~]# grep CONFIG_QUOTA /boot/config-3.10.0-693.el7.x86_64
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
  • 系统中必须安装了 quota 工具,我们的 Linux 默认是安装了 quota 工具的,查看命令如下
[root@localhost ~]# rpm -qa | grep quota
quota-4.01-14.el7.x86_64

要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的

  1. 概念

1)用户配额和组配额
2)磁盘容量限制和文件个数限制
3)软限制和硬限制
4)宽限时间
如果用户的空间占用数处于软限制和硬限制之间,就会在用户登录时警告用户磁盘将满,这个时间就是宽限时间,默认是7天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制

  1. 磁盘配额规划
    我们开始磁盘配额实验,首先我们来规划下我们的实验:
  • 磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。那么我们手工建立一个 5GB 的 /dev/sdb1 分区,把它挂载到 /disk 目录当中
  • 还是我们需要建立被限制的用户和用户组。那么我们假设需要限制 user1、user2和 user3 用户,这三个用户属于 test 用户组
  • 其中 test 组磁盘容量硬限制为 500MB,软限制 450MB,文件个数不做限制。user1 用户为了便于测试,磁盘容量硬限制为 50MB,软限制为 40MB,文件个数硬限制限制为10个,软限制为8个。user2和user3用户磁盘容量限制为250MB,软限制为200MB,文件个数不做限制。
  • 大家发现user1、user2和user3用户加起来的磁盘容量限制为550MB,超过了 test 组的磁盘容量限制 500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制同时存在,那么哪个限制更小,哪个限制优先生效
  • 系统宽限事件我们改为8天
  1. 磁盘配额步骤

1)分 5GB 的 /dev/sdb1 分区,并将它挂载到 /disk 目录当中

2)建立需要做限制的用户和用户组

[root@localhost ~]# groupadd test
[root@localhost ~]# useradd -G test user1
[root@localhost ~]# useradd -G test user2
[root@localhost ~]# useradd -G test user3
[root@localhost ~]# passwd user1
[root@localhost ~]# passwd user2
[root@localhost ~]# passwd user3

3)在分区上开启磁盘配额功能

[root@localhost ~]# mount -o remount,usrquota,grpquota /disk
#重新挂载 /disk 分区,并加入用户和用户组的磁盘配额功能

我们要想永久生效,则需要修改 /etc/fstab 文件,改成:

[root@localhost ~]# vi /etc/fstab
/dev/sdb1	/disk 	xfs 	defaults,usrquota,grpquota 		0 0
...省略部分输出...
[root@localhost ~]# mount -o remount /disk
#修改配置文件如果想生效,必须重启系统,否则也需要把分区重新挂载一遍

4)建立磁盘配额的配置文件

[root@localhost ~]# quotacheck [选项] [分区名]
选项:
		-a:扫描 /etc/mtab 文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了
		-c:不管原有的配置文件,重新扫描并建立新的配置文件
		-u:建立用户配额的配置文件,也就是生成 aquota.user 文件
		-g:建立组配额的配置文件,会生成 aquota.group 文件
		-v:显示扫描过程
		-m:强制以读写的方式扫描文件系统,和 -M 类似。一般扫描根分区时使用
		-f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
[root@localhost ~]# quotacheck -avug

需要关闭SELinux,否则会报错

[root@localhost ~]# ll /dsik
总用量 24
-rw------- 1 root root 6144 4月		17 01:03 aquota,group
-rw------- 1 root root 6144 4月		17 01:03 aquota.user
#/disk目录中两个配额配置文件已经建立

如果需要给根分区开启配额功能,需要:

[root@localhost ~]# vi /etc/fstab
UUID=435b56cc-f483-486f-b074-0a6b68c866fe /    xfs     defaults,usrquota,grpquota        1 1
#开启/分区的配额功能
[root@localhost ~]# mount -o remount /
#重新挂载/分区
[root@localhost ~]# quotacheck -avugm

如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而 quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用 -m 强制以读写方式扫描文件系统了

5)设置用户和组的配额限制

[root@localhost ~]# edquota [选项] [用户或组名]
选项:
		-u 用户名:设定用户配额
		-g 组名:  设定组配额
		-t:	  设定宽限时间
		-p:	  赋值配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定

我们给 user1 用户设定的配额限制时:磁盘空间软限制是 40MB,硬限制是 50MB;文件个数的软限制是 8个,硬限制是 10个(稍微小一点,一会测试时方便测试)。命令如下:

[root@localhost ~]# edquota -u user1
#edquota 命令进入之后,就是标准的 vi 操作方法
Disk quotas for user user1 (uid 500):
#磁盘配额是设定用户 user1 (UID是500)
  Filesystem         blocks       soft       hard     inodes     soft     hard
  /dev/sdb5             0          0          0          0        0        0
  #分区名		   	已占用量		 软限制    硬限制   已占用文件数   软限制  硬限制
Disk quotas for user user1 (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb5                         0          40000          50000          0        8        10
  #不用对齐,是七列就行    

再给 user2 用户配置限额,user2 用户要求是空间软限制 250 MB,硬限制 250MB,文件个数不做限制:

[root@localhost ~]# edquota -u user2
Disk quotas for user user2 (uid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb5                         0          250000          300000          0        0        0

接下来给 test组配额限额,test 组要求是空间软限制是 450MB,硬限制 500MB,文件个数不做限制:

[root@localhost ~]# edquota -g test
Disk quotas for group test (gid 1004):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb5                         0          450000         500000          0        0        0      

6)配额复制
user3 用户的配额值和 user2 用户完全一样,我们就可以使用 user2 用户作为模板进行复制。这样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令如下:

[root@localhost ~]# edquota -p user2 -u user3
#命令     -p      源用户     -u      目标用户

7)修改宽限时间
我们要求把宽限时间改为8天,修改命令如下:

[root@localhost ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sdb5                     8days                  8days  
  #分区名					容量的宽限时间	 	  个数的宽限时间

8)启动和关闭配额
配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:

[root@localhost ~]# quotaon [选项] [分区名]
选项:
		-a:依据 /etc/mtab 文件启动所有的配额分区。如果不加 -a ,后面就一定要指定分区名
		-u:启动用户配额
		-g:启动组配额
		-v:显示启动过程的信息

[root@localhost ~]# quotaon -vug /disk/
quotaon: Enforcing group quota already on /dev/sdb5
quotaon: Enforcing user quota already on /dev/sdb5
#启动 /disk 分区的配额

[root@localhost ~]# quotaon -avug
#这条命令也可以

关闭配额的命令如下:

[root@localhost ~]# quotaoff [选项] [分区名]
选项:
		-a:依据 /etc/mtab 文件关闭所有的配额分区。如果不加 -a ,后面就一定要指定分区名
		-u:关闭用户配额
		-g:关闭组配额

[root@localhost ~]# quotaoff -a
#依据 /etc/mtab 文件关闭配额分区
  1. 磁盘配额查询
  • quota 查询用户或用户组配额
[root@localhost ~]# quota [选项] [用户名或组名]
选项:
		-u 用户名: 查询用户配额
		-g 组名:   查询组配额
		-v:       显示详细信息
		-s:	   以习惯单位显示容量大小,如 M,G

[root@localhost ~]# quota -uvs user1
  • repquota 查询文件系统配额
[root@localhost ~]# requota [选项] [分区名]
选项:
		-a:依据 /etc/mtab 文件查询配额。如果不加 -a 选项,就一定要加分区名
		-u:查询用户配额
		-g:查询组配额
  1. 测试
[user1@localhost ~]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
#建立 testfile 文件,指定大小 60MB
  1. 非交互设定用户磁盘配额
[root@localhost ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名
[root@localhost ~]# useradd user4
[root@localhost ~]# passwd user4
#建立用户
[root@localhost ~]# setquota -u user4 10000 20000 5 8 /disk
#设定用户在 /disk 分区的容量软限制为 10MB ,硬限制 20MB。文件个数软限制 5个,硬限制 8个

二、LVM 逻辑卷管理

  1. 简介

LVM是 Logical Volume Manager 的简称,中文就是逻辑卷管理

在这里插入图片描述

  • 物理卷(PV,Physical Volume):就是真正的物理硬盘或分区
  • 卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一个逻辑硬盘
  • 逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成为分区。
  • 物理扩展 (PE,Physical Extend):PE是用来保存数据的最小单元,我们的数据实际上都是写入PE当中,PE的大小是可以配置的,默认是 4MB
  1. 建立LVM的步骤:
  • 首先需要把物理硬盘分成分区,当然也可以是整块物理硬盘。
  • 然后把物理分区建立成为物理卷(PV),也可以直接把整块硬盘都建立为物理卷
  • 接下来把物理卷整合为卷组(VG)。卷组就已经可以动态的调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除
  • 最后就是把卷组再划分成为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻辑卷可以想象成为分区,所以也需要格式化和挂载
  1. 物理卷管理

1)硬盘分区
创建方式就是使用 fdisk 交互命令,不过需要注意的是分区的系统ID不再是 Linux 默认的分区 ID 号 83了,而要改成 LVM 的 ID 号 8e

2)建立物理卷

[root@localhost ~]# pvcreate [设备文件名]

建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷,如果要把整块硬盘都建立成物理卷,命令如下

[root@localhost ~]# pvcreate /dev/sdb

在我们的使用中,是要把分区建立成为物理卷,所以执行以下命令:

[root@localhost ~]# pvcreate /dev/sdb5

3)查看物理卷

[root@localhost ~]# pvscan
  PV /dev/sdb6                      lvm2 [2.00 GiB]
  PV /dev/sdb5                      lvm2 [2.00 GiB]
  PV /dev/sdb7                      lvm2 [2.00 GiB]
  PV /dev/sdb8                      lvm2 [2.00 GiB]
  Total: 4 [8.00 GiB] / in use: 0 [0   ] / in no VG: 4 [8.00 GiB]

我们可以看到在我的系统中,/dev/sdb5-7这三个分区是物理卷。最后一行的意思是:总共3个物理卷[大小] / 使用了 0 个卷[大小] / 空闲 3 个卷[大小]
第二个查询命令是 pvdisplay,它可以查看到更详细的物理卷状态,命令如下:

[root@localhost ~]# pvdisplay
  "/dev/sdb6" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb6       #PV名
  VG Name							    #属于的VG名,还没有分配,所以空白
  PV Size               2.00 GiB		#PV的大小
  Allocatable           NO				#是否已经分配
  PE Size               0				#PE大小,因为还没有分配,所以PE大小也没有指定
  Total PE              0				#PE总数
  Free PE               0			    #空闲PE数
  Allocated PE          0               #可分配的PE数
  PV UUID               EiZ9JM-FULx-HVSp-9sBR-66dk-1LA5-eya0ti			#PV的UUID

4)删除物理卷

[root@localhost ~]# pvremove /dev/sdb7
  1. 卷组管理

1)建立卷组

[root@localhost ~]# vgcreate [选项] 卷组名 物理卷名
选项:
		-s PE大小:指定PE的大小,单位可以是 MG,GB,TB等。如果不写默认PE大小是4MB

我们又三个物理卷 /dev/sdb5-7,我们先把 /dev/sdb5 和 /dev/sdb6 加入卷组,留着 /dev/sdb7 一会实验调整卷组大小,命令如下:

[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
	Volume group "scvg" successfully created

2)查看卷组

查看卷组的命令同样是两个,vgscan 主要是查看系统中是否有卷组,而vgdisplay 则是查看卷组的详细状态的。命令如下:

[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "scvg" using metadata type lvm2

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               scvg				#卷组名
  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               3.98 GiB			#卷组大小
  PE Size               8.00 MiB			#PE大小
  Total PE              510					#PE总数
  Alloc PE / Size       0 / 0				#已用PE数量/大小
  Free  PE / Size       510 / 3.98 GiB		#空闲PE数量/大小
  VG UUID               A5KmAH-ShI5-JYBO-OyRD-3EHw-C8jk-v9Z0Gj

3)增加卷组容量

[root@localhost ~]# vgextend scvg /dev/sdb7
  Volume group "scvg" successfully extended
  #把 /dev/sdb7 物理卷也加入 scvg卷组
  [root@localhost ~]# vgdisplay
    VG Name               scvg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  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               <5.98 GiB
  PE Size               8.00 MiB
  Total PE              765
  Alloc PE / Size       0 / 0
  Free  PE / Size       765 / <5.98 GiB
  VG UUID               A5KmAH-ShI5-JYBO-OyRD-3EHw-C8jk-v9Z0Gj

4)减小卷组容量

[root@localhost ~]# vgreduce scvg /dev/sdb7
  Removed "/dev/sdb7" from volume group "scvg"
  #在卷组中删除 /dev/sdb7 物理卷

[root@localhost ~]# vgreduce -a
#删除所有的未使用物理卷

5)删除卷组

[root@localhost ~]# vgremove scvg
  Volume group "scvg" successfully removed

卷组删除之后,才能删除物理卷。还要注意的是 scvg 卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。删除就是安装的反过程,每一步都不能跳过

  1. 逻辑卷管理

1)建立逻辑卷

[root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名
选项:
		-L 容量:指定逻辑卷大小,单位 MB,GB,TB等
		-l 个数:按照PE个数指定逻辑卷大小,这个参数需要换算容量,太麻烦
		-n 逻辑卷名:指定逻辑卷名

那我们就建立一个 1.5GB 的 userlv 逻辑卷吧,建立命令如下:

[root@localhost ~]# lvcreate -L 1.5G -n userlv scvg
  Logical volume "userlv" created.
#在 scvg 卷组中建立 1.5GB 的 userlv 逻辑卷

建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,不过需要注意的是逻辑卷的设备文件名是 /dev/卷组名/逻辑卷名,如我们的 userlv 的设备文件名就是 “/dev/scvg/userlv”,具体命令如下:

[root@localhost ~]# mkfs -t ext4 /dev/scvg/userlv
#格式化
[root@localhost ~]# mkdir /disklvm
[root@localhost ~]# mount /dev/scvg/userlv /disklvm/
#建立挂载点,并挂载
[root@localhost ~]# mount
...省略部分输出...
/dev/mapper/scvg-userlv on /disklvm type xfs (rw)
#已经挂载了

当然如果需要开机自动挂载,也要修改/etc/fstab 文件

2)查看逻辑卷
同样的查看命令是两个,第一个命令 lvscan 只能看到系统中是否拥有逻辑卷,命令如下:

[root@localhost ~]# lvcan
  ACTIVE            '/dev/scvg/userlv' [1.50 GiB] inherit
  ACTIVE            '/dev/scvg/sclv' [1.50 GiB] inherit
 #能够看到激活的逻辑卷,大小是 1.5GB

第二个命令是 lvdisplay 可以看到逻辑卷的详细信息,命令如下:

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/scvg/userlv					#逻辑卷设备文件名
  LV Name                userlv								#逻辑卷名
  VG Name                scvg								#所属的卷组名
  LV UUID                tOC8WO-aYWI-pG2T-FDoT-xhfD-92Gf-c3Uj3V
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-09-17 22:20:44 -0700
  LV Status              available
  # open                 1
  LV Size                1.50 GiB							#逻辑卷大小
  Current LE             384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

3)调整逻辑卷大小

[root@localhost ~]# lvresize [选项] 逻辑卷设备文件名
选项:
		-L 容量:安装容量调整大小,单位KB,GB,TB等。使用 + 代表增加空间, - 号代表减少空间。如果直接写容量,代表设定逻辑卷大小为指定大小
		-l 个数:按照 PE 个数调整逻辑卷大小

我们现在 /disklm 中建立点文件,一会调整完大小,我们看看数据是否会丢失

[root@localhost ~]# cd /disklvm/
[root@localhost disklvm]# touch testf
[root@localhost disklvm]# mkdir testd
[root@localhost disklvm]# ls
testd  tstf

我们刚刚的 userlv 的大小是 1.5GB,我们的 scvg 中还有 1.5GB 的空闲空间,那么增加我们的 userlv 逻辑卷的大小到 2.5GB:

[root@localhost disklvm]# lvresize -L 2.5GB /dev/scvg/userlv
  Size of logical volume scvg/userlv changed from 1.50 GiB (384 extents) to 2.50 GiB (640 extents).
  Logical volume scvg/userlv successfully resized.
  #增加 userlv 逻辑卷的大小到 2.5GB
  #当然命令也可以这样写 [root@localhost disklvm]# lvresize -L +1G /dev/scvg/userlv

[root@localhost disklvm]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/scvg/userlv
  LV Name                userlv
  VG Name                scvg
  LV UUID                tOC8WO-aYWI-pG2T-FDoT-xhfD-92Gf-c3Uj3V
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-09-17 22:20:44 -0700
  LV Status              available
  # open                 1
  LV Size                2.50 GiB
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

逻辑卷的大小已经改变了,但是好像有些问题:

[root@localhost disklvm]# df -h /disklvm/
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/scvg-userlv  1.5G   33M  1.5G   3% /disk

怎么 /disklvm 分区的大小还是 1.5GB?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用 resize2fs 命令来调整分区的大小。不过这里就体现了 LVM 的优势,我们不需要卸载分区,直接就能调整分区的大小,resize2fs 命令如下:

[root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]
选项:
		-f:强制调整
		设备文件名:指定调整哪个分区的大小
		调整的大小:指定把分区调整到多大,要加M,G等单位。如果不加大小,会使用整个分区

那么我们已经把逻辑卷调整到了 2.5GB ,这时我们就需要把整个逻辑卷都加入 /disklvm 分区,命令如下:

[root@localhost ~]# resize2fs /dev/scvg/userlv       #这条命令不支持xfs格式的文件系统
[root@localhost ~]# xfs_growfs /dev/scvg/userlv		 #xfs用这条命令来扩磁盘空间
meta-data=/dev/mapper/scvg-userlv isize=512    agcount=4, agsize=98304 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=393216, 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
#已经调整了分区大小

[root@localhost ~]# df -h /disklvm/
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/scvg-userlv  2.5G   33M  3.0G   2% /disk
#分区大小已经是2.5GB了
[root@localhost ~]# ls /disklvm/
testd testf
#而且数据并没有丢失

4)删除逻辑卷

[root@localhost ~]# lvremove 逻辑卷设备文件名

我们删除 userlv 这个逻辑卷,记得删除时要先卸载。命令如下:

[root@localhost ~]# umount /dev/scvg/userlv
[root@localhost ~]# lvremove /dev/scvg/userlv
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值