Linux高级文件系统管理

一、磁盘配额

1.1 磁盘配额概述

磁盘配额(Quota)是 Linux 系统中用于限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数。

以下几个重点需要注意:

  • 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的。
  • 磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,例如,如果将 /dev/sda5 是挂载在 /home 下,那么,在 /home 下的所有目录都会受到磁盘配额的限制。
  • 可以限制用户占用的磁盘容量大小(block),也能限制用户允许占用的文件个数(inode)。

1.2 磁盘配额条件

1.2.1 内核支持

Centos 6.x 版本的 Linux 默认支持磁盘配额,不需要做任何修改。如果不放心,则可以查看内核配置文件,看是否支持磁盘配额。命令如下:

[root@localhost ~]# grep CONFIG_QUOTA /boot/config-2.6.32-642.el6.x86_64
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y

1.2.2 安装 Quota 工具

Linux 中默认安装了 Quota工具,查看命令如下:

[root@localhost ~]# rpm -qa | grep quota
quota-3.17-23.el6.x86_64

1.3 磁盘配额概念

1.3.1 用户配额和组配额

用户配额是指针对用户个人的配额,而组配额是指针对整个用户组的配额。如果需要限制的用户数量并不多,则可以给每个用户单独指定配额。如果用户比较多,可以把用户加入某个用户组,然后给组指定配额。

需要注意,组中的用户共享空间或文件数。如果用户 user1、user2 和 user3 都属于 family 用户组,我给 family 用户组分配 100MB 的磁盘空间,这三个用户不是平均分配这 100MB 空间的,而是先到先得。

1.3.2 磁盘容量限制和文件个数限制

除了可以通过限制用户可用的 block 数量来限制用户可用的磁盘容量,也可以通过限制用户可用的 inode 数量来限制用户可以上传或新建的文件个数。

1.3.3 软限制和硬限制

软限制可理解为警告限制,硬限制则为真正的限制了。比如,规定软限制为 100MB,硬限制为 200MB,当用户使用的磁盘空间为 100~200MB 时,用户还可以继续上传和新建文件,但是每次登录时都会收到一条警告消息,告诉用户磁盘将满。

1.3.4 宽限时间

如果用户的空间占用数处于软限制和硬限制之间,那么系统会在用户登录时警告用户磁盘将满,但是这个警告不会一直进行,而是有时间限制的,这个时间就是宽限时间,默认是 7 天。

如果到达宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。也就是说,如果软限制是 100MB,硬限制是 200MB,宽限时间是 7天,此时用户占用了 120MB,那么今后 7 天用户每次登录时都会出现磁盘将满的警告,如果用户置之不理,7 天后这个用户的硬限制就会变成 100MB,而不是 200MB 了。

1.4 磁盘配额步骤

1.4.1 开启用户配额和组配额(usrquota,grpquota)

将/dev/sdb1 分区进行磁盘配额。分 5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中。建立需要做限制的用户和用户组。

