LVM 磁盘管理与在线扩容
不上 LVM 的服务器都是耍流氓
在线扩容
通过 LVM 扩容的时候,
- 被扩容的逻辑卷
不需要重新格式化
- 被扩容的逻辑卷
不需要被 umount
- 被扩容的逻辑卷上的业务
不受影响
在执行 resize2fs 或 xfs_growfs
的时候,会有一定等待时间,属于正常显现。
虽然扩容还是很安全的,不过,有条件的话,最好还是进行必要的备份
扩容步骤
- 创建物理卷
fdisk /dev/xvdk
pvcreate /dev/xvdk1
- 虚拟卷组扩容
vgextend vg_groupname /dev/xvdg1
- 逻辑卷扩容
- ext4 扩容
lvextend -l +100%FREE /dev/vg_groupname/lv_name
- 执行扩容
- ext4:
resize2fs /dev/vg_groupname/lv_name
- xfs :
xfs_growfs /dev/vg_groupname/lv_name
扩容案例
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
| [root@localhost ~]# vgextend vg_groupname /dev/xvdk1
No physical volume label read from /dev/xvdk1
Physical volume "/dev/xvdk1" successfully created
Volume group "vg_groupname" successfully extended
[root@localhost ~]# lvextend -l +100%FREE /dev/vg_groupname/lv_name
Extending logical volume lv_name to 1.95 TiB
Logical volume lv_name successfully resized
[root@localhost ~]# resize2fs /dev/vg_groupname/lv_name
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_groupname/lv_name is mounted on /data; on-line resizing required
old desc_blocks = 94, new_desc_blocks = 125
Performing an on-line resize of /dev/vg_groupname/lv_name to 524279808 (4k) blocks.
The filesystem on /dev/vg_groupname/lv_name is now 524279808 blocks long.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 7.1G 40G 16% /
tmpfs 7.8G 12K 7.8G 1% /dev/shm
/dev/mapper/vg_groupname-lv_name
2.0T 754G 1.1T 41% /data
/dev/mapper/3ddbbackvg-3ddbbacklv
1.9T 1.3T 574G 69% /data1
/dev/xvda1 485M 32M 428M 7% /boot
|
创建 LVM 卷
格式化硬盘
在格式化硬盘后,需要将分区类型设置为 LVM 。
LVM 类型的编号为: 8e
1
2
3
4
| Command (m for help): t # 使用 t 修改分区类型
Selected partition 1 # 选择 分区
Hex code (type L to list codes): 8e # 8e表示为LVM # 设置分区
Changed system type of partition 1 to 8e (Linux LVM)
|
创建 LVM 卷
创建物理卷
1
2
| [root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
|
创建逻辑卷组
1
2
| [root@localhost ~]# vgcreate vgdata /dev/sdb1
Volume group "vg_groupname" successfully created
|
创建逻辑卷
逻辑卷被创建之后,和普通分区一样,需要格式化后才能被挂载
1
2
3
4
| [root@localhost ~]# lvcreate -L 1G -n lv_data1 vgdata
Logical volume "lv_name" created.
[root@localhost ~]# mkfs.ext4 /dev/mapper/vg_groupname-lv_name
[root@localhost ~]# mount /dev/mapper/vg_groupname-lv_name /mnt
|
向逻辑卷组中加入物理卷
vgextend vg_groupname /dev/sdb1 /dev/sdc1 /dev/sdd1
1
2
3
4
5
6
7
8
| [root@localhost ~]# vgextend VolGroup /dev/sdb2
Volume group "VolGroup" successfully extended
You have new mail in /var/spool/mail/root
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a--u 39.51g 0
/dev/sdb1 vgdata lvm2 a--u 5.36g 5.26g
/dev/sdb2 VolGroup lvm2 a--u 4.63g 4.63g
|
从逻辑卷组中删除物理卷
vgreduce vg_groupname /dev/sdb1 /dev/sdc1 /dev/sdd1
[root@localhost ~]# vgreduce VolGroup /dev/sdb2
Removed "/dev/sdb2" from volume group "VolGroup"
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a--u 39.51g 0
/dev/sdb1 vgdata lvm2 a--u 5.36g 5.26g
/dev/sdb2 lvm2 ---- 4.63g 4.63g
调整逻辑卷大小
容量增加至固定大小 1G : lvextend -L 1G /dev/vg_groupname/lv_name
容量额外增加 300M : lvextend -L +300M /dev/vg_groupname/lv_name
容量减小至固定大小 : lvreduce -L 500M /dev/vg_groupname/lv_name
容量额外减少 200M : lvreduce -L -200M /dev/vg_groupname/lv_name
按剩余百分增加 : lvextend -l +100%FREE /dev/vg_groupname/lv_name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| [root@localhost ~]# lvextend -L 300M /dev/vgdata/lv_data1
Size of logical volume vgdata/lv_data1 changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume lv_data1 successfully resized.
[root@localhost ~]# lvextend -L +300M /dev/vgdata/lv_data1
Size of logical volume vgdata/lv_data1 changed from 300.00 MiB (75 extents) to 600.00 MiB (150 extents).
Logical volume lv_data1 successfully resized.
[root@localhost ~]# resize2fs /dev/vgdata/lv_data1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vgdata/lv_data1 to 614400 (1k) blocks.
The filesystem on /dev/vgdata/lv_data1 is now 614400 blocks long.
[root@localhost ~]# lvreduce -L 500M /dev/vgdata/lv_data1
WARNING: Reducing active logical volume to 500.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgdata/lv_data1? [y/n]: y
Size of logical volume vgdata/lv_data1 changed from 600.00 MiB (150 extents) to 500.00 MiB (125 extents).
Logical volume lv_data1 successfully resized.
You have new mail in /var/spool/mail/root
[root@localhost ~]# lvreduce -L -50M /dev/vgdata/lv_data1
Rounding size to boundary between physical extents: 48.00 MiB.
WARNING: Reducing active logical volume to 452.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
|
应用扩容方案
- ext4:
resize2fs /dev/vg_groupname/lv_name
- xfs :
xfs_growfs /dev/vg_groupname/lv_name
删除 LVM 卷
销毁一个 LVM 卷的时候,顺序与创建的时候相反
删除逻辑卷
1
2
3
| [root@localhost ~]# lvremove /dev/vg_groupname/lv_name
Do you really want to remove active logical volume lv_data1? [y/n]: y
Logical volume "lv_data1" successfully removed
|
删除逻辑卷组
1
2
| [root@localhost ~]# vgremove vg_groupname
Volume group "vgdata" successfully removed
|
删除物理卷
1
2
| [root@localhost ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped
|
显示 LVM 卷信息
显示物理卷信息
pvdisplay
pvdisplay /dev/sdb1
[root@s001-bastion ~]# pvdisplay /dev/sdc1
--- Physical volume ---
PV Name /dev/sdc1
VG Name vgtest
PV Size 2.00 GiB / not usable 3.32 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 511
Free PE 0
Allocated PE 511
PV UUID AkXkkl-aYCb-Incz-lAVg-PP4Y-Yycw-r1a5an
显示逻辑卷组信息
vgdisplay
vgdisplay vg_groupname
[root@s001-bastion ~]# vgdisplay vg_groupname
--- Volume group ---
VG Name vg_groupname
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size 3.99 GiB
PE Size 4.00 MiB
Total PE 1021
Alloc PE / Size 1021 / 3.99 GiB
Free PE / Size 0 / 0
VG UUID FxKZRi-mkjD-OVJf-dh1k-VN0w-GjzA-4DVxf7
显示逻辑卷组信息
lvdisplay
lvdisplay /dev/vg_groupname/lv_name
[root@s001-bastion ~]# lvdisplay /dev/vg_groupname/lv_name
--- Logical volume ---
LV Path /dev/vg_groupname/lv_name
LV Name lv_name
VG Name vg_groupname
LV UUID k2I7oG-y3q9-1Dmc-MZ5v-D2it-NBeK-jVpOE7
LV Write Access read/write
LV Creation host, time s001-bastion, 2017-08-16 16:57:29 +0800
LV Status available
# open 1
LV Size 3.99 GiB
Current LE 1021
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
记一次 lvm 在线扩容
之前案例不同, 这次实在 Aliyun 上直接 扩容原磁盘大小 , 而非新加磁盘。
因此,核心点在于如何对 物理卷
扩容。
需要注意的是: 物理卷扩容并
不需要和普通分区一样,先删除再重建
。 直接 pvresize
即可。
命令总结
1
2
3
| # pvresize /dev/vdb
# lvextend -l +100%FREE /dev/mapper/docker-bootstrap
# resize2fs /dev/mapper/docker-bootstrap
|
命令记录
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# df -h |grep boot
/dev/mapper/docker-bootstrap 40G 2.2G 36G 6% /var/lib/docker
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# pvresize --help
pvresize: Resize physical volume(s)
pvresize
[--commandprofile ProfileName]
[-d|--debug]
[-h|-?|--help]
[--reportformat {basic|json}]
[--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE]
[-t|--test]
[-v|--verbose]
[--version]
PhysicalVolume [PhysicalVolume...]
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# pvchange --help^C
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# pvresize /dev/vdb
Physical volume "/dev/vdb" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# pvdisplay
--- Physical volume ---
PV Name /dev/vdb
VG Name docker
PV Size 300.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 76799
Free PE 51204
Allocated PE 25595
PV UUID Cqxbco-9dJ7-uOot-SxRm-gUft-aVM8-Dj2ilE
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# lvextend -l ^C
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# # lvextend -l +100%FREE /dev/mapper/docker-bootstrap
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]#
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# # lvextend -l +100%FREE /dev/mapper/docker-bootstrap
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# lvextend -l +100%FREE /dev/mapper/docker-bootstrap
Size of logical volume docker/bootstrap changed from 40.00 GiB (10239 extents) to 240.01 GiB (61443 extents).
Logical volume docker/bootstrap successfully resized.
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# resize2fs /dev/mapper/docker-bootstrap
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/docker-bootstrap is mounted on /var/lib/docker; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 31
The filesystem on /dev/mapper/docker-bootstrap is now 62917632 blocks long.
[root@iZ2ze0ky5ovykfx08vvmsxZ ~]# df -h |grep /dev/mapper/docker-bootstrap
/dev/mapper/docker-bootstrap 237G 2.2G 224G 1% /var/lib/docker
|