一. LVM简介
二. LVM基本术语
三. 安装LVM
四. 创建和管理LVM**
- 创建PV
- 创建VG
- 创建LV
- LV格式化及挂载
五. ECS上LVM扩容实战(磁盘扩容)
一. 简介
LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理磁盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过逻辑卷来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
二. LVM基本术语
物理磁盘
物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/xvda、/dev/vdb等等,是存储系统最低层的存储单元。
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
LVM使用分层结构,如下图所示:
三. 安装LVM
3.1 检查系统内是否安装了LVM管理工具
# rpm -qa |grep lvm
lvm2-2.02.143-12.el6_9.1.x86_64
lvm2-libs-2.02.143-12.el6_9.1.x86_64
lvm2-devel-2.02.143-12.el6_9.1.x86_64注:目前线上的镜像基本都集成了该工具
3.2 如果没有安装,可以使用yum的方式安装
# yum -y install lvm2*
四. 创建和管理LVM
4.1 创建一个 LVM 分区
fdisk的参数(n/p/1/回车/回车/t/8e/w)
# fdisk /dev/xvdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa2228253
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527):
Using default value 6527
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa2228253
Device Boot Start End Blocks Id System
/dev/xvdb1 1 6527 52428096 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
注:8e代表是lvm的分区
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
4.2 创建 PV
# pvcreate /dev/xvdb1
Physical volume "/dev/xvdb1" successfully created
查看 PV 信息,可以看到有 30G 的容量
# pvdisplay
--- NEW Physical volume ---
PV Name /dev/xvdb1
VG Name
PV Size 30.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID fuWBVL-laFd-0Bgm-q1TG-EzuP-xnet-7qwHEo
注:有些信息是后补的,因此可能会有前后信息不一致的情况,请见谅
使用下列命令可以删除物理卷:
# pvremove /dev/xvdb1
4.3 创建 VG
# vgcreate vg1 /dev/xvdb1
Volume group "vg1" successfully created
查看卷组信息
# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 0 / 0
从输出中,我们可以看见卷组的使用量/总量,物理卷给卷组提供空间,只要在这个卷组中还有可用空间,我们就可以创建/扩展逻辑卷。
使用下列命令删除卷组:
# vgremove vg1
4.4 创建 LV
# lvcreate -L 30G -n lv1 vg1
Volume group "vg1" has insufficient free space (7679 extents): 7680 required.
Free PE / Size 7679 / 30.00 GiB
VG UUID 7lh871-eolr-jXhX-OD3F-kwIo-s9nU-RtSwmh
vgdisplay看有30g,但是实际创建的时候报错了,
free PE 7679 * pe size 4M /1024=29.99 ,先创建一个29G的lv出来再扩展试下
4.5 扩容 LV
# vgdisplay (看下剩下多少)
可以看到还剩下1020M,添加1020M到lv1里面
# lvextend -L +1020M /dev/vg1/lv1
注:这个扩容是VG本身还有余量,给LV扩容余量而非物理磁盘的扩容
4.6 格式化+挂载 LVM 分区
# mkfs.ext4 /dev/vg1/lv1
挂载 LVM
# mount /dev/vg1/lv1 /lvm
查看容量信息
# df -h
五. ECS上LVM扩容实战(磁盘扩容)
5.1 控制台扩容磁盘(这里不做详细图示了)
ECS 控制台--实例列表--管理--本实例磁盘--更多--磁盘扩容
设置目标容量,确定扩容
扩容完成后需要控制台重启一下ecs实例才可以
注:如果是待挂载状态则挂载后系统内看到的就是扩容后的容量了
5.2 登陆扩容
#fdisk -l
注:查看一下磁盘信息,可以看到,数据盘已经扩容到50g,但是lvm分区还是30g
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa2228253
Device Boot Start End Blocks Id System
/dev/xvdb1 1 3916 31455238+ 8e Linux LVM
Disk /dev/mapper/vg1-lv1: 32.2 GB, 32208060416 bytes
255 heads, 63 sectors/track, 3915 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
因为是物理磁盘级别的扩容,因此需要卸载挂载的分区,并取消分区卷组的激活
# umount /lvm
# vgchange -an vg1
0 logical volume(s) in volume group "vg1" now active
注:取消激活后,可以尝试mount /dev/vg(tab键补充)就会发现已经没有vg的路径了
将扩容后的空闲磁盘创建一个分区出来
fdisk /dev/xvdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa2228253
Device Boot Start End Blocks Id System
/dev/xvdb1 1 3916 31455238+ 8e Linux LVM
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (3917-6527, default 3917):
Using default value 3917
Last cylinder, +cylinders or +size{K,M,G} (3917-6527, default 6527):
Using default value 6527
Command (m for help): p
Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa2228253
Device Boot Start End Blocks Id System
/dev/xvdb1 1 3916 31455238+ 8e Linux LVM
/dev/xvdb2 3917 6527 20972857+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
将新增的分区加到卷组里面
# vgextend vg1 /dev/xvdb2
Physical volume "/dev/xvdb2" successfully created
Volume group "vg1" successfully extended
查看卷组信息可以看到FREE PE多了出来
# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 50.00 GiB
PE Size 4.00 MiB
Total PE 12799
Alloc PE / Size 7679 / 30.00 GiB
Free PE / Size 5120 / 20.00 GiB
VG UUID 9dBOCJ-KiSM-r6vK-pICt-n2tQ-fqBT-SLluiM
扩容前重新激活一下逻辑卷
# vgchange -ay vg1
1 logical volume(s) in volume group "vg1" now active
将这20G空间扩容到逻辑卷上
# lvextend -L +20G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 30.00 GiB (7679 extents) to 50.00 GiB (12799 extents).
Logical volume lv1 successfully resized.
查看卷组信息,已经都分配完了
# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 8
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 50.00 GiB
PE Size 4.00 MiB
Total PE 12799
Alloc PE / Size 12799 / 50.00 GiB
Free PE / Size 0 / 0
VG UUID 9dBOCJ-KiSM-r6vK-pICt-n2tQ-fqBT-SLluiM
重置一下逻辑卷的大小并挂载
# mount /dev/vg1/lv1 /lvm
# resize2fs /dev/vg1/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg1/lv1 is mounted on /lvm; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/vg1/lv1 to 13106176 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 13106176 blocks long.
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 ext4 20G 18G 1.4G 93% /
tmpfs tmpfs 498M 0 498M 0% /dev/shm
/dev/mapper/vg1-lv1 ext4 50G 180M 47G 1% /lvm
# lvdisplay
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID 627piC-rDhg-M3eE-13XC-Ed8p-HCfs-PDY0c4
LV Write Access read/write
LV Creation host, time lvm, 2018-03-21 07:21:18 +0000
LV Status available
# open 0
LV Size 50.00 GiB
Current LE 12799
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
注:实际操作中如果df -h看不到扩容后的大小,看下resize2fs是不是有提示执行e2fsck的提示
# resize2fs /dev/vg1/lv1
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/vg1/lv1' first.
区别应是我前面挂载了所以直接resize成功,不挂载则需要检查一下磁盘信息
详情请阅读原文