前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统中磁盘管理LVM与挂载

Linux系统中磁盘管理LVM与挂载

原创
作者头像
炒香菇的书呆子
发布2024-07-22 23:59:34
500
发布2024-07-22 23:59:34
举报
文章被收录于专栏:乌龟哥哥默认学习专栏

# Linux系统中磁盘管理LVM与挂载

本文以属于Linux系统基本概念,如果以查找教程教程,解决问题为主,只需要查看本文后半部分。如需要系统性学习请查看本文前半部分。

## 0. 引言

在Linux系统中,分区(Partition)是一个物理硬盘驱动器(HDD)或固态硬盘(SSD)上被划分出来的独立存储区域。每个分区都有自己独立的文件系统,可以包含不同类型的文件和数据,并且可以被操作系统独立地访问和管理。分区又可以分为物理分区和逻辑分区。

挂载指的是将一个文件系统连接到一个已存在的目录树中的某个点上,这个点称为“挂载点”(mount point)。挂载点既可以是本地路径,也可以是网络路径。一旦文件系统被挂载,用户就可以通过该挂载点访问和操作文件系统中的文件和目录。

本文将主要讲解Linux系统的分区,挂载概念以及如何进行屋里分区,逻辑分区,分组分卷,挂载的概念和操作实例,相关常见问题等。

本文操作极容易导致主机无法自动重启,请慎重操作。操作前务必要进行备份操作!

## 1. Linux系统磁盘分区

### 1.1 分区的基本概念

- **物理分区**:直接在物理硬盘上划分出的存储区域,它们占据了硬盘的一部分物理空间。物理分区是磁盘分区的最基本形式。

> tips:一块实体磁盘是一个物理分区吗?

>

> “块实体磁盘”通常指的是物理硬盘本身,它是存储数据的物理媒介。而“物理分区”则是指在物理硬盘上定义的逻辑区域,用于组织和管理数据。这两个概念并不完全等同。

>

> 1. **块实体磁盘**: 这个术语中的“块”通常指的是磁盘上数据的最小读写单位——块(block)。块实体磁盘是指整个物理磁盘设备,它可以是一个硬盘驱动器(HDD)、固态硬盘(SSD)、甚至是闪存驱动器或其他任何形式的非易失性存储设备。在较低层次,磁盘被划分为一系列的块,操作系统通过这些块来读写数据。

> 2. **物理分区**: 物理分区是物理硬盘上的一部分,是通过分区表(例如MBR或GPT)定义的逻辑区域。一个物理硬盘可以被分成一个或多个物理分区,每个分区可以有自己的文件系统,可以独立地被格式化和挂载。物理分区是操作系统用来区分和管理磁盘空间的一种方式。

- **逻辑分区**:在扩展分区内部创建的分区称为逻辑分区。在MBR(主引导记录)分区表类型的硬盘上,一个硬盘最多可以有四个主分区,或者三个主分区加上一个扩展分区,扩展分区内可以包含多个逻辑分区。GPT(GUID分区表)分区表类型则不受这个限制,支持更多的分区数量。

- **分区表**:分区表是硬盘上用于存储分区信息的结构GPT是一种分区表格式。GPT提供了对更大磁盘和更多分区的支持,并且是许多现代Linux发行版的默认选择。

## 2. Linux磁盘管理LVM

逻辑卷管理器LVM(LVM,Logical Volume Manager)允许用户将一个或多个物理硬盘上的分区组合成更大的存储池,并在这个池上创建逻辑卷(Logical Volumes,LVs),这些逻辑卷可以独立于底层物理磁盘进行扩展和收缩,从而提供了更好的磁盘空间利用率和管理效率。

LVM系统和磁盘的关系如图所示