[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

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

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

要想永久生效,则需要在/etc/fstab 文件中增加如下内容。

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

1.4.2 建立磁盘配额的配置文件(quotacheck)

其实,磁盘配额(Quota)就是通过分析整个文件系统中每个用户和群组拥有的文件总数和总容量,再将这些数据记录在文件系统中的最顶层目录中,然后在此记录文件中使用各个用户和群组的配额限制值去规范磁盘使用量的。因此,建立 Quota 的记录文件是非常有必要的。

扫描文件系统(必须含有挂载参数 usrquota 和 grpquota)并建立 Quota 记录文件,可以使用 quotacheck 命令。此命令的基本格式为:

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

在使用这些选项时,读者只需一起下达 -avug 即可。至于 -f 和 -m 选项,是在文件系统已启动 quota 的情况下,还要重新扫描文件系统(担心有其他用户在使用 quota 中),才需要使用这两个选项。

[root@localhost ~]# quotacheck -avug

**注意:**需要关闭 SELinux,否则会报错。

进入/disk目录,发现生成了aquota.user,aquota.group文件。

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

1.4.3 设置用户和组的配额限制(edquota)

我们已经使用 quotacheck 命令创建好了磁盘配额(Quota)的记录文件,接下来就可以启动 Quota 了,启动方法也很简单,直接使用 quotaon 命令即可。

[root@localhost ~]# edquota [选项] [用户名或组名]
选项:
-u 用户名: 设定用户配额
-g 组名: 设定组配额
-t:设定宽限时间
-v:显示启动服务过程的详细信息
-p: 复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定

给 user1 用户设定的配额限制是:磁盘空间软限制是 40MB,硬限制是 50MB;文件个数的软限制是 8 个,硬限制是 10 个。

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

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

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

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

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

1.4.4 配额复制

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

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

1.4.5 修改宽限时间

把宽限时间改为 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/sdb1 8days 8days
#分区名 容量的宽限时间 个数的宽限时间

1.4.6 启动和关闭配额(quotaon,quotaoff)

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

[root@localhost ~]# quotaon [选项] [分区名]
选项:
-a:依据/etc/mtab 文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
-u:启动用户配额
-g:启动组配额
-v:显示启动过程的信息
[root@localhost ~]# quotaon -vug /disk/ 
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
#启动/disk 分区的配额
[root@localhost ~]# quotaon –avug
#这条命令也可以

关闭配额的命令如下:

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

1.4.7 查询磁盘配额(quota,repquota)

quota 查询用户或用户组配额:

[root@localhost ~]# quota [选项] [用户名或组名]
选项:
-u 用户名: 查询用户配额
-g 组名: 查询组配额
-v: 显示详细信息
-s: 以习惯单位显示容量大小,如 MG
[root@localhost ~]# quota -uvs user1

repquota 查询文件系统配额:

[root@localhost ~]# repquota [选项] [分区名]
选项:
-a: 依据/etc/mtab 文件查询配额。如果不加-a 选项,就一定要加分区名
-u: 查询用户配额
-g: 查询组配额
-v: 显示详细信息
-s: 以习惯单位显示容量大小
[root@localhost ~]# repquota –augvs

1.4.8 测试

这里登录用户需要切换到user1身份。

[user1@localhost disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
#建立 testfile 文件,指定大小 60MB

由于组配额限制为50MB,所以创建失败。

1.4.9 非交互设定用户磁盘配额(setquota)

这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁盘配额,再进行配额复制,也是可以的。

[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 逻辑卷

2.1 LVM 概述

在实际使用 Linux 服务器的时候,随着业务的增加,文件系统负载会越来越大,当到了空间不足的情况时,如果还在使用传统的分区方式管理硬盘,就不得不将现有的所有分区全部删除,并重新规划新的存储方案。不仅如此,分区到底应该分多大呢?分得太大,会浪费硬盘空间;分得太小,又会面临不够使用的情况。如果在安装系统时规划不合理,这种困扰就会经常出现。

在以往(2.4 内核以前)要想调整分区大小,要么先新建立一个更大的分区,然后复制旧分区中的内容到新分区,最后使用软链接来替代旧分区;要么使用调整分区大小的工具(如 parted),parted 虽然可以调整分区大小,但是它需要卸载分区之后才可以进行,也就是说需要停止服务。

从一开始,我们就需要有一种管理机制来帮助我们动态地管理存储,LVM 就提供了这种功能。LVM 最大的好处就是可以随时调整分区的大小,分区中的现有数据不会丟失,并且不需要卸载分区、停止服务。

LVM 是 Logical Volume Manager 的简称。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。LVM 为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。

LVM 是在硬盘分区之上建立一个逻辑层,这个逻辑层让多个硬盘或分区看起来像一块逻辑硬盘,然后将这块逻辑硬盘分成逻辑卷之后使用,从而大大提高了分区的灵活性。将真实的物理硬盘或分区称作物理卷(PV);由多个物理卷组成一块大的逻辑硬盘,叫作卷组(VG);将卷组划分成多个可以使用的分区,叫作逻辑卷(LV)。而在 LVM 中最小的存储单位不再是 block,而是物理扩展块(Physical Extend,PE)。

  • 物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。
  • 卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。可以把卷组想象为一块逻辑硬盘,支持动态扩容。
  • 逻辑卷(LV,Logical Volume):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
  • 物理扩展(PE,Physical Extend):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB。

2.2 建立 LVM 步骤

建立 LVM 的时候,需要按照以下步骤来进行:

**1.**把物理硬盘分成分区,当然也可以是整块物理硬盘;

**2.**把物理分区建立为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。

**3.**把物理卷整合为卷组(VG)。卷组就已经可以动态地调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。

**4.**把卷组再划分为逻辑卷(LV),逻辑卷也是可以直接调整大小的。逻辑卷可以想象为分区,所以也需要格式化和挂载。

2.3 物理卷管理

2.3.1 硬盘分区

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

2.3.2 建立物理卷

建立物理卷的命令如下:

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

在建立物理卷时,既可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,则命令如下:

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

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

[root@localhost ~]# pvcreate /dev/sdb5
Writing physical volume data to disk "/dev/sdb5" Physical volume "/dev/sdb5" successfully created
[root@localhost ~]# pvcreate /dev/sdb6
Writing physical volume data to disk "/dev/sdb6" Physical volume "/dev/sdb6" successfully created
[root@localhost ~]# pvcreate /dev/sdb7
Writing physical volume data to disk "/dev/sdb7" Physical volume 7dev/sdb7' successfully created

2.3.3 查看物理卷

查看物理卷的命令有两个,第一个是 pvscan,用来查询系统中哪些硬盘或分区是物理卷。命令如下:

[root@localhost ~]# pvscan
PV /dev/sdb5 Ivm2 [1.01 GiB]
PV /dev/sdb6 Ivm2 [1.01 GiB]
PV /dev/sdb7 Ivm2 [1.01 GiB]
Total: 3 [3.03 GiB] /in no VG: 0 [0 ] / in no VG: 3 [3.03 GiB]

可以看到在系统中,/dev/sdb5-7 这三个分区是物理卷。最后一行的意思是:总共 3 个物理卷[大小] / 使用了 0 个卷[大小] / 空闲 3 个卷[大小]。

第二个查询命令是 pvdisplay,它可以查看到更详细的物理卷状态,命令如下:

[root@localhost ~]# pvdisplay 
 "/dev/sdb5" is a new physical volume of "1.01 GiB"
 --- NEW Physical volume ---
 PV Name /dev/sdb5 
 #PVVG Name 
 #属于的 VG 名,还没有分配,所以空白
 PV Size 1.01 GiB 
 #PV 的大小
 Allocatable NO 
 #是否已经分配
 PE Size 0 
 #PE 大小,因为还没有分配,所以 PE 大小也没有指定
 Total PE 0 
 #PE 总数
 Free PE 0 
 #空闲 PE 数
 Allocated PE 0 
 #可分配的 PEPV UUID CEsVz3-f0sD-e1w0-wkHZ-iaLq-O6aV-xtQNTB 
 #PVUUID

2.3.4 删除物理卷

如果不再需要物理卷,则使用 pvremove 命令删除,命令如下:

[root@localhost ~]# pvremove /dev/sdb7

**注意:**在删除物理卷时,物理卷必须不属于任何卷组,也就是需要先将物理卷从卷组中删除,再删除物理卷。

2.4 卷组管理

2.4.1 建立卷组

建立卷组使用的命令是 vgcreate,具体命令格式如下:

[root@localhost ~]# vgcreate [选项] 卷组名 物理卷名
选项:
-s PE 大小:指定 PE 的大小,单位可以是 MB,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.4.2 查看卷组

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

[root@localhost ~]# vgscan
 Reading all physical volumes. This may take a while...
 Found volume group "scvg" using metadata type lvm2
#scvg 的卷组确实存在
[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 2.02 GiB 
 #卷组大小
 PE Size 8.00 MiB 
 #PE 大小
 Total PE 258 
#PE 总数
 Alloc PE / Size 0 / 0 
#已用 PE 数量/大小
 Free PE / Size 258 / 2.02 GiB 
 #空闲 PE 数量/大小
 VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

2.4.3 扩容卷组

现在要将 /dev/sdb7 加入卷组,使用的命令是 vgextend。命令如下:

[root@localhost ~]# vgextend scvg /dev/sdb7
Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入scvg卷组
[root@localhost ~]# vgdisplay
---Volume group ---
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 3.02 GiB
#卷组容量增加
PE Size 8.00 MiB
Total PE 387
#PE 总数增加
Alloc PE / Size 0/0
Free PE / Size 387 / 3.02 GiB
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

2.4.4 减小卷组

既然可以增加卷组容量,当然也可以减少卷组容量,我们使用 vgreduce 命令在卷组中删除物理卷,删除之后记得再添加回来,以便下面再用于实验。命令如下:

[root@localhost ~]# vgreduce scvg /dev/sdb7
Removed "/dev/sdb7" from volume group "scvg"
#在卷组中删除/dev/sdb7物理卷
[root@localhost ~]# vgreduce -a
#删除所有未使用的物理卷

2.4.5 删除卷组

删除卷组的命令是 vgremove。命令如下:

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

**注意:**只有在删除卷组之后,才能删除物理卷。还要注意的是,scvg 卷组中还没有添加任何逻辑卷,如果拥有了逻辑卷,则记得先删除逻再删除卷组。

删除之后记得再建立回来,否则逻辑卷的实验无法完成。命令如下:

[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6 /dev/sdb7
Volume group "scvg" successfully created
#这次三个物理卷就一起加入卷组了

2.5 逻辑卷管理

2.5.1 建立逻辑卷

可以把逻辑卷想象成分区,那么这个逻辑卷当然也需要被格式化和挂载。另外,逻辑卷也是可以动态调整大小的,而且数据不会丟失,也不用卸载逻辑卷。

之前建立了 3GB 大小的卷组 scvg,接下来需要在卷组中建立逻辑卷。命令格式如下:

[root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名
选项:
-L 容量:指定逻辑卷大小,单位 MBGBTB-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 ext4 (rw)
#已经挂载了
#如果需要开机自动挂载,也要修改/etc/fstab 文件

2.5.2 查看逻辑卷

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

[root@localhost ~]# lvscan 
 ACTIVE '/dev/scvg/userlv' [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 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
 LV Write Access read/write
 LV Creation host, time localhost, 2021-06-01 20:36:39 +0800
 LV Status available
 # open 1
 LV Size 1.50 GiB 
 #逻辑卷大小
 Current LE 192
 Segments 2
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

2.5.3 调整逻辑卷

可以使用 lvresize 命令调整逻辑卷的大小,一般不推荐减少逻辑卷的空间,因为这非常容易导致逻辑卷中的文件系统的数据丟失。lvresize 命令格式如下:

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

先在/disklvm 中建立点文件,一会调整完大小后观察数据是否会丢失:

[root@localhost ~]# cd /disklvm/
[root@localhost disklvm]# touch testf
[root@localhost disklvm]# mkdir testd
[root@localhost disklvm]# ls
lost+found testd testf

刚刚的 userlv 逻辑卷的大小是 1.5GB, scvg卷组中还有 1.5GB 的空闲空间,增加 userlv 逻辑卷的大小到 2.5GB 。

[root@localhost disklvm]# lvresize -L 2.5G /dev/scvg/userlv 
 Extending logical volume userlv to 2.50 GiB
 Logical volume 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 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
 LV Write Access read/write
 LV Creation host, time localhost, 2021-06-01 21:36:39 +0800
 LV Status available
 # open 1
 LV Size 2.50 GiB 
 #大小改变了
 Current LE 320
 Segments 3
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

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

[root@localhost disklvm]# df -h /disklvm/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/scvg-userlv 1.5G 35M 1.4G 3% /disklvm

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

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

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

[root@localhost ~]# resize2fs /dev/scvg/userlv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/scvg/userlv is mounted on /disklvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/scvg/userlv to 655360 (4k) blocks.
The filesystem on /dev/scvg/userlv is now 655360 blocks long.
#已经调整了分区大小
[root@localhost ~]# df -h /disklvm/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/scvg-userlv 2.5G 35M 2.4G 2% /disklvm
#分区大小已经是 2.5GB 了
[root@localhost ~]# ls /disklvm/
lost+found testd testf
#而且数据并没有丢失

2.5.4 删除逻辑卷

删除了逻辑卷,其中的数据就会丟失。命令格式如下:

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

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

[root@localhost ~]# umount /dev/scvg/userlv 
[root@localhost ~]# lvremove /dev/scvg/userlv