Linux LVM 详解

news2024/11/14 17:35:02

Linux LVM 详解

1. 简介

参考链接:

https://blog.csdn.net/qq_35745940/article/details/119054949

https://blog.csdn.net/FP202530/article/details/125140176

👉 LVM(Logical Volume Manager)逻辑卷管理

是在硬盘分区和文件系统之间添加的一个逻辑层,为文件系统屏蔽下层硬盘分区布局,并提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在硬盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越物理硬盘。当服务器添加了新的硬盘后,管理员不必将原有的文件移动到新的硬盘上,而是通过LVM直接扩展文件系统来跨越物理硬盘。

LVM就是通过将底层的物理硬盘封装,然后以逻辑卷的方式呈现给上层应用。当我们对底层的物理硬盘进行操作时,不再是针对分区进行操作,而是通过逻辑卷对底层硬盘进行管理操作。

👉 物理存储介质(The physical media):

LVM存储介质,可以是硬盘分区、整个硬盘、raid阵列或SAN硬盘。设备必须初始化为LVM物理卷,才能与LVM结合使用。

👉 物理卷PV(physical volume):

物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质比较却包含与LVM相关的管理参数,创建物理卷可以用硬盘分区,也可以用硬盘本身。

👉 卷组VG(Volume Group):

PV的集合,LVM卷组类似于非LVM系统中的物理硬盘,一个卷组VG由一个或多个物理卷PV组成。可以在卷组VG上建立逻辑卷LV。

👉 逻辑卷LV(logical volume):

VG中画出来的一块逻辑磁盘,类似于非LVM系统中的硬盘分区,逻辑卷LV建立在卷组VG之上。在逻辑卷LV之上建立文件系统。

👉 物理块PE(physical Extent):

物理卷PV中可以分配的最小存储单元,PE的大小可以指定,默认为4MB

👉 逻辑块LE(Logical Extent):

逻辑卷LV中可以分配的最小存储单元,在同一卷组VG中LE的大小和PE是相同的,并且一一相对。

❓ 为什么需要使用逻辑卷的方式来管理磁盘

  • 业务上使用大容量的磁盘。举个例子,我们需要在/data下挂载30TB的存储,对于单个磁盘,是无法满足要求的,因为市面上没有那么大的单块磁盘。但是如果我们使用逻辑卷,将多个小容量的磁盘聚合为一个大的逻辑磁盘,就能满足需求。
  • 扩展和收缩磁盘。在业务初期规划磁盘时,我们并不能完全知道需要分配多少磁盘空间是合理的,如果使用物理卷,后期无法扩展和收缩,如果使用逻辑卷,可以根据后期的需求量,手动扩展或收缩。

在这里插入图片描述

在这里插入图片描述

2. 新增磁盘验证

1️⃣ 添加一块新磁盘

在这里插入图片描述

2️⃣ 查看新增磁盘信息
[root@node2 ~]# ll /sys/class/scsi_host
总用量 0
lrwxrwxrwx 1 root root 0 7月  16 14:31 host0 -> ../../devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0
lrwxrwxrwx 1 root root 0 7月  16 14:31 host1 -> ../../devices/pci0000:00/0000:00:07.1/ata1/host1/scsi_host/host1
lrwxrwxrwx 1 root root 0 7月  16 14:31 host2 -> ../../devices/pci0000:00/0000:00:07.1/ata2/host2/scsi_host/host2
# 重新扫描SCSI总线添加设备,不重启检测新增磁盘
for i in {0..2}; do echo "- - -" > /sys/class/scsi_host/host$i/scan; done