![1816034-20240508092730255-166951](http://tc.sql2022.cn/tc/thinkbook/1816034-20240508092730255-166951.jpg)

依次为:disk -> partition -> PV -> VG -> LV -> fs,也即磁盘->分区->物理卷->卷组->逻辑卷->文件系统。

### 2.1 LVM的主要组成部分

1. **物理卷(Physical Volume,PV)**: 物理卷是LVM的基本构建单元,可以是一个物理硬盘或其上的分区,也可以是软件RAID设备或任何其他形式的块设备。物理卷被划分为若干个物理区域(Physical Extents,PEs),这是LVM内部的最小存储单元。

2. **卷组(Volume Group,VG)**: 卷组是由一个或多个物理卷组成的集合,相当于一个大的存储池。在卷组中,物理区域(PEs)被统一管理和分配。卷组为逻辑卷提供了存储空间。

3. **逻辑卷(Logical Volume,LV)**: 逻辑卷是从卷组中分配出来的存储空间,它看起来就像一个普通的硬盘分区,可以被格式化为各种文件系统并挂载使用。逻辑卷的大小可以动态调整,而不必关心底层物理磁盘的限制。

### 2.2 pv,vg ,lv的关系

一个物理硬盘可以组成一个物理分区,一个物理硬盘也可以组成多个物理分区(一般最多四个)。一个物理分区为一个物理卷(pv)。

1个至多个物理卷可以组成一个卷组(vg),一个卷组又可以分成多个逻辑卷。

- **PV与VG的关系**:一个或多个物理卷可以组成一个卷组。在创建卷组时,需要指定包含哪些物理卷。卷组中的物理卷可以来自不同的物理磁盘,也可以来自同一个物理磁盘的不同分区。

- **VG与LV的关系**:一个卷组可以划分出多个逻辑卷。逻辑卷的大小和数量取决于卷组的总容量和实际需求。在卷组上创建逻辑卷时,可以指定逻辑卷的大小和名称等属性。

- **整体关系**:PV(物理卷)-> VG(卷组)-> LV(逻辑卷)。这种层次结构使得Linux系统能够灵活地管理存储资源,实现数据的动态分配和扩展。

物理卷,卷组,逻辑卷的关系图如下所示

![lvm](http://tc.sql2022.cn/tc/thinkbook/1768648-20230710112259181-1715498829.png)

### 2.3 LVM设计的目的

这种分层的架构允许用户更灵活地管理存储空间,例如动态调整逻辑卷的大小、在卷组之间移动物理卷,或者在一个卷组中创建多个逻辑卷来满足不同的应用需求。

当给逻辑卷分配的空间较大时,我们可以动态减小逻辑卷的大小。当给逻辑卷分配的空间较小时,我们可以动态扩大逻辑卷的大小。

同事还可以给卷组扩容。

## 3. LVM实操讲解

本次我使用的Linux主机位vm下的虚拟机,openeuler for BClinux 21.10

在操作前我们首先查看系统的磁盘分区情况

```shell

lsblk

```

可以看到系统共有两个磁盘。第一个磁盘创建成物理分区sda1,sda2。sda1和sda2分别各自成为一个物理卷。sda2下有三个逻辑卷,分别挂载在不同的目录下。

![image-20240709202440079](http://tc.sql2022.cn/tc/thinkbook/image-20240709202440079.png)

下面我们给虚拟机新增一个10G的磁盘,一个20G的磁盘和一个30G的磁盘(具体步骤此处不做讨论)来模拟物理机插入磁盘操作。

可以参考文章:[VMware虚拟机添加磁盘](https://blog.csdn.net/moxiong3212/article/details/137242957)

查看磁盘目录

```shell

lsblk

```

![image-20240709204242899](http://tc.sql2022.cn/tc/thinkbook/image-20240709204242899.png)

可以看到已经有多余的三个磁盘。

LVM操作的基本命令如下

![image-20240709204709176](http://tc.sql2022.cn/tc/thinkbook/image-20240709204709176.png)

### 3.1 创建物理分区

在sdb,sdc,sdd三个磁盘分别创建三个物理分区(使用fdisk),物理分区类型都为lvm

```shell

# 此处为使用fdisk工具在sdb创建了一个10G大小的物理分区sdb1,其余物理分区创建过程类似

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

欢迎使用 fdisk (util-linux 2.35.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。

使用写入命令前请三思。

设备不包含可识别的分区表。

创建了一个磁盘标识符为 0x511b7112 的新 DOS 磁盘标签。

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

分区类型

p 主分区 (0 primary, 0 extended, 4 free)

e 扩展分区 (逻辑分区容器)

选择 (默认 p):p

分区号 (1-4, 默认 1):

第一个扇区 (2048-41943039, 默认 2048):

最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +10G

创建了一个新分区 1,类型为“Linux”,大小为 10 GiB。

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

已选择分区 1

Hex code or alias (type L to list all): 8e

已将分区“Linux”的类型更改为“Linux LVM”。

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

分区表已调整。

将调用 ioctl() 来重新读分区表。

正在同步磁盘。

```

此处为使用fdisk工具在sdb创建了一个10G大小的物理分区sdb1,其余物理分区创建过程类似

![image-20240709205012305](http://tc.sql2022.cn/tc/thinkbook/image-20240709205012305.png)

按要求创建完分区后磁盘物理分区情况如下图所示

![image-20240709205404412](http://tc.sql2022.cn/tc/thinkbook/image-20240709205404412.png)

### 3.2 创建物理卷

创建物理卷使用的命令为pvcreate

```

pvcreate [选项] 设备文件

-f: 强制创建物理卷,不需要用户确认。

-y: 自动回答“yes”以确认物理卷的创建。

-u UUID: 指定设备的UUID。

-Z: 指定是否使用前4个扇区。

```

下面我们使用`pvcreate`将上述创建的9个物理分区设置为初始化物理卷

```shell

pvcreate /dev/sdb1

```

部分物理卷信息如下

![image-20240709212436212](http://tc.sql2022.cn/tc/thinkbook/image-20240709212436212.png)

### 3.3 创建卷组

卷组是由一个或多个物理卷(PV)组成的集合。物理卷可以是硬盘上的分区、整个硬盘、软件RAID设备或其他任何形式的块设备。卷组的作用是将这些物理卷的存储空间汇集在一起,形成一个更大的、逻辑上连续的存储池,供逻辑卷使用。

使用vgcreate来创建卷组

```

vgcreate 命令用于创建一个新的卷组(Volume Group)。

vgcreate VG_new PV ...

[ -A | --autobackup y | n ] # 是否自动备份元数据

[ -c | --clustered y | n ] # 是否集群化卷组

[ -l | --maxlogicalvolumes 数量 ] # 设置最大逻辑卷数目

[ -p | --maxphysicalvolumes 数量 ] # 设置最大物理卷数目

[ -M | --metadatatype lvm2 ] # 指定元数据类型

[ -s | --physicalextentsize 大小[m|UNIT] ] # 设置物理区块大小

[ -f | --force ] # 强制创建,忽略警告

[ -Z | --zero y | n ] # 是否清零物理卷的开始部分

[ --addtag 标签 ] # 添加标签

[ --alloc contiguous | cling | cling_by_tags | normal | anywhere | inherit ] # 分配策略

[ --metadataprofile 字符串 ] # 元数据配置文件

[ --labelsector 数字 ] # 标签扇区

[ --metadatasize 大小[m|UNIT] ] # 元数据大小

[ --pvmetadatacopies 0 | 1 | 2 ] # 物理卷元数据拷贝数

[ --vgmetadatacopies all | unmanaged | 数字 ] # 卷组元数据拷贝策略

[ --reportformat basic | json ] # 报告格式

[ --dataalignment 大小[k|UNIT] ] # 数据对齐

[ --dataalignmentoffset 大小[k|UNIT] ] # 数据对齐偏移

[ --shared ] # 共享卷组

[ --systemid 字符串 ] # 系统ID

[ --locktype sanlock | dlm | none ] # 锁类型

[ COMMON_OPTIONS ] # 公共选项

LVM的公共选项:

[ -d | --debug ] # 开启调试模式

[ -h | --help ] # 显示帮助信息

[ -q | --quiet ] # 静默模式

[ -v | --verbose ] # 详细模式

[ -y | --yes ] # 自动回答“yes”

[ -t | --test ] # 测试模式,不执行命令

[ --commandprofile 字符串 ] # 命令配置文件

[ --config 字符串 ] # 配置字符串

[ --driverloaded y | n ] # 驱动是否加载

[ --nolocking ] # 不使用锁

[ --lockopt 字符串 ] # 锁选项

[ --longhelp ] # 显示长帮助信息

[ --profile 字符串 ] # 配置文件

[ --version ] # 显示版本信息

```

```shell

# 为了更全面的展示卷组的功能,我们将sdb1,sdc1,sdd1三个物理卷组成一个卷组,命名为xianggu

vgcreate xianggu /dev/sdb1 /dev/sdc1 /dev/sdd1

```

![image-20240709212409053](http://tc.sql2022.cn/tc/thinkbook/image-20240709212409053.png)

![image-20240709212514459](http://tc.sql2022.cn/tc/thinkbook/image-20240709212514459.png)

```shell

# 将sdb2和sdb3组成逻辑卷chao

vgcreate chao /dev/sdb2 /dev/sdb3

```

![image-20240709212715601](http://tc.sql2022.cn/tc/thinkbook/image-20240709212715601.png)

```shell

# 将sdc2 创建成一个卷组shu

vgcreate shu /dev/sdc2

```

![image-20240709212904300](http://tc.sql2022.cn/tc/thinkbook/image-20240709212904300.png)

### 3.4 创建逻辑卷

逻辑卷是在卷组(Volume Group,VG)之上创建的,用于存储数据的逻辑单元。它提供了比传统分区更灵活的存储管理方式,允许动态调整大小而不影响上层的文件系统或应用程序。

使用`lvcreate`命令可以创建逻辑卷。

```shell

lvcreate [选项] 卷组

-L 或 --size:指定逻辑卷的大小,可以使用单位如G(Gibibyte)、M(Mebibyte)等。

-n 或 --name:指定逻辑卷的名称。

-l 或 --extents:基于物理区域(PE)的数量来指定逻辑卷的大小。

-i 或 --mirrors:指定逻辑卷的镜像数量,用于创建镜像逻辑卷。

-m 或 --mirrorlog:指定镜像日志的存储位置。

-I 或 --stripes:指定逻辑卷的条带数。

-S 或 --stripesize:指定逻辑卷的条带大小。

-r 或 --regionsize:指定物理区域(PE)的大小。

-R 或 --redundancy:设置镜像的冗余策略。

-s 或 --snapshot:创建快照逻辑卷。

-V 或 --virtualsize:设置快照的虚拟大小。

-W 或 --writeable:创建写入式快照。

-P 或 --poolmetadatasize:设置存储池的元数据大小。

-K 或 --thinpool:创建精简存储池。

-T 或 --thin:在精简存储池中创建精简逻辑卷。

```

在创建逻辑卷之前,我们看一下各个卷组的大小

```shell

vgdisplay

#########################################################

[root@localhost ~]# vgdisplay

--- Volume group ---

VG Name shu

System ID

Format lvm2

Metadata Areas 1

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 1

Act PV 1

VG Size <15.00 GiB

PE Size 4.00 MiB

Total PE 3839

Alloc PE / Size 0 / 0

Free PE / Size 3839 / <15.00 GiB

VG UUID x4dnET-dQQv-TAKr-lpEw-3Ej1-IvNB-Z4Idty

--- Volume group ---

VG Name chao

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 9.99 GiB

PE Size 4.00 MiB

Total PE 2558

Alloc PE / Size 0 / 0

Free PE / Size 2558 / 9.99 GiB

VG UUID sQfM7y-rtE9-B0kz-1YcA-3bSu-Vbdm-iFi2vT

--- Volume group ---

VG Name xianggu

System ID

Format lvm2

Metadata Areas 3

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 3

Act PV 3

VG Size <21.99 GiB

PE Size 4.00 MiB

Total PE 5629

Alloc PE / Size 0 / 0

Free PE / Size 5629 / <21.99 GiB

VG UUID 44PuR0-JQK2-eOIV-p3zO-5Vvm-XgWZ-OlLZwx

```

其中最大的卷为`xianggu`卷组,空间略小于22G

我们使用xianggu卷组创建一个10G的逻辑卷,逻辑卷名称为logical,并将其设置为ext4类型

```

lvcreate -L 10G -n logical xianggu

mkfs.ext4 /dev/xianggu

```

![image-20240709213742735](http://tc.sql2022.cn/tc/thinkbook/image-20240709213742735.png)

使用lsblk查看挂载情况

```lsblk

lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 0 200G 0 disk

├─sda1 8:1 0 1G 0 part /boot

└─sda2 8:2 0 199G 0 part

├─bigcloud--enterprise--linux--for--euler-root 253:0 0 70G 0 lvm /

├─bigcloud--enterprise--linux--for--euler-swap 253:1 0 7.9G 0 lvm [SWAP]

└─bigcloud--enterprise--linux--for--euler-home 253:2 0 121.1G 0 lvm /home

sdb 8:16 0 20G 0 disk

├─sdb1 8:17 0 10G 0 part

│ └─xianggu-logical 253:3 0 21G 0 lvm

├─sdb2 8:18 0 5G 0 part

└─sdb3 8:19 0 5G 0 part

sdc 8:32 0 30G 0 disk

├─sdc1 8:33 0 10G 0 part

│ └─xianggu-logical 253:3 0 21G 0 lvm

├─sdc2 8:34 0 15G 0 part

└─sdc3 8:35 0 5G 0 part

sdd 8:48 0 10G 0 disk

├─sdd1 8:49 0 2G 0 part

│ └─xianggu-logical 253:3 0 21G 0 lvm

├─sdd2 8:50 0 3G 0 part

└─sdd3 8:51 0 5G 0 part

sr0 11:0 1 5.2G 0 rom

```

查看逻辑卷

```shell

lvdisplay

[root@localhost ~]# lvs

[root@localhost ~]# lvs

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

home bigcloud-enterprise-linux-for-euler -wi-ao---- <121.11g

root bigcloud-enterprise-linux-for-euler -wi-ao---- 70.00g

swap bigcloud-enterprise-linux-for-euler -wi-ao---- <7.89g

logical xianggu -wi------- 10.00g

```

### 3.5 挂载逻辑卷

在上面的操作,我们创建了逻辑卷logical,现在我们挂载逻辑卷。

```shell

# 创建挂载路径

mkdir /soft

# 使用mount挂载,重启后会失效

mount /dev/xianggu/logical /soft

[root@localhost /]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 0 200G 0 disk

├─sda1 8:1 0 1G 0 part /boot

└─sda2 8:2 0 199G 0 part

├─bigcloud--enterprise--linux--for--euler-root 253:0 0 70G 0 lvm /

├─bigcloud--enterprise--linux--for--euler-swap 253:1 0 7.9G 0 lvm [SWAP]

└─bigcloud--enterprise--linux--for--euler-home 253:2 0 121.1G 0 lvm /home

sdb 8:16 0 20G 0 disk

├─sdb1 8:17 0 10G 0 part

│ └─xianggu-logical 253:3 0 10G 0 lvm /soft

├─sdb2 8:18 0 5G 0 part

└─sdb3 8:19 0 5G 0 part

sdc 8:32 0 30G 0 disk

├─sdc1 8:33 0 10G 0 part

│ └─xianggu-logical 253:3 0 10G 0 lvm /soft

├─sdc2 8:34 0 15G 0 part

└─sdc3 8:35 0 5G 0 part

sdd 8:48 0 10G 0 disk

├─sdd1 8:49 0 2G 0 part

├─sdd2 8:50 0 3G 0 part

└─sdd3 8:51 0 5G 0 part

sr0 11:0 1 5.2G 0 rom

## 修改/etc/fstab 永久挂载

vi /etc/fstab

# 在最后一行添加

/dev/xianggu/logical /soft ext4 defaults 0 0

```

### 3.5 卷组扩容与缩容

> 物理卷(Physical Volume, PV)本身不能直接动态扩容,因为物理卷是基于底层存储设备(如硬盘分区或裸设备)的固定部分。

给卷组扩容的方法就是将新的物理卷pv添加到卷组。给卷组缩容的方法就是将物理卷pv从卷组中拿出。

扩容使用的命令是`vgextend`

用法如下

```shell

vgextend 卷组 物理卷

```

```shell

# 查看系统中的卷组有哪些

vgdisplay

[root@localhost /]# vgs

[root@localhost /]# vgs

WARNING: Couldn't find device with uuid afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw.

WARNING: VG xianggu is missing PV afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw (last written to [unknown]).

VG #PV #LV #SN Attr VSize VFree

bigcloud-enterprise-linux-for-euler 1 3 0 wz--n- <199.00g 0

chao 2 0 0 wz--n- 9.99g 9.99g

shu 1 0 0 wz--n- <15.00g <15.00g

xianggu 5 1 0 wz-pn- 31.98g 21.98g

```

看到香菇卷的大小为约12G

```shell

vgdisplay xianggu

--- Volume group ---

VG Name xianggu

System ID

Format lvm2

Metadata Areas 3

Metadata Sequence No 8

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 1

Max PV 0

Cur PV 3

Act PV 3

VG Size <21.99 GiB

PE Size 4.00 MiB

Total PE 5629

Alloc PE / Size 2560 / 10.00 GiB

Free PE / Size 3069 / <11.99 GiB

VG UUID 44PuR0-JQK2-eOIV-p3zO-5Vvm-XgWZ-OlLZwx

```

现在我们将xianggu卷组中加入sdd3,可以看到卷组容量为约27G,卷组成功扩容

```shell

[root@localhost /]# vgextend xianggu /dev/sdd3

Volume group "xianggu" successfully extended

[root@localhost /]# vgdisplay xianggu

--- Volume group ---

VG Name xianggu

System ID

Format lvm2

Metadata Areas 4

Metadata Sequence No 9

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 1

Max PV 0

Cur PV 4

Act PV 4

VG Size 26.98 GiB

PE Size 4.00 MiB

Total PE 6908

Alloc PE / Size 2560 / 10.00 GiB

Free PE / Size 4348 / 16.98 GiB

VG UUID 44PuR0-JQK2-eOIV-p3zO-5Vvm-XgWZ-OlLZwx

```

下面我们对卷组进行缩容,xianggu卷组是由sdb1,sdc1,sdd1,sdd3组成的

> 缩减逻辑卷是一项风险较高的操作,可能导致数据丢失。

```shell

# 查看各个物理卷pv的状态

pvscan xianggu

[root@localhost /]# pvscan

PV /dev/sdc2 VG shu lvm2 [<15.00 GiB / <15.00 GiB free]

PV /dev/sdb2 VG chao lvm2 [<5.00 GiB / <5.00 GiB free]

PV /dev/sdb3 VG chao lvm2 [<5.00 GiB / <5.00 GiB free]

WARNING: Couldn't find device with uuid afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw.

WARNING: VG xianggu is missing PV afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw (last written to [unknown]).

PV /dev/sdb1 VG xianggu lvm2 [<10.00 GiB / 0 free]

PV /dev/sdc1 VG xianggu lvm2 [<10.00 GiB / 9.99 GiB free]

PV /dev/sdd1 VG xianggu lvm2 [<2.00 GiB / <2.00 GiB free]

PV [unknown] VG xianggu lvm2 [<5.00 GiB / <5.00 GiB free]

PV /dev/sdd3 VG xianggu lvm2 [<5.00 GiB / <5.00 GiB free]

PV /dev/sda2 VG bigcloud-enterprise-linux-for-euler lvm2 [<199.00 GiB / 0 free]

PV /dev/sdc3 lvm2 [<5.00 GiB]

PV /dev/sdd2 lvm2 [3.00 GiB]

Total: 11 [263.96 GiB] / in use: 9 [255.96 GiB] / in no VG: 2 [<8.00 GiB]

```

下面我们要在xianggu卷组中删除sdc1

> 如果发现物理卷上有逻辑卷,这将导致数据丢失,务必先备份

使用的命令是`vgreduce`,用法如下

```shell

greduce <卷组名称> <物理卷名称>

```

```bash

#在xianggu卷组中删除sdc1

# 如果 /dev/sdc1 上还有逻辑卷,并且这些逻辑卷没有被正确处理(如删除或迁移)

vgreduce xianggu /dev/sdc1

```

### 3.6 逻辑卷扩容与缩容

逻辑卷扩容与缩容允许用户在不丢失数据的情况下动态地调整逻辑卷的大小

> 缩减逻辑卷是一项风险较高的操作,可能导致数据丢失。

逻辑卷扩容使用的命令为`lvextend`,缩容使用的是`lvreduce`

语法如下

```shell

# 扩容或者创建lv逻辑卷

lvextend -L [+]大小 /dev/卷组名/逻辑卷名

# 缩容lv逻辑卷

lvreduce -L [-]大小 /dev/卷组名/逻辑卷名

```

下面进行实际操作

```bash

# 给logical逻辑卷进行扩容2G

# 首先要保证logical所在的2卷组容量足够

# 查看xianggu卷组剩余容量

[root@localhost ~]# vgdisplay xianggu

WARNING: Couldn't find device with uuid afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw.

WARNING: VG xianggu is missing PV afbT6Z-5uF9-sfiF-3Gf6-Vy34-fxW1-AHTrCw (last written to [unknown]).

--- Volume group ---

VG Name xianggu

System ID

Format lvm2

Metadata Areas 4

Metadata Sequence No 10

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 0

Max PV 0

Cur PV 5

Act PV 4

VG Size 31.98 GiB

PE Size 4.00 MiB

Total PE 8187

Alloc PE / Size 2560 / 10.00 GiB

Free PE / Size 5627 / 21.98 GiB

VG UUID 44PuR0-JQK2-eOIV-p3zO-5Vvm-XgWZ-OlLZwx

# 剩余12G,进行扩容

[root@localhost /]# lvextend +L +2G /dev/xianggu/logical

# 使用文件系统工具来扩展文件系统。

[root@localhost /] # resize2fs /dev/xianggu/logical

```

```bash

# 给logical逻辑卷进行缩容1G

# 在进行缩容之前,必须先卸载逻辑卷上的文件系统。

[root@localhost /]# umount /dev/xianggu/logical /soft

[root@localhost /]# lvextend +l 1G /dev/xianggu/logical

#重新逻辑卷上的文件系统。

[root@localhost /]# mount /dev/xianggu/logical /soft

```

- 对于`ext2`、`ext3`、`ext4`文件系统,你可以使用`resize2fs`命令:

```bash

bash复制代码

resize2fs /dev/myvg/mylv

```

注意:在大多数情况下,`resize2fs`会自动检测并扩展文件系统到逻辑卷的新大小,但最好先检查其手册页以确认。

- 对于`xfs`文件系统,`xfs_growfs`命令用于扩展文件系统:

```bash

bash复制代码

xfs_growfs /mount_point

```

其中`/mount_point`是逻辑卷挂载的点。

上述扩容和缩容也可以直接来指定逻辑卷容量大小

```shell

# 或者直接设置新大小

lvextend -L <new_size>G /dev/myvg/mylv

# 若是扩容,需要指定扩容的文件类型。若是缩容,需要先卸载文件路径,缩容后再挂载

```

## 6. 答疑

### 6.1 为什么创建物理卷后的容量小于物理分区的容量

当物理分区被初始化为物理卷时,其容量会基于PE的大小进行划分。如果物理分区的总容量不能被PE大小整除,那么最后一部分空间可能会被浪费或保留为未分配空间,从而导致物理卷的容量小于物理分区的原始容量。

LVM可能会为物理卷预留一定的空间用于管理目的,如快照、镜像、恢复点等。这些预留空间会减少可用于实际数据存储的容量。

### 6.2为什么创建逻辑卷后的总容量小于物理卷容量之和

卷组(Volume Group, VG)是由一个或多个物理卷(Physical Volume, PV)组成的集合。VG的容量是所有PV容量的总和,但并非所有这些容量都会直接分配给逻辑卷。

LVM可能会为VG或LV预留一定的空间用于管理目的,如快照、镜像等。这些预留空间会减少可用于逻辑卷的实际容量。

## 7. 参考资料

1. [linux磁盘分区](https://baike.baidu.com/item/linux%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA/5203467?fr=ge_ala)

2. [Linux LVM的基本使用 ](https://www.cnblogs.com/rainbow-tan/p/17540457.html)

3. [Linux系统磁盘(硬盘)逻辑卷分区和介绍 ](https://www.cnblogs.com/-bobo/articles/18178961)

4. [VMware虚拟机添加磁盘](https://blog.csdn.net/moxiong3212/article/details/137242957)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档