百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

Linux 中的逻辑卷 LVM 管理完整初学者指南

qiyuwang 2025-05-14 15:57 1 浏览 0 评论

这是 Linux 中 LVM(逻辑卷管理)的完整初学者指南。

在本教程中,您将了解 LVM 的概念、它的组件以及为什么要使用它。

我不会仅限于理论上的解释,我还将展示在 Linux 中创建和管理 LVM 的动手示例。

简而言之,我将为您提供在现实世界中开始使用 LVM 所需的所有必要信息。

Linux 中的 LVM 是什么?

LVM 代表逻辑卷管理。这是管理存储系统的另一种方法,而不是传统的基于分区的方法。在 LVM 中,您无需创建分区,而是创建逻辑卷,然后您可以像挂载磁盘分区一样轻松地将这些卷挂载到文件系统中。

LVM 的组件

LVM 包含三个主要组件:

  • 物理卷
  • 卷组
  • 逻辑卷

尽管该列表由三个部分组成,但其中只有两个是分区系统的直接对应部分,下表记录了这一点。

磁盘分区系统       LVM
  分区           逻辑卷
  磁盘            卷组

物理卷没有任何直接对应物,但我很快就会谈到这一点。

为什么要使用 LVM?

LVM 的主要优点是调整卷或卷组的大小非常容易。它抽象出了所有丑陋的部分(分区、原始磁盘),并为我们留下了一个中央存储池可供使用。

如果您曾经经历过分区大小调整的恐惧,那么您会想要使用 LVM。

动手实验室准备

这篇文章不仅仅是理论。在此过程中,我将展示实际的命令示例,学习某些东西的最佳方法是亲身实践。为此,我建议您使用虚拟机。

为了帮助你,我已经准备了一个简单的 Vagrantfile,你可以用它来用 VirtualBox 启动一个非常轻量级的虚拟机。此虚拟机具有三个额外的磁盘,您和我可以将它们用于下面的命令示例。

在文件系统的某处创建一个目录,并将以下内容保存在该文件中,名为Vagrantfile.

Vagrant.configure "2" do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.hostname = "lvm"
    3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
    config.vm.provider :virtualbox do |machine|
        machine.memory = 1024
        machine.cpus = 1
        machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
    end
end

# vi: set ft=ruby

或者,如果您愿意,可以使用wget或curl从我的 gist 下载文件。

wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile

确保你安装了Vagrant和VirtualBox。

一旦 Vagrantfile 就位,将环境变量设置VAGRANT_EXPERIMENTAL为disks.

export VAGRANT_EXPERIMENTAL=disks

最后,使用以下命令启动虚拟机(确保您与 Vagrantfile 位于同一目录中):

vagrant up

机器运行后,您可以使用vagrant sshSSH 连接到它并运行本文中的示例命令。

完成后请记住vagrant destroy从与 Vagrantfile 相同的目录运行。

安装 LVM

在您可以使用任何命令之前,您需要安装该lvm2软件包。这应该预装在大多数现代发行版中,尤其是基于 Ubuntu 的发行版中。但是,在继续之前,我不得不提到这一点。要安装lvm2,请查阅您的发行版的文档。

LVM 实践

对于这个动手演练,我构建了一个具有 40G 根存储(不重要)和三个大小为 5G 的外部磁盘的虚拟机。这些磁盘的大小是任意的。

vagrant@lvm:~$ lsblk -o name,size,fstype
NAME    SIZE FSTYPE
loop0  55.5M squashfs
loop1  32.3M squashfs
loop2  70.4M squashfs
sda      40G 
└─sda1   40G ext4
sdb      10M iso9660
sdc       5G 
sdd       5G 
sde       5G

如您所见,我将使用的设备sdc是sdd和sde。

还记得我告诉过你 LVM 包含三个主要组件吗?

  • 物理卷
  • 卷组
  • 逻辑卷

是时候一一见他们了。

1. 物理卷