# 查看磁盘信息
[root@node2 ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk 
sr0              11:0    1  4.2G  0 rom 
3️⃣ 创建PV

在创建 PV 之前可以对磁盘进行分区,也可以不分区,本次验证不进行分区。

使用 fdisk /dev/sdb 进行分区

# 新建 PV
[root@node2 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 查看 PV 信息
[root@node2 ~]# pvdisplay /dev/sdb
  --- Physical volume --- 
  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7muupY-s6xl-hkcg-fmfP-Gf7q-U4eh-SdrK70

在这里插入图片描述

4️⃣ 创建卷组 VG

使用vgcreate创建卷组VG,并且此处可以-s选项指定PE(LE)的大小,(默认PE大小4M)。PE大,读取速度快,但浪费空间。反之,读取速度慢,但节省空间。

[root@node2 ~]# vgcreate vg_data /dev/sdb
  Volume group "vg_data" successfully created
[root@node2 ~]# vgdisplay vg_data
  --- Volume group ---
  VG Name               vg_data
  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               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               doqU2V-DWnZ-knwI-e7rT-GU1w-TGq8-Sc6RPs

在这里插入图片描述

5️⃣ 创建逻辑卷 LV
参数说明
-n指定逻辑卷名称,示例:-n lv_data
-L指定逻辑卷的大小,如 -L 1G
-l使用LE个数来指定逻辑卷的大小,如 -l 200,表示使用200个LE来创建逻辑卷,一般的我们最常用的是-L 来直接指定逻辑卷大小即可。
说明:
PE是在卷组中的叫法,而LE是在逻辑卷中的叫法,两者是一一对应的。
-l参数还有一种直接使用剩余空间的百分比的形式来给定大小,如 -l +100%FREE
示例:
将 vg 总大小 Total PE 全部分配给 LV
lvcreate -n lv_data -l 2559 vg_data
# 新建 LV 并指定大小
[root@node2 ~]# lvcreate -n lv_data -L 1G vg_data
  Logical volume "lv_data" created.
# 查看 LV 信息
[root@node2 ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    centos  -wi-ao---- <17.00g                                                    
  swap    centos  -wi-ao----   2.00g                                                    
  lv_data vg_data -wi-a-----   1.00g
  

# 可以使用 -l 将所有的空余 PE 全部分给 LV
lvcreate -l 100%FREE -n lv_data vg_data

在这里插入图片描述

# 新建完成之后,使用 vgdisplay 查看剩余大小
[root@node2 ~]# vgdisplay vg_data
  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       256 / 1.00 GiB
  Free  PE / Size       2303 / <9.00 GiB
  VG UUID               doqU2V-DWnZ-knwI-e7rT-GU1w-TGq8-Sc6RPs

在这里插入图片描述

6️⃣ 磁盘格式化与挂载
  • 格式化

xfs文件系统只支持增大,不支持减小。ext2、ext3、ext4增大减小都支持。

# 或者使用 mkfs -t ext4 /dev/vg_data/lv_data 命令
[root@node2 ~]# mkfs.ext4 /dev/vg_data/lv_data 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
  • 挂载
# 新建挂载目录
mkdir /demo

# 挂载
mount /dev/vg_data/lv_data /demo

在这里插入图片描述

  • 自动挂载
# 编辑 /etc/fstab 配置文件,每次启动时会自动挂载
vim /etc/fstab
# 在文件中新增配置信息,格式参照默认配置格式
/dev/mapper/vg_data-lv_data /demo               ext4    defaults        0 0

在这里插入图片描述

3. 磁盘扩容

1️⃣ 逻辑卷 LV 扩容

首先需要确认是否有可用的扩容空间,逻辑卷LV是从卷组VG中创建的,所有在逻辑卷LV扩容前需要查看卷组VG的空间使用情况。

在这里插入图片描述

VG 有多余空间的情况下,使用 lvextend 命令的 -L 选项扩展逻辑卷 LV 的大小

注:建议先取消磁盘挂载之后在进行扩容操作

# 注:这里少了一个 + 号,是错误的,并没有添加成功。
[root@node2 ~]# lvextend -L 1G /dev/vg_data/lv_data 
  New size (256 extents) matches existing size (256 extents).

# 成功如下
[root@node2 ~]# lvextend -L +500M /dev/vg_data/lv_data 
  Size of logical volume vg_data/lv_data changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
  Logical volume vg_data/lv_data successfully resized.

# 可以使用 -l 将剩余所有的 VG 大小分配给 LV
lvextend -l +100%FREE /dev/vg_data/lv_data

在这里插入图片描述

调整逻辑卷文件系统大小,查看调整后大小

[root@node2 ~]# resize2fs /dev/vg_data/lv_data 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg_data/lv_data is mounted on /demo; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg_data/lv_data is now 390144 blocks long.

# 参数说明
resize2fs命令          针对的是ext2、ext3、ext4文件系统
xfs_growfs命令         针对的是xfs文件系统

在这里插入图片描述

2️⃣ 卷组 VG 扩容

上述在扩容 LV 时,如果 VG 没有足够的大小时,则需要对 VG 进行扩容

vgextend:用于扩展卷组的磁盘空间。当创建了新的物理卷,并需要将其添加到已有卷组中时,可以使用该命令。

命令格式:vgextend [需要扩展的卷组名称] [新添加的物理卷(PV)]

示例:vgextend vg_data /dev/sdc

  • 新增一块新磁盘

在这里插入图片描述

  • 扩容 VG
# 扩容 VG
[root@node2 ~]# vgextend vg_data /dev/sdc
  Physical volume "/dev/sdc" successfully created.
  Volume group "vg_data" successfully extended

# 查看扩容后 VG 大小
[root@node2 ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree 
  centos    1   2   0 wz--n- <19.00g     0 
  vg_data   2   1   0 wz--n-  12.99g 11.50g

# 查看扩容后 PV 情况
[root@node2 ~]# pvs
  PV         VG      Fmt  Attr PSize   PFree 
  /dev/sda2  centos  lvm2 a--  <19.00g     0 
  /dev/sdb   vg_data lvm2 a--  <10.00g <8.51g
  /dev/sdc   vg_data lvm2 a--   <3.00g <3.00g

在这里插入图片描述

4. 磁盘缩容

逻辑卷 LV 缩容

注:一般情况下不会进行磁盘的缩容操作,此次试验是做验证使用

# 这里没有 -(减号) 则说明是缩容至指定大小
lvreduce -L 1G -r /dev/vg_data/lv_data

在这里插入图片描述

# 这里带有 -(减号) 则说明是缩容指定大小
lvreduce -L -200M -r /dev/vg_data/lv_data

在这里插入图片描述

如果不使用 -r 选项,则需要卸载挂载点再使用 resize2fs 调整

# 正确操作
#卸载挂载
umount /dev/vg_data/lv_data

#运行e2fsck 检测文件系统
# 注意:应该先缩小文件系统后再缩小逻辑卷,否则在进行lv逻辑卷缩小时产生文件系统大小与物理分区不匹配的错误
e2fsck -f /dev/vg_data/lv_data 
resize2fs /dev/vg_data/lv_data 500M
lvreduce -L 500M /dev/vg_data/lv_data
mount /dev/vg_data/lv_data /demo

在这里插入图片描述

5. 磁盘删除

1️⃣ 删除逻辑卷 LV

需要卸载挂载的磁盘

[root@node2 ~]# lvremove /dev/vg_data/lv_data 
Do you really want to remove active logical volume vg_data/lv_data? [y/n]: y
  Logical volume "lv_data" successfully removed

在这里插入图片描述

2️⃣ 删除卷组 VG
# 查看现有 VG 信息
[root@node2 ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree 
  centos    1   2   0 wz--n- <19.00g     0 
  vg_data   2   0   0 wz--n-  12.99g 12.99g

# 删除指定 VG
vgremove vg_data

# 移除 VG 中指定的 PV
vgreduce vg_data /dev/sdc

在这里插入图片描述

3️⃣ 删除 PV
# 查看现有 PV 信息
[root@node2 ~]# pvs
  PV         VG      Fmt  Attr PSize   PFree  
  /dev/sda2  centos  lvm2 a--  <19.00g      0 
  /dev/sdb   vg_data lvm2 a--  <10.00g <10.00g
  /dev/sdc   vg_data lvm2 a--   <3.00g  <3.00g

# 删除指定 PV
pvremove /dev/sdc

在这里插入图片描述

6. 利用工具进行磁盘检测

SSM工具:检查关于可用硬盘和LVM卷的信息。显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。

1️⃣ 安装
yum -y install system-storage-manager
2️⃣ 列出设备信息
ssm list dev

在这里插入图片描述

3️⃣ 列出存储池信息
ssm list pool

在这里插入图片描述

4️⃣ 列出卷信息
ssm list vol

在这里插入图片描述

5️⃣ SSM创建LVM

ssm create -s [lv大小] -n [lv名称] --fstype [lv文件系统类型] -p [卷组名] [设备] [挂载点]
自动把设备变成pv,创建pv、lv,格式化文件系统,挂载目录自动创建,自动挂载

# 示例
ssm create -s 1G -n lv_demo --fstype ext4 -p vg_demo /dev/sd[c-d] /demo

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面向对象02:构造器详解

本节内容视频链接&#xff1a;面向对象05&#xff1a;构造器详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p64&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 构造器&#xff08;‌Constructor&#xff09;‌是一种特殊的方法&#xff0c;‌用于初始…

解决Intel-12代13代14代大小核调用导致VMware虚拟机性能低

0x01 设备信息 近期入手的是一台2023款 y9000p 游戏本&#xff0c;CPU为13500h 显卡为RTX4060。 0x02 VMware虚拟机遇到的性能问题 尤其是windows虚机明显感觉性能非常差&#xff0c;开几个网页都很卡。 我一度怀疑是CPU i5性能差&#xff0c;还没我的轻薄本运行速度快&…

jmeter中CSV 数据文件设置用例

1、CSV数据文件的基础使用 线程组->添加->配置远近->CSV数据文件设置 2、多条用例运行CSV数据文件 由于我的csv请求的json数据有“&#xff0c;”所以我这边 分隔符选择了*号 写了两行需要测试的用例&#xff0c;需要添加一个“循环控制器” 线程组->添加-&g…

省时又省力!2024年最新录屏软件快捷键大放送

录屏工具可以帮我们录制教学视频、游戏精彩瞬间等内容。很多时候录制的过程瞬息万变&#xff0c;如果合理使用录屏快捷键就会极大的缓解我们录制时候的慌乱。今天&#xff0c;就让我们一起探索那些“大家都在用的录屏软件快捷键”&#xff0c;看看它们是如何让我们的录制工作变…

centos7 xtrabackup mysql(8)压缩 全量备份 还原(4)

centos7 xtrabackup mysql&#xff08;8&#xff09;压缩 全量备份 还原&#xff08;4&#xff09; 查看版本&#xff1a; xtrabackup --version qpress --help 主机端 mysql -u root -p 1234aA~1 use company_pro; insert into employee(name) value (‘20240823_1401’);…

2024.8.23

130124202408231008 DATE #:20240823 ITEM #:DOC WEEK #:FRIDAY DAIL #:捌月二十 TAGS < BGM "Forest Mixtape&#xff08;Tsuki)" > < theme oi-graph theory Eulerian > < [NULL] > < [空] > < [空] >冰岛的温柔是克莱因蓝再加点…

使用nfs搭建文件共享系统,以及windows环境如何访问linux系统中的文件共享目录

31、简介 在一些场景中&#xff0c;我们需要多台机器进行磁盘文件共享&#xff0c;集群中如果有linux机器&#xff0c;也有windows机器&#xff0c;如何设置进行文件共享&#xff0c;本文将详细说明。 注&#xff1a;本文linux系统使用的是 centos7&#xff0c;windows使用的是…

【Qt】常见控件 —— QWidget

文章目录 QWidget 的基本介绍QWidget 的 enable 属性QWidget 的 geometry属性 QWidget 的基本介绍 Qt 中 的 各种控件 都继承自 QWidget类 在 Qt designer 右侧 就显示出 QWidget的各种属性 并且也可以直接进行编辑 QWidget 的 enable 属性 enable 描述一个控件是否处于可用 …

前端面试题整理-webpack

实现前端模块化&#xff0c;将多个 js&#xff0c;打包成一个 bundle.js (其他类型文件交由各自的 loader 处理) 1. webpack 了解吗&#xff1f;大概介绍一下 一种打包工具&#xff0c;实现前端模块化&#xff0c;将多个 js&#xff0c;打包成一个 bundle.js (其他类型文件交…

Linux中查看端口被哪个进程占用、进程调用的配置文件、目录,address already in use端口被占用杀死并释放端口

1.查看被占用的端口的进程&#xff08;netstat和ss是一样的&#xff0c;较新的系统推荐ss&#xff09;: netstat -antulp | grep 端口号ss -antulp | grep :端口号lsof -i | grep 端口号2. 通过上面的命令就可以列出&#xff0c;这个端口被哪些应用程序所占用&#xff0c;然后找…

Java设计模式之策略模式详细讲解和案例示范

Java设计模式之策略模式详细讲解和案例示范 在软件开发中&#xff0c;策略模式是一种常见且非常有用的设计模式。它允许定义一系列算法&#xff0c;将它们一个个封装起来&#xff0c;并且使它们可以互相替换。策略模式让算法可以独立于使用它们的客户端而变化。本篇文章将详细…

VScode的python虚拟环境

1 创建虚拟环境&#xff08;venv&#xff09; 在VSCode中打开项目文件夹&#xff0c;键盘按住快捷键ctrl shift p&#xff0c;打开命令面板&#xff0c;输入python:创建环境 选择venv&#xff0c;输入解释器路径&#xff0c;此时左侧文件夹内会出现一个.venv文件夹 2 激活虚拟…

未来已来:探索机器学习如何重塑人工智能的未来方向

引言&#xff1a;机器学习室实现人工智能的关键技术手段&#xff0c;应用领域持续延伸 机器学习是人工智能的一个重要分支&#xff0c;主要研究如何让计算机系统通过数据学习并做出决策或预测&#xff0c;而不需要明确的编程。简单来说&#xff0c;就是让计算机利用经验来提高性…

C# 如何实现接口事件:详解与示例

文章目录 实现接口事件的步骤示例&#xff1a;实现接口事件1. 定义接口事件2. 实现接口事件3. 订阅和触发事件4. 使用示例 总结 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种定义类必须实现的方法和属性的抽象类型。除了方法和属性&#xff0c;接口还可以包…

浅谈红队攻防之道-CobaltStrike钓鱼攻击集锦

打个比方&#xff0c;一片大地上&#xff0c;躺着一群沉睡的人&#xff0c;远处就是火山&#xff0c;马上就要爆发了&#xff0c;你就像个闹钟&#xff0c;面对这些沉睡的人&#xff0c;你想把他们叫醒。 你持续不断地响着&#xff0c;有的睡得浅的人&#xff0c;被你叫醒了&am…

区块链基础通识(1)——分布式系统的共识问题

分布式系统 我们最初了解区块链的时候&#xff0c;很多人会形容这个区块链是一个“分布式的不可篡改账本”&#xff0c;这是一个很形象的说法&#xff0c;但是我认为更为准确的形容是“所有节点共同维护的状态机”。为什么分布式和区块链不能划等号呢&#xff1f; 两种常见的…

Ubuntu 22.04中解决Could not load the Qt platform plugin “xcb“问题解决方法

摘要&#xff1a;在Ubuntu 22.04中安装OpenCV后&#xff0c;遇到“load the Qt platform plugin “xcb” in site-packages/cv2/qt/plugins" even though it was found. 的问题&#xff0c;导致程序无法启动。本文详细探讨了该问题的成因&#xff0c;并介绍了几种常见但无…

在线英语学习小程序App源码开发技术探讨

引言 随着信息技术的飞速发展和全球化进程的加快&#xff0c;英语学习已经成为越来越多人的日常需求。传统的纸质材料和课堂教学已经无法满足现代人灵活、高效的学习需求。因此&#xff0c;开发一款在线英语学习小程序App成为了一个热门话题。本文将从技术角度探讨在线英语学习…

SX_gitlab图形化案例_19

由图形去理解gitlab反而更直观&#xff1a; 圆圈代表着本机代码所在的位置 这就代表着&#xff0c;本机的代码和远程仓库&#xff0c;jhy_gnss的代码是一样的 一个原点代表着一次改动 merge branch ‘jhy_gnss’ of 192.168.91.10:t3000 into jhy_gnss 这条命令是将GitLab服…

Frog4Shell — FritzFrog 僵尸网络将一日攻击纳入其武器库

FritzFrog 的背景 Akamai 通过我们的全球传感器网络持续监控威胁,包括我们之前发现的威胁。其中包括FritzFrog 僵尸网络(最初于 2020 年发现),这是一个基于 Golang 的复杂点对点僵尸网络,经过编译可同时支持基于 AMD 和 ARM 的机器。该恶意软件得到积极维护,多年来通过增…