Linux系统存储结构LVM/PV/VG/LV

2022-6-11 542 6/11

Windows系统存储结构

windows系统新加一块硬盘后,需要进行格式化,再进行盘符分配如D盘、确定文件系统如ntfs后格式化,再分区,此时磁盘在操作系统中变成了卷,后期还可以方便的对卷进行分割和合并等操作,这一切都是在图形界面中进行,方便快捷,如下图:

Linux系统存储结构LVM/PV/VG/LV

如图,四块磁盘,一块1T,一块512G,两块各2T,其中两块2T的做了RAID0,此时在系统的磁盘管理器就识别为三个物理卷,即磁盘0/1/2,之后根据需求进行分区划分为逻辑卷,如磁盘0分为两个区并分配盘符C和F,并分配文件系统ntfs后格式化,之后C和F就成为系统中识别的数据盘可以正常使用了。

Linux系统存储结构

windows系统由于友好的图形界面,使用起来比较方便,但是linux系统就没有这么友好了,需要通过命令行的方式进行分区、配置文件系统等。

Linux系统中所有对象都以文件的方式存储,包括硬盘,如我们将加入一个硬盘到linux系统中,经过fdisk格式化成一个分区后,在系统中这个硬盘会生成一个如dev/sda的文件。

存储结构

Linux系统存储结构LVM/PV/VG/LV

如图,linux中同样也有很多存储系统的组件,分别是LVM、PV、VG、LV以及文件系统如EXT、XFS等。

LVM

即逻辑卷管理,Logical Volume Manager,相当于windows中的磁盘管理,它将几个实体的partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。

PE/LE

PE即物理区块,Physical Extent,可以理解为可分割容量的最小容量单位,LE同理,不过随着CentOS6.0使用LVM2后,这个限制就不存在了。

PV

即物理卷,Physical Volume,LVM把操作系统识别到的物理磁盘加上了一个识别码然后改了个叫法,物理卷可以是一个磁盘,也可以是Raid后的逻辑硬盘。

VG

即卷组,Volume Group, 就是 LVM 将多个PV组合起来的大的虚拟磁盘。

LV

即逻辑卷,将VG划分为多个LV之后,划分之后的LV进行格式化和分配文件系统后就可以挂载给使用了。

给linux系统加硬盘的步骤

Linux系统存储结构LVM/PV/VG/LV

如图,我们可以将4块硬盘sda、sdb、sdc、sdd,分成7个物理卷,其中sdc分三个,然后分为两个卷组,上面共分为五个逻辑卷:

1.创建物理卷

创建物理卷可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷,两者略有区别:

①使用磁盘直接创建物理卷使用fdisk格式化后使用pvcreate直接创建。

②使用磁盘分区创建物理卷,使用fdisk分区并格式化后,默认分区id为83,修改为8e后使用pvcreate创建。

2.创建卷组

使用vgcreate创建卷组、使用vgextend扩容卷组。

3.创建逻辑卷

使用lvcreate创建逻辑卷、使用lvextend扩容逻辑卷。

4.创建文件系统并挂载给指定挂载点

使用mkfs为lv创建文件系统,使用mkdir创建挂载点,使用mount挂载lv卷到文件挂载点。

※如果想增大挂载点空间,需要使用lvextend扩容逻辑卷,扩容后使用resize2fs调整文件系统大小才算扩容完成。

操作示例

以下详细的操作过程的示例,转自CSDN-满格

1.创建物理卷

创建物理卷是创建逻辑卷的第一步,创建物理卷相关命令有:

 

# pvcreate用于创建物理卷
pvcreate /dev/sdb

 

# pvdisplay、pvsca、pvs用于查看物理卷
pvdisplay
pvs
pvscan

 

1.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 ~]#

 

1.2使用磁盘分区创建物理卷

磁盘分区之后,磁盘id为83,如果要使用逻辑卷管理,需要将id改为8e,才能创建物理卷。

Linux系统存储结构LVM/PV/VG/LV

分区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”列出可以选择的修改代码

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,最终结果如下:

Linux系统存储结构LVM/PV/VG/LV

接着进行创建物理卷(PV)即可:

 

[root@masterdb ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
[root@masterdb ~]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created.

 

2.创建、扩容卷组

2.1创建卷组

 

# 使用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

 

2.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容量都发生了变化
Linux系统存储结构LVM/PV/VG/LV

3.创建、扩容逻辑卷

3.1创建逻辑卷

 

# 使用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

 

3.2扩容逻辑卷

使用如下命令进行扩容

 

# 使用lvextend扩容lv,+SIZE代表增加的空间
lvextend -L +SIZE lv_device

# 调整文件系统的大小
resize2fs device lv_device

 

接下来演示使用对逻辑卷lv_test扩容500M。

扩容前文件磁盘大小如下:
Linux系统存储结构LVM/PV/VG/LV

进行扩容操作:

 

# 对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.

之后查看磁盘大小,未发生改变:
Linux系统存储结构LVM/PV/VG/LV

调整文件系统的大小:

 

# 使用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系统存储结构LVM/PV/VG/LV

- THE END -

Tenkms

12月01日00:09

最后修改:2023年12月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论