Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理
(一)相关概念
逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念。
- 物理卷(Physical Volume,PV):也就是物理磁盘分区,如果想要使用LVM来管理这个分区,可以使用fdisk将其ID改为LVM可以识别的值,即8e。
- 卷组(Volume Group,VG):PV的集合
- 逻辑卷(Logic Volume,LV):VG中画出来的一块逻辑磁盘
了解概念之后,逻辑卷是如何产生的就很清晰了:物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。具体架构如下:
(二)为什么要使用逻辑卷
对于物理磁盘,我们直接分区、格式化为文件系统之后就可以使用,那为什么还需要使用逻辑卷的方式来管理磁盘呢?我认为主要有2个原因:
- 业务上使用大容量的磁盘。举个例子,我们需要在/data下挂载30TB的存储,对于单个磁盘,是无法满足要求的,因为市面上没有那么大的单块磁盘。但是如果我们使用逻辑卷,将多个小容量的磁盘聚合为一个大的逻辑磁盘,就能满足需求。
- 扩展和收缩磁盘。在业务初期规划磁盘时,我们并不能完全知道需要分配多少磁盘空间是合理的,如果使用物理卷,后期无法扩展和收缩,如果使用逻辑卷,可以根据后期的需求量,手动扩展或收缩。
(三)创建物理卷(PV)
通过上面的逻辑卷架构图,可以知道,如果要创建逻辑卷,需要先有物理磁盘或者磁盘分区,然后使用物理磁盘或磁盘分区创建物理卷,再使用物理卷创建卷组,最后使用卷组创建逻辑卷。接下来一步一步创建逻辑卷。
创建物理卷是创建逻辑卷的第一步,创建物理卷相关命令有:
# pvcreate用于创建物理卷
pvcreate /dev/sdb # pvdisplay、pvsca、pvs用于查看物理卷
pvdisplay
pvs
pvscan
可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷。两种方法稍微有些差距,下面进行说明。
(3.1)使用磁盘直接创建物理卷
直接使用物理磁盘创建物理卷没有什么需要特别注意的,直接创建即可。
# 使用fdisk -l确认磁盘,可以看到/dev/sdb未做分区处理
[root@masterdb ~]# fdisk -l /dev/sdb Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
# 使用pvcreate将sdb磁盘创建为物理卷
[root@masterdb ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 使用pvdisplay确认物理卷信息
[root@masterdb ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name centos
PV Size <68.73 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 17593
Free PE 0
Allocated PE 17593
PV UUID FRxq7G-1XWu-dPeW-wEwO-322y-M9XR-0ExebA "/dev/sdb" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID nsL75f-o3fD-apyz-SSY0-miUi-4RYf-zVLIT6
# 也可以使用pvs确认物理卷信息,不过能够看到的信息比pvdisplay少
[root@masterdb ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- 68.72g 0
/dev/sdb lvm2 --- 2.00g 2.00g
[root@masterdb ~]#
(3.2)使用磁盘分区创建物理卷
磁盘分区之后,磁盘id为83,如果要使用逻辑卷管理,需要将id改为8e,才能创建物理卷。
分区1修改id过程如下:
[root@masterdb ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Command (m for help): t #t可以修改分区代码
Partition number (1,2, default 2): 1 #选择1分区进行修改
Hex code (type L to list all codes): L #如果不知道类型,可以用”L”列出可以选择的修改代码 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list all codes): 8e #选择8e
Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w # 保存
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.
[root@masterdb ~]#
按照上面的过程,修改分区2,最终结果如下:
接着进行创建物理卷(PV)即可
[root@masterdb ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
[root@masterdb ~]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created.
(四)创建、扩容卷组
(4.1)创建卷组
有了PV就可以创建卷组了,创建卷组相关命令有:
# 使用vgcreate创建卷组
vgcreate VG_NAME device1 ... devicen # 使用vgdosplay、vgscan、vgs命令查看卷组
vgdisplay
vgscan
vgs
接下来演示使用sdb和sdc1创建一个卷组VG_TEST。
# 使用vgcreate创建卷组VG_TEST,包含物理卷:/dev/sdb和/dev/sdc1
[root@masterdb ~]# vgcreate VG_TEST /dev/sdb /dev/sdc1
Volume group "VG_TEST" successfully created
# 查看方法一:使用vgdisplay查看卷组信息
[root@masterdb ~]# vgdisplay
--- Volume group ---
VG Name VG_TEST
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 2.99 GiB
PE Size 4.00 MiB
Total PE 766
Alloc PE / Size 0 / 0
Free PE / Size 766 / 2.99 GiB
VG UUID DmY2Nz-ietc-2Y8Y-7A1b-1cpT-qEeV-XrgURn
... # 查看方法二:使用vgscan查看卷组信息
[root@masterdb ~]# vgscan
Reading volume groups from cache.
Found volume group "VG_TEST" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
# 查看方法三:使用vgs查看卷组信息
[root@masterdb ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VG_TEST 2 0 0 wz--n- 2.99g 2.99g
centos 1 4 0 wz--n- 68.72g 0
(4.2)扩容卷组
如果在使用过程中,发现要使用的空间大于卷组的空间,可以对卷组进行扩容,把新的物理卷(PV)加入到卷组中,语法为
vgextend VG_NAME device1 ... devicen
接下来演示将sdc2加入到卷组VG_TEST中。
# 使用vgextend扩容卷组VG_TEST
[root@masterdb ~]# vgextend VG_TEST /dev/sdc2
Volume group "VG_TEST" successfully extended
最终结果如下,发现PV数量和VG容量都发生了变化
(五)创建、扩容逻辑卷
(5.1)创建逻辑卷
有了卷组,就可以创建逻辑卷(LV)了,创建逻辑卷相关命令有:
# 使用lvcreate创建逻辑卷
lvcreate –L SIZE –n LV_NAME VG_NAME 使用lvdisplay、lvscan、lvs查看逻辑卷
lvdisplay
lvscan
lvs
接下来演示使用VG_TEST创建逻辑卷lv_test
# 使用lvcreate创建逻辑卷lv_test
[root@masterdb ~]# lvcreate -L 1g -n lv_test VG_TEST
Logical volume "lv_test" created.
# 查看方法一:使用lvdisplay查看逻辑卷
[root@masterdb ~]# lvdisplay
--- Logical volume ---
LV Path /dev/VG_TEST/lv_test
LV Name lv_test
VG Name VG_TEST
LV UUID RqWMOG-wCJJ-deu4-dIgv-c5hI-Bsqa-FHgh4E
LV Write Access read/write
LV Creation host, time masterdb, 2020-05-13 22:42:45 +0800
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
... # 查看方法二:使用lvscan查看逻辑卷
[root@masterdb ~]# lvscan
ACTIVE '/dev/VG_TEST/lv_test' [1.00 GiB] inherit
ACTIVE '/dev/centos/mysql' [<45.00 GiB] inherit
ACTIVE '/dev/centos/swap' [<3.73 GiB] inherit
ACTIVE '/dev/centos/home' [10.00 GiB] inherit
ACTIVE '/dev/centos/root' [10.00 GiB] inherit # 查看方法三:使用lvs查看逻辑卷
[root@masterdb ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_test VG_TEST -wi-a----- 1.00g
home centos -wi-ao---- 10.00g
mysql centos -wi-ao---- <45.00g
root centos -wi-ao---- 10.00g
swap centos -wi-ao---- <3.73g
创建完lv之后,格式化挂载即可使用
# 创建文件系统
[root@masterdb ~]# mkfs.ext3 /dev/VG_TEST/lv_test
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=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: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done # 创建挂载点
[root@masterdb ~]# mkdir /test
# 挂载文件系统
[root@masterdb ~]# mount /dev/VG_TEST/lv_test /test
# 确认结果
[root@masterdb ~]# df –h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 10G 4.1G 5.9G 42% /
...
/dev/mapper/VG_TEST-lv_test 976M 1.3M 924M 1% /test
(5.2)扩容逻辑卷
使用如下命令进行扩容
# 使用lvextend扩容lv,+SIZE代表增加的空间
lvextend -L +SIZE lv_device
# 调整文件系统的大小
resize2fs device lv_device
接下来演示使用对逻辑卷lv_test扩容500M。
扩容前文件磁盘大小如下:
进行扩容操作:
# 对lv进行扩容,增加500M空间
[root@masterdb ~]# lvextend -L +500M /dev/VG_TEST/lv_test
Size of logical volume VG_TEST/lv_test changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
Logical volume VG_TEST/lv_test successfully resized.
之后查看磁盘大小,未发生改变:
调整文件系统的大小:
# 使用resize2fs调整文件系统的大小
[root@masterdb ~]# resize2fs /dev/VG_TEST/lv_test
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/VG_TEST/lv_test is mounted on /test; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/VG_TEST/lv_test is now 390144 blocks long.
确认磁盘大小已经发生了改变
【完】
Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理的更多相关文章
- Linux的一些简单命令(四)-用户和组账户管理
linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源.系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰 1.保存用户信息的文件:/etc/ ...
- Linux LVM学习总结——创建卷组VG
在Linux平台如何创建一个卷组(VG)呢?下面简单介绍一下卷组(VG)的创建步骤.本文实验平台为Red Hat Enterprise Linux Server release 6.6 (Santia ...
- Linux LVM学习总结——删除卷组VG
在Linux系统中,如何删除一个卷组(VG)呢? 下面我总结了一下如何删除卷组(VG)的具体步骤,仅供参考,如有不足,敬请指出.谢谢!在下面的例子中,我想删除卷组VolGroup05. 步骤1: 查看 ...
- k8s系列---存储卷pv/pvc。configMap/secert
因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...
- linux下查看cpu物理个数和逻辑个数 - chw1989的专栏 - 博客频道 - CSDN.NET
body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLi ...
- Linux物理磁盘扩容流程
1. 插入硬盘前,查看现有硬盘情况 (1)命令:fdisk -l 说明:fdisk -l 查看设备的所有分区 (2)命令:df -h 说明:df 列出文件系统的整体磁盘使用量 2. 断电插入硬盘后,重 ...
- 物理CPU、物理核跟逻辑核的区分
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术 ,所以您的电脑是双核的. 一 概念① 物理CPU 实际Server中插槽上的CPU个数 ...
- CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket
当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个术语搞混淆:物理 CPU.逻辑 CPU. ...
- SQL Server中STATISTICS IO物理读和逻辑读的误区
SQL Server中STATISTICS IO物理读和逻辑读的误区 大家知道,SQL Server中可以利用下面命令查看某个语句读写IO的情况 SET STATISTICS IO ON 那么这个命令 ...
随机推荐
- Numpy学习-(2)
我学习numpy过程的记录 1. 切片和索引 (1) 两种切片方式示例: (2) 多维数组: import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5 ...
- linux之cat 操作
1.查看或创建 cat 1.txt #如果目录有这个文件则会打开查看,没有则会创建 2.压缩空白 cat 1.txt 我是第一行 我是第二 行 cat -bs 1.txt # 变成 cat 1.txt ...
- 散列表和JAVA中的hash
引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...
- DataTable 与XML 交互
一.将DataTable的内容写入到XML文件中 /// <summary> /// 将DataTable的内容写入到XML文件中 /// </summary> /// < ...
- PostMan接口测试(很全面的接口测试教程)
一:理论部分 1. 前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性.而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上 ...
- spring源码阅读笔记09:循环依赖
前面的文章一直在研究Spring创建Bean的整个过程,创建一个bean是一个非常复杂的过程,而其中最难以理解的就是对循环依赖的处理,本文就来研究一下spring是如何处理循环依赖的. 1. 什么是循 ...
- 5. 配置项:rule_files
prometheus配置文件内容: global: # 默认情况下抓取目标的频率. [ scrape_interval: <duration> | default = 1m ] # 抓取超 ...
- 总结php删除html标签和标签内的内容的方法
来源:https://www.cnblogs.com/shaoguan/p/7336984.html 经常扒别人网站文章的坑们:我是指那种批量式采集的压根不看内容的:少不了都会用到删除html标签的函 ...
- 让webpack打包支持ES7的async/await语法
npm install --save-dev babel-plugin-transform-runtime npm install --save babel-runtime .babelrc配置 { ...
- (转)logback配置详解
找到一篇很详细的关于logback配置的介绍: 贴上原文链接:logback使用配置详解 1.介绍 Logback是由log4j创始人设计的另一个开源日志组件,它当前分为下面下个模块: logback ...