逻辑卷管理器(LVM)

2023-05-16

一、什么是LVM?

LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。

LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。

二、LVM的优缺点

1. 优点

①可以在系统运行的状态下动态的扩展文件系统的大小。

在Linux操作系统中我们的磁盘管理机制和Windows上的都差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该分区进行文件系统的格式化,在Linux系统中如果要使用该分区就将其挂载上去即可,windows的话其实底层也就是自动将所有的分区挂载好,然后我们就可以对该分区进行使用了。

可这样做的话会带来很多问题,比如我们使用的一个分区所剩空间大小已经不够使用了,这个时候我们没法对分区进行扩充,我们只能通过增加硬盘,然后在新的硬盘上创建分区,对分区进行格式化,然后将之前分区的所有东西都拷贝到新的分区里面才行。但是新增加的硬盘是作为独立的文件系统存在的,原有的文件系统并没有得到任何的扩充,上层应用只能访问到一个文件系统。这样的方式对个人的电脑来说可能还能接受,但是如果对于生产环境下的服务器来说,这是不可接受的。因为如果要把一个分区的内容都拷贝到另一个分区上去,势必要首先卸载掉之前的那个分区,然后再对整个分区进行拷贝,如果服务器上运行着一个重要的服务,要求是 7*24 小时运行正常的,那么卸载掉分区这是不可想象的,同时如果该分区保存的内容非常非常的多,那么在对分区进行转移时时间可能会耗费很久,所以,这个时候我们就会受到传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。因此,为了解决这个问题,LVM技术就诞生了!这也是LVM最大的优点。

②文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。

③可以增加新的磁盘到LVM的存储池中。

④可以以镜像的方式冗余重要的数据到多个物理磁盘。

⑤可以方便的导出整个卷组到另外一台机器。

2. 缺点

①在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。

②当卷组中的一个磁盘损坏时,整个卷组都会受到影响。

③因为加入了额外的操作,存贮性能受到影响。

三、LVM的用法

1. 名词解释

1_name

如图所示就是LVM的基本组成

PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。

