1.LVM 逻辑卷概述
随着企业业务的增加,文件系统负载加大,很可能导致空间不足,用传统的分区方式管理磁盘,得把现有的分区删除,然后重新规划新的存储方案,因此我们需要一种管理机制,可以帮我们动态管理存储,而 LVM 就可以提供这种功能。
LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM 适合管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。
下面是关于 LVM的几个概念。
- 物理卷(PV):物理卷是 LVM 的最底层概念,是 LVM 的逻辑存储块,物理卷与磁盘分区是逻辑的对应关系。多个逻辑卷可以组合或拆分,实现容量扩充或缩减。LVM 提供的命令可以将分区转化成物理卷,通过组合生成卷组。
- 卷组(VG):卷组时 LVM 逻辑概念上的磁盘设备,通过单个或多个 PV 组合生成的。
- 物理长度(PE):物理长度为 PV 合成 VG 后,所划分的最小存储单元,PE 默认为 4MB。
- 逻辑卷(LV):逻辑卷是 LVM 逻辑意义分区,我们可以指定从卷组中分多少容量来创建逻辑卷,最后将此逻辑卷挂载使用。
下面是逻辑卷分区的一些命令解释:
- pvcreate
描述:使用 LVM 对磁盘或分区进行初始化。
用法:pvcreate [选项] 物理卷 [物理卷…]
例:
pvcreate /dev/sdc2 /dev/sde
pvcreate /dev/sdb{1,2,3}
- vgcreate
描述:创建卷组。
用法:vgcreate [选项] 卷组名 物理设备路径 [物理设备路径…]
例:
vgcreate test_vg1 /dev/sdb1 /dev/sdb2
vgcreate test_vg2 -s 16M /dev/sdb3 /dev/sdb4
#-s表示指定 PE 大小为 16MB
- lvcreate
描述:从卷组中提取存储空间,创建逻辑卷。
用法:lvcreate [选项] 卷组名或路径 [物理卷路径]
选项: - -l:指定使用多少个卷组中的 PE 创建逻辑卷,PE 容量在创建卷组时已定
- -L:直接指定逻辑卷容量大小
- -n:指定逻辑卷名
例:
lvcreate -L 2G -n test_lv1 test_vg1
#从卷组 test_vg1 中取 2G 创建名为 test_lv1 的逻辑卷
lvcreate -l 200 -n test_lv2 test_vg2
#使用 200 个 PE 创建名为 test_lv2 的逻辑卷
lvcreate -L 2G -n test_lv3 test_vg1 /dev/sdb2
#指定 test_lv3 这个逻辑卷使用 test_vg1 下的/dev/sdb2创建
2. 创建 LVM 分区实例
使用之前 sdb 这块磁盘创建两个分区,用这两个创建一个名为 test_vg 的卷组,最后从卷组中创建两个大小为 1G 的逻辑卷,名为 test_web、test_data。
- 使用 fdiask 创建分区
[root@localhost ~]# fdisk -l
...
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 1305 8377897+ 5 Extended
#这里已有一个主分区和一个扩展分区,下面将扩展分区创建一个逻辑分区,并修改分区标签LVM
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l #l 创建逻辑分区
First cylinder (263-1305, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):+2G
#穿件 sdb5 逻辑分区大小为2G
Command (m for help): t
Partition number (1-5): 5 #指定分区编号sdb5
Hex code (type L to list codes): 8e #改变分区 id 为 LVM
Changed system type of partition 5 to 8e (Linux LVM)
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 1305 8377897+ 5 Extended
/dev/sdb5 263 524 2104483+ 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
partprobe /dev/sdb
- 用
pvcreate
创建物理卷并使用pvdisplay
查看结果
[root@localhost ~]# pvcreate /dev/sdb{1,5}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb5" successfully created
[root@localhost ~]# pvdisplay
"/dev/sdb1" is a new physical volume of "2.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID GVq0p6-LA0y-zsVA-NAK4-wyan-qB74-0ajhqM
"/dev/sdb5" is a new physical volume of "2.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb5
VG Name
PV Size 2.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID RU8NUI-1gkC-gaMW-ubHp-LDAz-8xS4-6nbO9J
- 使用
vgcreate
创建卷组并使用vgdisplay
查看结果
[root@localhost ~]# vgcreate test_vg /dev/sdb{1,5}
Volume group "test_vg" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name test_vg
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 4.01 GiB #卷组大小
PE Size 4.00 MiB #PE 大小
Total PE 1026
Alloc PE / Size 0 / 0
Free PE / Size 1026 / 4.01 GiB
VG UUID vVhxaV-sX5z-52Sd-vj9N-8jre-CaXZ-gXeFM6
- 使用
lvcreate
创建逻辑卷,lvdisplay
查看结果
[root@localhost ~]# lvcreate -n test_web -L 1G test_vg
Logical volume "test_web" created
[root@localhost ~]# lvcreate -n test_data -L 1G test_vg
Logical volume "test_data" created
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/test_vg/test_web
LV Name test_web
VG Name test_vg
LV UUID Y2B4Eh-fraF-1Szh-1gov-kyCc-vUMi-1ks8cz
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-06-13 07:28:27 -0700
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:0
--- Logical volume ---
LV Path /dev/test_vg/test_data
LV Name test_data
VG Name test_vg
LV UUID NIF17d-8Hy0-er6o-Eaus-efks-1xS7-XMlXkJ
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-06-13 07:28:41 -0700
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:1
- 格式化并挂载
[root@localhost ~]# mkfs.ext4 /dev/test_vg/test_web
[root@localhost ~]# mkfs.ext4 /dev/test_vg/test_data
[root@localhost ~]# mkdir -p /test/{web,data}
[root@localhost ~]# cat >> /etc/fstab <<EOF
> /dev/test_vg/test_web /test/web/ ext4 defaults 0 0
> /dev/test_vg/test_data /test/data/ ext4 defaults 0 0
> EOF
[root@localhost test]# mount -a
[root@localhost test]# df -h #查看挂载结果
3.修改 LVM 分区容量
下面使用lvextend
命令调整逻辑卷大小。调整后使用ext4_growfs
命令更新文件系统大小,方法如下:
[root@localhost test]# lvextend -L +1G /dev/test_vg/test_data
Extending logical volume test_data to 2.00 GiB
Logical volume test_data successfully resized
[root@localhost test]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
test_data test_vg -wi-ao---- 2.00g
test_web test_vg -wi-ao---- 1.00g
[root@localhost test]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.9G 14G 18% /
tmpfs 491M 80K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/mapper/test_vg-test_web 1008M 34M 924M 4% /test/web
/dev/mapper/test_vg-test_data 1008M 34M 924M 4% /test/data
#这里系统文件大小还未变化
[root@localhost test]# resize2fs /dev/test_vg/test_data
#调整文件系统大小,使之生效
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/test_vg/test_data is mounted on /test/data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/test_vg/test_data to 524288 (4k) blocks.
The filesystem on /dev/test_vg/test_data is now 524288 blocks long.
[root@localhost test]# df -h #查看结果
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.9G 14G 18% /
tmpfs 491M 80K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/mapper/test_vg-test_web 1008M 34M 924M 4% /test/web
/dev/mapper/test_vg-test_data 2.0G 34M 1.9G 2% /test/data
此外当卷组没有足够空间时,可以再加磁盘然后fdisk
分区,将新分区做成物理卷,然后通过vgextend
将新的物理卷追加至现有的卷组中,最后lvextend
调整逻辑卷大小,以下演示追加新的物理卷至已有卷组中。
fdisk /dev/sdb #分新区
pvcreate /dev/sdb6 #将分区做成物理卷 PV
vgextend test_vg /dev/sdb6 #将新的 PV 加到 test_vg 卷中
vgdisplay test_vg #查看结果
lvextend -L 2G /dev/test_vg/test_data #将逻辑卷扩充2G
resize2fs /dev/test_vg/test_data #调整文件大小,使之生效
df -h #查看结果
4.删除 LVM 分区
删除 LVM 分区的顺序与创建时相反,即先卸载文件系统、删除逻辑卷、删卷组,删物理卷。下载文件系统时应更新/etc/fstab
文件。
下面是删除 LVM 分区命令,步骤:
umount /dev/test_vg/test_web
umount /dev/test_vg/test_data
lvremove /dev/test_vg/test_web
lvremove /dev/test_vg/test_data
vgremove /dev/test_vg
pvremove /dev/sdb{1,5,6}