关于 LVM,您首先需要了解的是物理卷。物理卷是用于实现抽象即逻辑卷的原材料或构建块。简单来说,物理卷是 LVM 系统的逻辑单元。

物理卷可以是任何东西,原始磁盘或磁盘分区。创建和初始化物理卷是一回事。两者都意味着您只是在为进一步的操作准备构建块(即分区、磁盘)。这将在瞬间变得更加清晰。

实用程序:pv所有管理物理卷的实用程序都以P hysical Volume的字母开头。例如pvcreate, pvchange,pvs等pvdisplay。

此框之后提到的任何内容都是破坏性的,除非您使用的是虚拟环境或云上的服务器,其中没有存储重要数据或无法意外访问,我建议您立即停止。

创建物理卷

您可以使用原始未分区磁盘或分区本身来创建物理卷。

正如我之前提到的,我的虚拟机连接了三个外部驱动器,让我们从/dev/sdc.

我们使用pvcreate命令来创建物理卷。只需将设备名称传递给它即可。

sudo pvcreate /dev/sdc

你应该看到这样的东西:-

vagrant@lvm:~$ sudo pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.

接下来我将/dev/sdd分成相等的部分。使用任何工具cfdisk,,,等parted,fdisk有很多工具可以完成这项工作。

vagrant@lvm:~$ lsblk -o name,size,fstype | grep sdd
sdd       5G 
├─sdd1  2.5G 
└─sdd2  2.5G

您现在可以在一个步骤中从这两个分区中快速创建另外两个物理卷,同时将这两个设备传递给pvcreate。

sudo pvcreate /dev/sdd1 /dev/sdd2

看一看:-

vagrant@lvm:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
  Physical volume "/dev/sdd1" successfully created.
  Physical volume "/dev/sdd2" successfully created.

列出可用的物理卷

您可以使用三个命令来获取可用物理卷的列表pvscan,pvs和pvdisplay。您通常不需要向这些命令传递任何内容。

pvscan:-

vagrant@lvm:~$ sudo pvscan
  PV /dev/sdc                       lvm2 [5.00 GiB]
  PV /dev/sdd1                      lvm2 [2.50 GiB]
  PV /dev/sdd2                      lvm2 [<2.50 GiB]
  Total: 3 [<10.00 GiB] / in use: 0 [0   ] / in no VG: 3 [<10.00 GiB]

pvs:-

vagrant@lvm:~$ sudo pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdc      lvm2 ---   5.00g  5.00g
  /dev/sdd1     lvm2 ---   2.50g  2.50g
  /dev/sdd2     lvm2 ---  <2.50g <2.50g

pvdisplay:-

vagrant@lvm:~$ sudo pvdisplay
  "/dev/sdc" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
   
  "/dev/sdd1" is a new physical volume of "2.50 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               2.50 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
   
  "/dev/sdd2" is a new physical volume of "<2.50 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd2
  VG Name               
  PV Size               <2.50 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB

正如您所看到的,除了列出物理卷之外,这些命令还为您提供了大量有关这些卷的其他信息。

删除物理卷

pvremove您可以使用该命令删除物理卷。就像pvcreate,只需将设备(初始化为物理卷)传递给pvremove命令。

为了演示,我将从/dev/sdd2列表中删除。

sudo pvremove /dev/sdd2

输出应与此相同:-

vagrant@lvm:~$ sudo pvremove /dev/sdd2
  Labels on physical volume "/dev/sdd2" successfully wiped.

现在列出物理卷sudo pvs

vagrant@lvm:~$ sudo pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdc      lvm2 ---  5.00g 5.00g
  /dev/sdd1     lvm2 ---  2.50g 2.50g

/dev/sdd2不再在这里。

2. 卷组

卷组是物理卷的集合。它是 LVM 中的下一个抽象级别。卷组是结合了多个原始存储设备的存储容量的存储池。

实用程序:所有卷组实用程序名称都以 开头vg,代表卷组,例如、等。vgcreatevgsvgrename

