逻辑卷LVM和磁盘配额管理

逻辑卷的概述

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

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

LVM的优点

逻辑卷的出现解决了分区无法扩容的问题,在有硬件设备支持的前提下逻辑卷可以做到不影响正常工作的环境下扩容分区容量。动态调整磁盘容量,提高磁盘管理的灵活性。

  • 动态调整磁盘容量,从而提高磁盘管理的灵活性
  • 允许在多个物理设备间重新组织文件系统
  • LVM可以弹性的更改LVM的容量

注意: /boot分区用于存放引导文件(开机启动文件),而LVM逻辑卷属于虚拟技术,只能是开机后才可以使用的,所以不能基于LVM创建。

逻辑卷管理命令

功能 物理卷管理 卷组管理 逻辑卷管理
scan 扫描 pvscan vgscan lvscan
create建立 pvcreate vgcreate lvcreate
display显示 pvdisplay vgdisplay lvdisplay
remove删除 pvremove vgremove lvremove
extend扩展 vgextend lvextend
reduce减少 vgreduce lvreduce

创建命令格式:

less 复制代码
pvcreate 设备名1 设备名2 [设备名3]...              //创建物理卷
vgcreate 卷组名 物理卷名1 物理卷名2 [物理卷3]...   //创建卷组   
lvcreate -L 容量大小 -n 逻辑卷名 卷组名           //创建逻辑卷
mkfs.xfs 逻辑卷名(/dev/卷组名/逻辑名)          //将逻辑卷格式化
mount 逻辑卷名(/dev/卷组名/逻辑名) 挂载点      //将逻辑卷挂载

演示:

先建立物理卷
把/dev/sdb1 和/dev/sdc1合并建立卷组。
建立逻辑卷
建好的逻辑卷有两种软连接(叫法)
将逻辑卷进行格式化
对建立好的逻辑卷进行最后一步挂载

扩容命令格式:

ruby 复制代码
vgextend 卷组名 物理卷名4                 //扩容卷组
lvextend -L +大小 /dev/卷组名/逻辑卷名   //扩容逻辑卷
xfs_growfs 挂载点(逻辑卷)                       //XFS文件系统扩容
resize2fs /dev/VG_NAME/LV_NAME         //EXT4文件系统扩容

扩容卷组,将/dev/sdb2分区扩容到zhu卷组
扩容逻辑卷
对刚刚扩容的空间加上xfs文件系统

LVM逻辑卷运用

实验步骤

  1. 创建物理卷:将/dev/sdb1和/dev/sdc1创建成物理卷
  2. 创建组卷:创建vg1的组卷,将两个物理卷sdb1和sdc合并组建到vg1中
  3. 创建逻辑卷:从vg1中抽取10G容量用来创建逻辑卷lv1
  4. 格式化逻辑卷:将逻辑卷lv1格式化为XFS文件系统
  5. 挂载逻辑卷:将逻辑卷lv1挂载到/mnt目录下

实验内容:

1.使用fdisk工具规划分区,将/dev/sdb1和/dev/sdc1的分区格式设置为Linux LVM(对应系统ID为8e)

scss 复制代码
[root@localhost ~]# fdisk /dev/sdb         
欢迎使用 fdisk (util-linux 2.23.2)。

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


命令(输入 m 获取帮助):t                    //管理磁盘分区,将sdb1的格式改为lvm
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区"Linux"的类型更改为"Linux LVM"

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

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

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

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

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+19G
分区 1 已设置为 Linux 类型,大小设为 19 GiB

命令(输入 m 获取帮助):t                                        //管理磁盘分区将sdc1改成lvm格式
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区"Linux"的类型更改为"Linux LVM"

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

Calling ioctl() to re-read partition table.
正在同步磁盘。

2.pvcreate命令,将/dev/sdb1和/dev/sdc1创建物理卷。

ini 复制代码
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1                       //创建物理卷
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvscan                                            //扫描查看物理卷
  PV /dev/sda2   VG centos          lvm2 [14.00 GiB / 4.00 MiB free]
  PV /dev/sdc1                      lvm2 [19.00 GiB]
  PV /dev/sdb1                      lvm2 [15.00 GiB]
  Total: 3 [48.00 GiB] / in use: 1 [14.00 GiB] / in no VG: 2 [34.00 GiB]

3.vgcreate命令,创建卷组vg1,并将2个物理卷分配给vg1。

sql 复制代码
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdc1    //创建组卷
  Volume group "vg1" successfully created
[root@localhost ~]# vgscan                              //扫描组卷
  Reading volume groups from cache.
  Found volume group "vg1" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2
[root@localhost ~]# vgdisplay vg1                       //显示组卷基本信息列表
  --- Volume group ---
  VG Name               vg1
  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               33.99 GiB
  PE Size               4.00 MiB
  Total PE              8702
  Alloc PE / Size       0 / 0   
  Free  PE / Size       8702 / 33.99 GiB
  VG UUID               TKiUx6-A7gb-YxYk-dYlo-PrvA-SdfQ-dD702g

