LVM Usage

概述

之前文章大致做了LVM简介,推荐在使用本地存储时,使用LVM,那如何使用LVM呢?

这里从LVM相关组件分析其常用命令,最后给出创建一个LVM volume的步骤。

物理卷相关

物理卷 - PhysicalVolume

LVM管理的最底层就是一个个物理卷,与之相关的命令基本都以pv开始,大致有如下这些:

1
2
root@ubuntu:~# pv
pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan

创建

pvcreate - initialize a disk or partition for use by LVM

从物理盘或者一个分区初始化一个PV,这个PV之后会被LVM用来创建VG;

删除

pvremove - remove a physical volume

删除一个PV,之后LVM将不认为该设备为PV;

显示

pvs - report information about physical volumes

展示系统PVS的信息,可以指定输出格式等;

pvdisplay - display attributes of a physical volume

展示一个/多个PVS的属性信息,可以指定输出格式等;

其他

pvscan - scan all disks for physical volumes

扫描整个系统中支持LVM块设备的PVS;

pvresize - resize a disk or partition in use by LVM2

调整LVM使用的一个PV的大小,前提是它对应的物理设备大小可以resize;

pvchange - change attributes of a physical volume

修改一个PV的属性;

卷组相关

卷组 - VolumeGroup

卷组是LVM基于PVS创建的一个块设备集合,类似于有的存储中说的Volume Pool,它综合了底层所有PVS的存储,做了统一的配置,比如:分配块大小等;

与卷组相关的命令都是以vg开始,大致如下:

1
2
3
root@ubuntu:~# vg
vgcfgbackup vgchange vgconvert vgdisplay vgextend vgimportclone vgmknodes vgremove vgs vgsplit
vgcfgrestore vgck vgcreate vgexport vgimport vgmerge vgreduce vgrename vgscan

创建

vgcreate - create a volume group

基于之前创建的PVS创建一个VG,这里原则上选择同质物理盘创建的PVS;

可以指定每次在PV上申请空间的Extent size(-s, –physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE])

删除

vgremove - remove a volume group

删除一个VG;若VG上有LV,则会有相关提示;

显示

vgs - report information about volume groups

显示系统中有的VGS信息;

vgdisplay - display attributes of volume groups

显示VGS的详细属性信息;

其他

vgextend - add physical volumes to a volume group

添加PVS到VG中,扩容VG;

vgreduce - reduce a volume group

从VG中删除没有使用的PVS,若PV已经分配了PE,则命令失败;

vgchange - change attributes of a volume group

修改一个VG的属性;

逻辑卷相关

逻辑卷 - LogicalVolume

逻辑卷是最终面向用户使用的块设备,用户可以像使用普通磁盘/分区一样的使用它;同时逻辑卷支持很多普通磁盘没有的特性,比如:mirror,stripe,raid,thin等;

与逻辑卷相关的命令都是以lv开始,大致如下:

1
2
3
root@ubuntu:~# lv
lvchange lvcreate lvextend lvmchange lvmconfig lvmdump lvmpolld lvmsar lvremove lvresize lvscan
lvconvert lvdisplay lvm lvmconf lvmdiskscan lvmetad lvmsadc lvreduce lvrename lvs

创建

lvcreate - create a logical volume in an existing volume group

从一个创建好的VG里创建一个LV,可以指定LV的很多属性,比如:size,stripe,raid,thin等;

删除

lvremove - remove a logical volume

删除一个LV;若该LV系统正在使用,则删除失败;

显示

lvs - report information about logical volumes

显示系统LVS的基本信息;

lvdisplay - display attributes of a logical volume

显示一个LV的详细属性信息;

其他

lvextend - extend the size of a logical volume

扩容一个LV的size;

lvresize - resize a logical volume

调整一个LV的size;可以扩容,可以缩容,但缩容需谨慎,可能导致数据丢失;

lvchange - change attributes of a logical volume

修改一个LV的属性;

lvscan - scan (all disks) for Logical Volumes

扫描系统获取所有LV的 active,snapshot/origin,size等信息;

创建LVM Volume步骤

创建PV

使用fdisk创建LVM Type的磁盘分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@ceph0 ~]# fdisk /dev/sdj
Command (m for help): n
Partition number (1-128, default 1):
First sector (34-7814037134, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-7814037134, default 7814037134):
Created partition 1


Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 15
Changed type of partition 'Linux filesystem' to 'Linux LVM'

Command (m for help): p

Disk /dev/sdj: 4000.8 GB, 4000787030016 bytes, 7814037168 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
Disk label type: gpt


# Start End Size Type Name
1 2048 7814037134 3.7T Linux LVM


Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@ceph0 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdi1 lvm2 --- 3.64t 3.64t
/dev/sdj1 lvm2 --- 3.64t 3.64t
/dev/sdk1 lvm2 --- 3.64t 3.64t
/dev/sdl1 lvm2 --- 3.64t 3.64t


[root@ceph0 ~]# pvdisplay /dev/sdi1
--- Physical volume ---
PV Name /dev/sdi1
VG Name volgroup-sata
PV Size 3.64 TiB / not usable 2.82 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 953861
Free PE 953605
Allocated PE 256
PV UUID rGiKHq-yem2-DUSH-F5AM-4jxE-eZvv-cF1YlG

创建VG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@ceph0 ~]# vgcreate volgroup-sata /dev/sdi1 /dev/sdj1 /dev/sdk1
Volume group "volgroup-sata" successfully created
[root@ceph0 ~]#
[root@ceph0 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
volgroup-sata 3 0 0 wz--n- 10.92t 10.92t


[root@ceph0 ~]# vgdisplay volgroup-sata
--- Volume group ---
VG Name volgroup-sata
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 10.92 TiB
PE Size 4.00 MiB
Total PE 2861583
Alloc PE / Size 256 / 1.00 GiB
Free PE / Size 2861327 / 10.92 TiB
VG UUID 7rEMc5-pkzR-ckFM-8Yve-cATM-uy9B-buMcR6

创建LV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@ceph0 ~]# lvcreate -n lv1 -L 1G volgroup-sata
Logical volume "lv1" created.
[root@ceph0 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 volgroup-sata -wi-a----- 1.00g


[root@ceph0 ~]# lvdisplay volgroup-sata/lv1
--- Logical volume ---
LV Path /dev/volgroup-sata/lv1
LV Name lv1
VG Name volgroup-sata
LV UUID SWp2Lr-kGLC-8USu-3jqu-Bwpd-yN3D-wMGFGn
LV Write Access read/write
LV Creation host, time ceph0, 2018-01-26 16:19:17 +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 256
Block device 253:3

使用LV

可以像使用系统物理device一样,使用LogicalVolume;

1
2
[root@ceph0 ~]# mkfs.ext4 /dev/volgroup-sata/lv1
[root@ceph0 ~]# mount /dev/volgroup-sata/lv1 /mnt/
支持原创