创建卷组

卷组是使用该vgcreate命令创建的。的第一个参数vgcreate是您要为该卷组指定的名称,其余的是要支持存储池的物理卷的列表。

sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1

例子:-

vagrant@lvm:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
  Volume group "lvm_tutorial" successfully created

列出卷组

列出卷组类似于列出物理卷,您可以使用具有不同详细级别的不同命令vgdisplay、vgscan和vgs。

我个人更喜欢vgs命令,sudo vgs

vagrant@lvm:~$ sudo vgs
  VG           #PV #LV #SN Attr   VSize VFree
  lvm_tutorial   2   0   0 wz--n- 7.49g 7.49g
vgscan:-

vagrant@lvm:~$ sudo vgscan
  Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay:-

vagrant@lvm:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               lvm_tutorial
  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               7.49 GiB
  PE Size               4.00 MiB
  Total PE              1918
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1918 / 7.49 GiB
  VG UUID               LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1

列出附加到卷组的物理卷

您可以使用以下命令列出连接到特定卷组的所有物理卷:-

sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name

例子:-

vagrant@lvm:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
  PV        
  /dev/sdc  
  /dev/sdd1

您还可以获得物理卷的计数。

sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count

例子:-

vagrant@lvm:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
  #PV
    3

扩展卷组

扩展卷组意味着向卷组添加额外的物理卷。为此,vgextend使用该命令。语法很简单:-

vgextend <volume_group> <physical_volume1> <physical_volume2> ....

让我们将lvm_tutorial音量扩大/dev/sdd2.

sudo vgextend lvm_tutorial /dev/sdd2

专注于输出:-

vagrant@lvm:~$ sudo vgextend lvm_tutorial /dev/sdd2
  Physical volume "/dev/sdd2" successfully created.
  Volume group "lvm_tutorial" successfully extended

在物理卷部分,我们最终将其/dev/sdd2作为物理卷删除,但必须将分区或原始磁盘初始化为物理卷,否则 LVM 将无法将其作为卷组的一部分进行管理。所以在将它添加到卷组之前vgextend做好准备。/dev/sdd2

现在列出附加到此卷组的物理卷,以确保安全。

sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name

输出:-

vagrant@lvm:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
  PV        
  /dev/sdc  
  /dev/sdd1 
  /dev/sdd2

/dev/sdd2现在按预期在列表中。

减少卷组

就像扩展一个卷组意味着添加另一个物理卷一样,减少它意味着删除一个或多个物理卷。

我们使用vgreduce命令来执行此操作。一般语法如下:-

vgreduce <vgname> <physical_volume1> <physical_volume2> ....

让我们删除物理卷/dev/sdc和/dev/sdd1.

sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1

例子:-

vagrant@lvm:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
  Removed "/dev/sdc" from volume group "lvm_tutorial"
  Removed "/dev/sdd1" from volume group "lvm_tutorial"

如果卷组有任何活动的逻辑卷,您将无法像这样减少它。

再次列出物理卷。

sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name

输出:-

vagrant@lvm:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
  PV        
  /dev/sdd2

那两个物理卷不见了。

现在,为了本文的其余部分,将这两个物理卷添加回来。

sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1

删除卷组

vgremove您可以使用该命令删除逻辑卷。

sudo vgremove lvm_tutorial

现在不要运行此命令,否则您必须重新创建卷组。如果您想对其进行测试,请在本文的最后运行它。

3. 逻辑卷

这是您将主要使用的内容。逻辑卷就像一个分区,但它不是位于原始磁盘之上,而是位于卷组之上。你可以,

  • 使用您想要的任何文件系统格式化逻辑卷。
  • 将其挂载到您想要的文件系统中的任何位置。

在本节中,您将学习,

  • 如何创建逻辑卷。
  • 对逻辑卷的常用操作。
  • 调整逻辑卷的大小。
  • 删除逻辑卷。