4.lvcreate 命令,从vg01中取8G容量创建逻辑卷lvmail

arduino 复制代码
[root@localhost ~]# lvcreate -L 10G -n lv1 vg1          //从vg1中抽取10G容量来创建一个lv1逻辑卷
  Logical volume "lv1" created.
[root@localhost ~]# lvdisplay                          //显示逻辑卷基本信息
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                hkFaxb-yCQ0-6t3w-2qBZ-apCN-CkcC-vMN7sc
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-04-10 16:55:46 +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

5.mkfs命令,将逻辑卷lv1格式化为XFS文件系统

ini 复制代码
[root@localhost ~]# mkfs.xfs /dev/vg1/lv1                                   //将lv1格式化为fxs文件系统
meta-data=/dev/vg1/lv1           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

6.将逻辑卷lv1挂载到/mnt 目录下

逻辑卷扩容示例

情况演示:

lv1现只有1G的容量 不够用现在需要再扩展10G。 而卷组也只剩2G容量不足扩容10G的需求,所以要向组卷添加新的物理卷,物理卷至少要超过8G容量,并且现在要1加物理卷的话需要在/dev/sdc盘下再重新分一区。

实验步骤:

使用fdisk工具,为硬盘 /dev/sdc 创建第二个分区。分区类型设置为LVM,系统ID为8e

sql 复制代码
[root@localhost ~]# fdisk /dev/sdc                 //管理磁盘分区,建立第二分区
欢迎使用 fdisk (util-linux 2.23.2)。

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


命令(输入 m 获取帮助):n                            //建立新分区
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+10G         //容量为10G
分区 2 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):t                                       //更改文件系统类型
分区号 (1,2,默认 2):
Hex 代码(输入 L 列出所有代码):8e                              //选择8e,将分区类型修改为LVM                            
已将分区"Linux"的类型更改为"Linux LVM"

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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
     
[root@localhost ~]# partprobe                                       //刷新分区
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开

pvcreate 命令,创建新的物理卷 /dev/sdc2。

csharp 复制代码
[root@localhost ~]# pvcreate /dev/sdc2                      //添加创建物理卷
  Physical volume "/dev/sdc2" successfully created.
[root@localhost ~]# pvdisplay  /dev/sdc2                   //查看物理卷内容
  "/dev/sdc2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3gZeWq-7NHn-AkLH-AEz0-STMI-c5px-mz45jK

vgextend 命令,将物理卷 /dev/sdc2 加入卷组 gv1。

arduino 复制代码
[root@localhost ~]# vgextend gv1 /dev/sdc2       //将物理卷/dev/sdc2加入卷组 gv1
  Volume group "gv1" successfully extended
[root@localhost ~]# vgdisplay  gv1               //显示卷组gv1的信息
  --- Volume group ---
  VG Name               gv1
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <24.99 GiB             //卷组总容量
  PE Size               4.00 MiB
  Total PE              6397
  Alloc PE / Size       3584 / 14.00 GiB      //卷组中已被分配的容量
  Free  PE / Size       2813 / <10.99 GiB    //卷组中的空余容量
  VG UUID               6qS7lo-3zWR-pR3s-g0dF-jI7L-HN1g-9UCkKw

lvextend 命令,为逻辑卷/dev/gv1/lv1 增加10的容量。

arduino 复制代码
[root@localhost ~]# lvextend -L +10G /dev/gv1/lv1             //为逻辑卷扩容10G
  Size of logical volume gv1/lv1 changed from 14.00 GiB (3584 extents) to 24.00 GiB (6144 extents).
  Logical volume gv1/lv1 successfully resized.
[root@localhost ~]# lvdisplay /dev/gv1/lv1                   //显示逻辑卷信息
  --- Logical volume ---
  LV Path                /dev/gv1/lv1
  LV Name                lv1
  VG Name                gv1
  LV UUID                Pj3itm-GhyP-wrja-CvlU-Ra7K-2oTA-xuCn3G
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-04-10 18:23:25 +0800
  LV Status              available
  # open                 0
  LV Size                24.00 GiB                          //逻辑卷总容量变为24G
  Current LE             6144
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

xfs_growfs 命令,使XFS文件系统识别到新增的空间,实现文件系统扩容。

csharp 复制代码
[root@localhost ~]# xfs_growfs /dev/gv1/lv1                            //将文件系统扩容新增部分格式化

磁盘配额

一、磁盘配额管理概述

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

在此概念中,有以下几个重点需要注意:

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

二、磁盘配额的使用条件

磁盘配额要想正常使用,有以下几个前提条件:

  • 内核必须支持磁盘配额。
  • 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
  • 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。
相关推荐
wdxylb1 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20072 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪2 小时前
关于Linux内核中头文件问题相关总结
linux
Lovyk5 小时前
Linux 正则表达式
linux·运维
Fireworkitte6 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9006 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char6 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
淮北也生橘128 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
华强笔记11 小时前
Linux内存管理系统性总结
linux·运维·网络
十五年专注C++开发12 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建