PP(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定(默认为4MB),如1M, 2M, 4M, 8M, 32M, 64M…组成同一VG中所有PV的PE大小应该相同。

VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。
LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。

2. LVM的创建

首先我们要创建两个分区为接下来的LVM做准备,在这里我添加了一块空硬盘sdb,在上面创建了两个分区sdb1和sdb2各500M。

2_fdisk

pvcreate命令在新建的分区上创建PV

3_pvcreate

在这里是因为这两个分区之前被格式化为ext4系统了,所以这里要把它变为逻辑卷需要输入Y确认更改
创建完后我们可以用pvs查看或者pvdisplay查看详细信息

4_pvs

5_pvs2

因为在这之前我做过一次LVM所以我这里有好几个PV卷组,而像上图中用pvs命令查看时我们发现我们新创的PV卷组和以前创建的有点不同,它们的Attr部分不一样,这是因为我们新创建的PV卷组还没有激活,a---表示已激活的pv卷组。VG那一栏是所属的VG组,因为我们还没有划分VG组,所以这一栏也是空。

使用vgcreate命令创建一个VG组,并将我们创建的两个PV加入VG组

6_vgcreate

同样我们也是用vgsvgdisplay命令查看卷组信息及详细信息

7_vgs

vgdisplay后跟卷组名可以只查看这个卷组的详细信息,不跟卷组名是查看所有卷组的详细信息。

这里我们看到我们创好的vg卷组PE大小为4MiB,这是PE的默认大小,PE是卷组的最小储存单位,我们也可以用-s参数来修改,不过这只能才创建卷组时使用,一旦卷组创建成功是没法再去修改PE大小的。

④使用lvcreate命令从VG中创建一个逻辑卷

8_lvcreate

这里我们使用-L参数后跟的是你要设定的逻辑卷大小,这个大小必须是是你设定的PE值的整数倍,如果不是它会给你分一个比你设定的大一点的空间也就是向上去整数倍空间。也可以使用-l但后面跟的就是PE数量像上个步骤中我们划分的卷组PE值为4MiB,数量为254,我们也可以使用-l跟数量,那划分的逻辑卷大小就为4x你划分的数量MiB。

一般用大L指定大小,弊端就是有可能用不完vg里面的空间
用小 l-l 127, 127 个PE ,弊端是需要计算,比如一个PE 4M 127x4M=508M 但是不会出现用不完vg的空间的情况。

-n参数后跟逻辑卷名字,是对创建的卷组命名,最后跟的是卷组名。
逻辑卷的查看命令也是lvslvsdisplay

9_lvs

这里lvdisplay后跟卷组是查看这个卷组的详细信息,只输入lvdisplay是显示所有逻辑卷的详细信息

⑤我们使用mkfs命令对创建的卷组进行格式化

10_mkfs

⑥Linux下的文件系统需要被挂载后才能使用,我们创建一个空目录,再把创建好的逻辑卷挂载上就可以使用了。

11_mount

要想实现开机自动挂载可以写在fstab表里。

3. LVM的扩容与缩小

①逻辑卷的扩容

LVM的强大之处不只是它可以扩容压缩,更重要的是它可以支持在线扩容,但我们首先要保证VG中有足够的空闲空间。

我们使用lvextend命令来对逻辑卷进行扩容

12_lvextend

我们先使用vgs查看VG所剩空间是否充足,接着再对lv1进行扩容。-L参数和创建卷组的-L参数一个性质,后面都是直接跟大小,不过这里要注意+100M是增加100M空间,如果不跟+是扩容到指定的大小,同理如果使用-l参数后,后面跟的就是要增加多少PE值。最后跟的是想要扩容的逻辑卷。

扩容后我们查看一下逻辑卷的大小,确实变成了300M

13_df

但这个时候我们用df -h命令查看一下发现挂载的文件系统并没有增大,这就需要我们使用resize2fs命令手动同步一下文件系统,其实我们有更简单的操作,就是在扩容的同时加上-r参数他会自动扩展文件系统大小,像这样

14_resizefs

15_resizefs2

②卷组的扩容

如果我们发现卷组所剩空间已将不能满足需求了,这时候我们就需要使用vgextend命令对卷组进行扩容

我们先添加一块硬盘sdc

16_vgextend

在虚拟机中这个时候我们通常需要重启,这里我们可以使用echo "- - -" > /sys/class/scsi_host/host0/scan命令让系统重新扫描SCSI总线来添加设备,因为添加的是SCSI磁盘,所以扫描的是SCSI总线

17_echo

首先将要添加的硬盘格式化为PV

18_pvcreate

再将新的PV添加到指定的卷组中去

19_vgexteng

我们可以看到vg卷组大小已经改变了。

②逻辑卷的缩减

逻辑卷扩容可以在线操作但是缩减必须是离线执行,需要先卸载已挂载的逻辑卷。

[root@localhost ~]# umount /disk1/

扩容逻辑卷我们是先扩大逻辑卷再扩大文件系统,而缩小逻辑卷就需要我们反着来,我们要先缩小文件系统,再去缩小逻辑卷

20_e2fsck

缩小文件系统前我们要先对文件系统做个扫描检测,如果我们直接使用resize2fs系统会提示让你先对文件系统进行检测,这是为了保护缩减文件系统时不对数据损害。

接着我们再来缩减逻辑卷

21_lvreduce

注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。

我们可以看到逻辑卷已经缩小了,接着我们再来挂载看看文件系统大小

22_mount

我们可以看到文件系统也变小了

缩小卷组

我们可以用vgreduce去缩小VG卷组的大小

23_vgreduce

缩小VG卷组也就是把一个PV从卷组中移除,但我们要先肯定PV中没有数据,不然就会造成数据的丢失

24_premove

接着我们可以使用pvremove命令移除PV,这样就让分区又重新变成了普通分区。

四、总结

下面我们就对整个LVM的工作原理进行个总结:

  1. 物理磁盘被格式化为PV,空间被划分为一个个的PE
  2. 不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
  3. LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
  4. LV现在就直接可以格式化后挂载使用了
  5. LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,如果操作正确其过程不会丢失原始数据

PS:我们实际生产操作中很少用到逻辑卷的缩减,因为缩减很容易就会造成数据损坏,这是得不偿失的,所以我们不推荐对逻辑卷进行缩减。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑卷管理器(LVM) 的相关文章

  • lvm逻辑卷

    lvm示例应用 案例描述 xff1a 增加四块scsi硬盘 xff0c 每块100G xff0c 并构建lvm逻辑卷 xff0c 挂载到相应目录下 传统的分区方式 常用命令 临时添加IP地址 xff1a ip add add 192 168
  • 挂载LVM卷,提示mount: unknown filesystem type 'LVM2_member'的解决

    系统启动到request module runaway loop modprobe binfmt 464c挂起 利用U盘系统 xff0c 挂载硬盘出现 xff1a mount unknown filesystem type 39 LVM2
  • Debian raid5+lvm

    什么是raid xff1a Raid是 Redundant Array of Independent Disk 的缩写 xff0c 中文意思是独立冗磁盘阵列 简单的说就是将多块硬盘做成一个集合来进行使用 raid的级别决定着存储大小 xff
  • 找不到物理服务器,lvm – Grub2报告服务器上找不到的物理卷pv0不再可启动

    我首先使用lvm安装了我的ubuntu服务器 11 10 amd64 但没有完全掌握它的概念 我认为这部分是因为我的两个磁盘上的分区混乱 在我看来 我从一开始就使用grub2安装了一切来启动我的Ubuntu 我后来更新到Ubuntu Ser
  • [Linux]LVM (Linux 逻辑卷管理)

    概念 xff1a LVM是 Logical Volume Manager xff08 逻辑卷管理 xff09 的简写 xff0c 它是Linux环境下对磁盘分区进行管理的一种机制 PV xff1a 硬盘和分区都可以标记为PV xff0c P
  • Linux 扩容 / 根分区(LVM+非LVM)

    一 CentOS7 xff0c LVM根分区扩容步骤 xff1a 1 查看现有分区大小 span class token function df span TH 2 关机增加大小为30G 测试环境使用的Vmware Workstation
  • VDO、RAID、LVM

    VDO RAID LVM实验记录 VDORAIDRAID10实验RAID5实验 LVM创建逻辑卷扩容逻辑卷缩小逻辑卷逻辑卷快照删除逻辑卷 VDO 使用vdo 虚拟数据优化 目的节省空间 实验为创建挂载的操作 虚拟机中新添加一块SATA硬盘
  • 用lvm为centos-root逻辑卷扩容

    在用linux进行开发的时候 xff0c 发现centos root下只有50G的空间 xff0c 不满足实际的需求 解决的方法有两种 xff0c 一种是外挂硬盘 xff0c 将其格式化并挂载在某目录下 xff08 如mnt xff09 x
  • 逻辑盘(lvm)扩容

    1 已经创建lvm 2 扩容 目的 xff1a 把sdb容量扩给 目录 2 1 xff1a dev sdb 分区格式化 span class token function fdisk span dev sdb 命令 span class t
  • 文件系统与LVM(mksf、mkswap、swapon、挂载、磁盘、UUID号)

    目录 mksfmkswapswapon挂载查看磁盘使用情况查看分区UUID号管理LVM逻辑卷 mksf 作用 创建文件系统 格式化 t 指定格式化文件类型 b 指定block大小 U 设置UUID号 mksf ext4 磁盘路径 格式化 m
  • 虚拟机扩容——LVM分区

    虚拟机扩容 LVM分区 前提说明实验环境一 准备工作二 查看磁盘扩容后状态三 对指定磁盘进行初始化操作四 创建物理卷1 刷新分区并创建物理卷2 查看物理卷信息 五 卷组 逻辑卷的操作 xff08 加载到已有路径 xff09 1 查看卷组名称
  • LVM跨主机迁移

    LVM跨主机迁移 虚拟机 实验环境 两台Centos 7 8虚拟机 xff0c IP xff1a 192 168 221 199 200 查看lv test中的数据 使用命令lsblk xff0c 确认逻辑卷vg下挂有两个分区均为sdb磁盘
  • ubuntu 18.04 server 扩容(LVM)磁盘 解决磁盘不足的情况 (亲测)

    因为发现我的本地server出现磁盘满了的情况 所以进行lvm的扩容 截图的都是扩容后的 所以忽略容量 1 查看磁盘情况 df span class hljs attribute h span 原本发现 dev mapper ubuntu
  • 在Ubuntu上使用LVM对ROOT进行在线扩容

    前提 xff1a 在安装ubuntu的时候 xff0c 是使用LVM进行分区管理的 背景 xff1a 我在安装的时候 xff0c 选择了500G大小 xff0c 磁盘总大小1T xff0c 现在想扩成1T 扩容前 xff1a yang 64
  • centos7下将docker的storage 由loop-lvm 更改为 direct-lvm

    本机服务器环境是centos7 xff08 vbox虚拟机 xff09 安装docker后 运行正常 xff0c 某次强行关闭了虚拟机 导致后续docker运行不起来 xff0c 发现报错是与storage有关 xff0c 所以网上查原因是
  • LUN磁盘、LVM及JFS2驱动内部关系

    复杂度2 5 机密度3 5 最后更新2021 04 30 LUN Logical Unit Number 是scsi专用概念 指在同一SCSI设备 同SCSI ID 下映射的逻辑子设备 这来自最早SCSI设备是总线结构 可以支持一个或两个i
  • Redhat 7 LVM xfs文件系统修复

    一 情况描述 服务器重启操作系统后自动进入急救模式 单用户模式 进入后ip a查看lo网卡 df h查看分区发现只存在lv root 报错图如下 XFS sdb1 Internal error XFS WANT CORRUPTED RETU
  • centos7Linux中的lvm、pv、vg、lv,以及Linux扩容,创建新分区

    概念 本着言简意赅的目的 以下概念会在扩容时用到 需熟知 不然会不理解具体操作在干什么 lvm 逻辑卷管理器 Logical Volume Manager 它使系统管理员可以更方便的为应用与用户分配存储空间 在LVM管理下的存储卷可以按需要
  • Linux 配置与磁盘管理

    目录 物理设备的命名规则 Linux中硬盘分区部分 Linux在分区上建立文件系统 挂载 Linux硬盘管理工具 LVM逻辑卷管理器 物理卷 卷组合逻辑卷的建立 逻辑卷的使用 LVM整体创建流程 硬盘配额配置 针对用户或者群组使用的空间 物
  • 使用 stderr=PIPE 和 Popen.communicate() 获取竞争条件

    我正在开发一个 kubernetes flexvolume 驱动程序 用于创建 LVM 设备 并创建和挂载文件系统 由于某种原因 我偶尔会遇到死锁 根据文档 使用 Popen communicate 时不应发生这种死锁 Traceback

随机推荐

  • c语言求数组中10 个整数中最大值

    c语言求数组中10 个整数中最大值 要求在数组中输入10个整数 xff0c 输出最大值 这里先用一种简单的方法 xff0c 创建一个变量max xff1d 0 xff0c 用max与这10个数依次比较 xff0c 如果比max大就把它的值赋
  • c语言详细解答辗转相除法求两个数的最小公倍数

    C语言详细解答辗转相除法求两个数的最小公倍数 1 辗转相除法的用法 最大公约数 辗转相除法是用一个大的数除以一个小的数 xff0c 如果有余数 xff0c 就用被除数 余数 xff0c 如果还有余数就继续用 xff08 上一个公式的 被除数
  • Linux 嵌入式 笔记 NFS网络文件系统

    文章目录 Linux 嵌入式 笔记 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 文章目录前言一 nfs 相关命令二 原理1 第一点2 第二点 总结 前言 注意 xff1a
  • linux下cpu锁定频率以及频率设置

    linux下cpu锁定频率以及频率设置 环境如下 ubuntu22 04cpu为5700g 前期准备 使用工具为 xff1a cpufrequtils span class token function sudo span span cla
  • CentOS7安装xrdp(windows远程桌面连接linux)

    前提 CentOS安装桌面 xff0c 如果无桌面 xff0c 请执行 xff1a yum y groups install 34 GNOME Desktop 34 startx 方法一 配置源 yum install epel y 安装x
  • Linux CPU超频设置

    查看当前cpu运行频率 xff1a cat proc cpuinfo grep i cpu mhz 开始设置 xff1a cpupower c all frequency set g performance 或者 cpupower freq
  • Ozone调试经验总结

    如何查看内存 view gt memory打开内存窗口即可查看 如何读写内存 Target ReadU32 addr Target WriteU32 addr value 遇到不会的 xff0c 可以使用help命令找找看
  • 元宇宙创作者必备技能TouchDesigner

    元宇宙的资源清单又更新啦 github com shadowcz007 awesome metaverse 感谢ML211 提供线索metaworld app 感谢ML1462 提供线索 The Sims Resource opus Git
  • 栈的入栈和出栈的顺序规律

    栈的入栈和出栈的顺序规律是先进后出 xff0c 所以出栈的可能数目跟入栈的可能排列数目是一致的 a的出入有2中可能 xff0c b的出入有2种可能 xff0c c的出入有2种可能 xff0c d只需要关系入 xff0c 只有一种可能 所以出
  • TCP和UDP协议发送数据包的大小

    在进行UDP编程的时候 我们最容易想到的问题就是 一次发送多少bytes好 当然 这个没有唯一答案 xff0c 相对于不同的系统 不同的要求 其得到的答案是不一样的 这里仅对像ICQ一类的发送聊天消息的情况作分析 xff0c 对于其他情况
  • Nodejs开发:如何让node app的程序一直运行?

    情境 运行nodejs的程序 xff0c 使用命令 xff1a node xxx js xff0c 但是关掉终端 xff0c 程序也关闭了 xff0c 如何让node app的程序一直运行 xff1f 解决 1 安装forever npm
  • Godot基础教程02:全都是节点

    在这里先劝退一波人 xff1a 本教程只会涉及2D内容 xff0c 不会涉及3D内容 创建节点 接上一章 xff0c 在左侧的场景面板中 xff0c 可以看到 xff1a 由于本教程只讲2D内容 xff0c 所以这里我们应该选择2D场景 x
  • docker安装gitlab-ce镜像,使用其他端口,亲测可用

    首先鄙视一下那些直接复制粘贴当自己博文的 xff0c 误导别人 xff0c 害我改了好久T T 安装步骤 xff1a 创建数据目录 mkdir p data gitlab config mkdir p data gitlab logs mk
  • iOS 录音,播放,转码MP3,上传语音文件

    语音文件 AVAudioRecorder recorder NSTimer timer NSString urlPlay BOOL isPlay pragma mark 61 61 61 61 61 61 61 61 61 语音文件 61
  • CentOS使用yum安装MySQL5.7报检索密钥错误解决方法

    在CentOS上使用yum安装MySQL时检索密钥错误的解决方法 参考 使用yum安装MySQL时报错 yum y install mysql mysql server yum y install mysql community serve
  • 安装django

    使用pip安装 pip install django 61 61 span class hljs string 39 1 8 39 span 检查django版本 python c span class hljs string 39 imp
  • python,pycharm报错 ModuleNotFoundError: No module named PIL最简单的解决方法

    python pycharm报错 ModuleNotFoundError No module named 39 PIL 最简单的解决方法 1进入cmd命令 2输入pip install Pillow即可 如图 如果对你有帮助 xff0c 请
  • docker中使用Ubuntu中文乱码问题解决

    一 前言 最近在docker中使用Ubuntu作为编译环境 xff0c 遇到了中文乱码情况 xff0c 分为不同的解决场景 xff0c 下面分别给出解决方法 下面的方法都不是将系统的语言修改为中文 xff0c 而是能够正确显示和输入中文 g
  • 在docker的centos镜像中使用systemctl启动slapd服务报错

    前言 使用docker搭建服务环境 xff0c 拉取了一个Centos7镜像 xff0c 在镜像中使用systemctl命令启动sladpd服务 xff0c 已经使用 privileged 61 true启用特权模式 xff0c 但还是报错
  • 逻辑卷管理器(LVM)

    一 什么是LVM xff1f LVM Logical Volume Manager 逻辑卷管理是在Linux2 4内核以上实现的磁盘管理技术 它是Linux环境下对磁盘分区进行管理的一种机制 现在不仅仅是Linux系统上可以使用LVM这种磁