实用程序:所有卷组实用程序名称都以 开头lv,代表逻辑卷。例如, ,等等, ,等等lvcreatelvslvreducevgcreatevgsvgrename

创建逻辑卷

lvcreate使用该命令创建逻辑卷。常用的语法如下所示,

sudo lvcreate -L <size> -n <lvname> <vgname>
  • -L选项用于新逻辑卷的大小,您可以使用任何以“GB”、“MB”或“KB”结尾的整数。例如“1GB”。
  • -n选项用于命名此逻辑卷。
  • 需要将这个逻辑卷所属的卷组的名称传递给它,因此,在为逻辑卷提供大小时,请确保卷组有可用空间。

在虚拟机上运行以下命令:

sudo lvcreate -L 5GB -n lv1 lvm_tutorial

示例输出:

vagrant@lvm:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
  Logical volume "lv1" created.

对逻辑卷的常用操作

正如我之前所说,您可以将文件系统放在逻辑卷上,也可以将其挂载到文件系统的任何位置。

/dev/<vgname>/<lvname>创建后,您可以在路径中找到逻辑卷。例如,在我们的例子中,音量将在/dev/lvm_tutorial/lv1.

vagrant@lvm:~$ ls -l /dev/lvm_tutorial/lv1 
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0

现在您可以像使用任何分区一样使用它。用ext4格式化,

sudo mkfs.ext4 /dev/lvm_tutorial/lv1

将它安装在当前目录结构中的某个位置,例如/mnt,

sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt

调整逻辑卷的大小

您可以使用命令扩展逻辑卷lvextend并使用命令减小其大小lvreduce。或者,您可以使用单个命令lvresize来完成这两项任务。

首先让我们看看卷组中是否还有剩余空间。

sudo vgs -S vgname=lvm_tutorial -o vg_free

输出:-

vagrant@lvm:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
  VFree 
  <4.99g

根据输出,我还有一些空间,所以让我们将卷大小增加 2GB。

请记住,逻辑卷仍安装在/mnt.

vagrant@lvm:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime)

使用以下命令调整卷大小:

sudo lvresize -L +2GB lvm_tutorial/lv1

一般语法是这样的:

lvresize -L [+|-][Size] <vgname>/<lvname>

后面的符号 + 或 --L取决于您是尝试增加音量还是分别减小音量。

卷大小增加后,文件系统也必须调整大小。对于 ext4,要使用的命令是resize2fs.

sudo resize2fs /dev/lvm_tutorial/lv1

输出:

vagrant@lvm:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long.

并非所有文件系统都支持热调整大小,Ext4 和 XFS 是受支持的文件系统之一。我建议你坚持这些。

减少逻辑卷是一项稍微复杂的任务,我不会在本文中讨论这个问题。我将把这个卷的大小减少 1GB。

删除逻辑卷

lvremove您可以使用该命令删除逻辑卷。命令语法如下:-

lvremove <vgname>/<lvname>

在虚拟机上运行此命令:-

sudo lvremove lvm_tutorial/lv1

输出:-

vagrant@lvm:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
  Logical volume "lv1" successfully removed

在逻辑卷、物理卷和卷组上还有许多其他操作可行,但不可能将所有这些都写到一篇文章中。

我/dev/sde在虚拟机中为您多留了一个磁盘,使用它,练习本文中的一些命令,创建一个新的卷组,扩展一个现有的卷组,只是练习。

我希望这篇文章对你有所帮助,如果你想在以后看到更多关于这方面的内容,请在下面的评论部分告诉我。

相关推荐

屏幕属性详解:DCI-P3、对比度、色域、Nit

屏幕属性详解:DCI-P3、对比度、色域、Nit---一、DCI-P3(色域标准)1.定义DCI-P3是由美国电影工业制定的广色域标准,覆盖CIE1931色彩空间的约96%,尤其强化红色和绿...

千元级小钢炮,畅爽游戏兼顾生产力,华硕VG249Q1A

#头条创作挑战赛#hello小伙伴们大家好,这里是你们热衷于桌搭的小伙伴晋升奶爸的垃圾佬。...

服务器磁盘在线扩容案例分享

服务器出现磁盘空间不足,可通过lvm实现在线扩容lsblk分析服务器磁盘基本情况使用lsblk命令查看到我们的分区情况,从下面可以看出服务器的根分区是一个lvm卷,满足在线扩容的要求,同时可发现这台...

LVM系列篇:缩容逻辑卷

LVM系列篇:缩容逻辑卷上一篇LVM篇:扩容逻辑卷我们动手实际操作如何扩容逻辑卷。下面我们演示一下如何缩容逻辑卷。提示:相较于扩容逻辑卷,对逻辑卷进行缩容时,丢失数据的风险较大。所以在生产环境中进行操...

CentOS7下动态调整LVM分区大小的操作步骤

1、问题现象1、df–Th查看发现/根分区可用空间不足,且/home分区可用空间较多2、配合lsblk命令查看发现/根分区与/home分区均为LVM类型2、解决思路压缩/home分区的大小,腾出空间...

Linux根目录扩容——学习记录

公司服务器有的服务器需要扩容,自己在网上查找资料学习,顺便整理记录一下你觉得还不错的话,别忘记点赞哦。以下就是Linux根目录扩容的步骤,跟着操作你也一定能成功。...

CentOs7虚拟机扩容磁盘,非增加硬盘,简单实用,步骤详细

本次扩容需要重新启动虚拟机,所以在跑业务的时候,需要谨慎操作。另外扩容有风险,最好把虚拟机做全盘备份,或者快照。一、查看现在磁盘容量情况命令:df–h,总共是200G二、在虚拟机编辑窗口把硬盘扩容...

centos7 对非LVM Linux 扩充磁盘从20G到30G

对于没有LVM的分区,而且要扩展的分区在最后面,并不是中间分区。我们可以采用下面的方法。1.关机,并做好快照,保证万无一失。检查文件系统#fdisk-l/dev/sda20G#df-h...

Linux 中的逻辑卷 LVM 管理完整初学者指南

这是Linux中LVM(逻辑卷管理)的完整初学者指南。在本教程中,您将了解LVM的概念、它的组件以及为什么要使用它。...

Linux系统扩容

1.确定linux磁盘空间是否不足,使用命令:df-h2.打开虚拟机,修改配置(修改时需要先关闭客户机),如下:lsblk命令:列出所有可用设备块信息...

「学员笔记」LINUX随堂笔记(二)

昨天的笔记大家觉得可还满意?是不是感觉相见恨晚。今天宝藏小编继续给你带来我们学员的优质笔记供大家食用。第2章用户和磁盘管理一.用户帐号管理1.1添加用户账号(useradd)...

「干货」Linux入门篇|Linux 逻辑卷管理LVM

基本磁盘分区以后,如果分区空间用完了,能扩展吗?动态磁盘管理:...

记一次Linux机器centos7系统扩充root磁盘空间经历

CentOS虚拟机根分区磁盘扩容操作,我是用VMware虚拟机做的实验。一、选择你需要扩容的虚拟机器,右击——编辑设置根据需求扩容虚拟机的空间,我扩容是"60G"(根据个人需要填写空间...

详细讲解VMware CentOS7磁盘扩容

VMwareCentOS7磁盘扩容IceScream环境准备虚拟机软件:VMware16Pro系统版本:Linuxlocalhost.localdomain虚拟机:CentOS7,8都可...

(建议收藏)CentOS7挂载未分配的磁盘空间以及LVM详细介绍

简述本文主要介绍CentOS7下如何挂载未分配磁盘空间的详细操作步骤。LVMLVM,逻辑卷管理,英文全称LogicalVolumeManager,是Linux环境下对磁盘分区进行管理的一种机制。是...

取消回复欢迎 发表评论: