一、简介

1 LVM LVM是 Logical Volume Manager (逻辑卷管理)的简写。 linux用户安装操作系统系统是遇到最头疼的问题就是如何正确评估个分区的大小。很多时候,随着系统不断的使用,需要不断的扩容。通过LVM,用户可以随时调整各分区的大小,轻松扩容。

2 基本概念

  • PV(Physical Volume) 物理卷 物理卷在逻辑卷管理中处于最底层,它可以试物理磁盘上的分区,也可以是整个物理磁盘,也可以是raid设备。

  • VG(Volume Group)卷组 卷组由一个或多个物理卷组成,卷组建立后,可以动态的增删物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以有多个卷组。

  • LV(Logical Volume)逻辑卷 逻辑卷建立在卷组之上,卷组中空闲的空间可以用来创建逻辑卷,多个逻辑卷可以属于同一个卷组。

  • PE(Physical Extent)物理块 LVM默认使用4MB的PE区块,而LVM的逻辑卷最多可以包含65534个PE(LVM1),也就是说逻辑卷的最大容量为256G(4MB*65534/1024)。PE是逻辑卷中最小的存储单元,所有的数据都是有PE来处理的。PE有点儿类似于文件系统中的block,调整PE的大小会影响到逻辑卷的最大容量。不过,在centos6以后,由于默认使用LVM2的格式,所以这个限制已经不存在了。

二、创建LVM逻辑卷分区的主要步骤

1 添加磁盘 2 分区(System ID 要选择Linux Lvm) 3 创建PV 4 创建VG 5 创建LV 6 格式化LV 7 挂载LV(将挂载信息写入/etc/fstab中) 8 逻辑卷扩容 8.1 LV的扩容 使用VG的Free空间扩容,完成后需要对文件系统扩容(resize2fs). 8.2 VG的扩容 (1)添加PV (2)通过扩展raid设备的容量实现对VG的间接扩容。 9 逻辑卷缩减 (1)缩减LV (2)缩减VG 10 删除LVM

三、操作过程

1 创建系统分区 选择磁盘/dev/sdb,将磁盘划分为一个分区sdb1,格式为Linux LVM。

#fdisk /dev/sdb

Command (m for help): n (创建新分区) Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p (选择创建主分区) Partition number (1-4, default 1): 1 (分区号选择1) First sector (2048-31457279, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279): Using default value 31457279 Partition 1 of type Linux and of size 15 GiB is set

Command (m for help):** p (查看已经创建的分区)** Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors Device Boot Start End Blocks Id System /dev/sdb1 2048 31457279 15727616 83 Linux (系统默认为83,即:Linux)

Command (m for help):** t (修改分区格式)** Selected partition 1 Hex code (type L to list all codes): 8e (8e为Linux LVM格式) Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors Device Boot Start End Blocks Id System /dev/sdb1 2048 31457279 15727616 8e Linux LVM

Command (m for help): w

2 创建PV

相关命令:pvcreate pvs pvdisplay pvscan

#pvcreate /dev/sdb1 (创建PV)

#pvdisplay "/dev/sdb1" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name
PV Size 10.00 GiB Allocatable NO PE Size 0
Total PE 0 Free PE 0 Allocated PE 0 PV UUID dZRM2W-X2Lz-I3Jz-i4S4-E8fN-BF4K-oZqhd3

#pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 10.00g 10.00g

#pvscan PV /dev/sdb1 lvm2 [10.00 GiB]

3 创建VG 相关命令 vgcreate vgs vgdisplay vgscan 一个分区、整个磁盘、raid都可以作为创建卷组的对象。

#vgcreate vg0 /dev/sdb1 /dev/sdc -s 64M Physical volume "/dev/sdc" successfully created Volume group "vg0" successfully created 使用分区/dev/sdb1 和 磁盘/dev/sdc 来创建vg,并设置PE大小为64M

#pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg0 lvm2 a-- 10.00g 10.00g /dev/sdc vg0 lvm2 a-- 10.00g 10.00g

#vgs VG #PV #LV #SN Attr VSize VFree vg0 2 0 0 wz--n- 19.99g 19.99g 上面知道:/dev/sdb1和/dev/sdb都是10G,所以vg0的大小为19.99G;

#vgdisplay vg0 --- Volume group --- VG Name vg0 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 19.99 GiB PE Size 64.00 MiB Total PE 320 Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB VG UUID m58K2q-eIsC-1Z3T-DySZ-cgKb-Sd3L-UbrW2z

4 创建LV、格式化LV、挂载LV

相关命令lvcreate、lvs、lvdisplay、lvscan

#lvcreate -L 8G -n lv1 vg0 Logical volume "lv1" created. 从vg0中分出8G的空间给lv1使用

#vgs VG #PV #LV #SN Attr VSize VFree vg0 2 1 0 wz--n- 19.99g 11.99g 由于分出了8G给lv1,所以VFree之剩下:11.99G

#lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv1 vg0 -wi-a----- 8.00g

#lvdisplay --- Logical volume --- LV Path /dev/vg0/lv1 LV Name lv1 VG Name vg0 LV UUID wevRbf-Iy3b-wPfa-mK4a-DFoq-A24w-8q5axT LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-09-08 09:58:34 +0800 LV Status available #open 0 LV Size 8.00 GiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto

  • currently set to 8192 Block device 253:3

使用ext3文件系统对LV进行格式化

#mkfs.ext3 /dev/vg0/lv1 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 524288 inodes, 2097152 blocks 104857 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done

将lv1挂载到/mnt/lv1目录下 #mkdir /mnt/lv1 #mount /dev/vg0/lv1 /mnt/lv1

#df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg0-lv1 ext3 7.8G 19M 7.4G 1% /mnt/lv1

五、LV扩容 1 使用剩余VG空间扩容

#vgs VG #PV #LV #SN Attr VSize VFree vg0 2 1 0 wz--n- 19.99g 11.99g 现在还有11.99G可用

#lvextend -L +3G /dev/vg0/lv1 Size of logical volume vg0/lv1 changed from 8.00 GiB (2048 extents) to 11.00 GiB (2816 extents). Logical volume lv1 successfully resized. 将lv1添加3G容量

#vgs VG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- 99.45g 4.00m vg0 2 1 0 wz--n- 19.99g 8.99g 由原先的11.99G可用变为8.99G可用

#lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv1 vg0 -wi-ao---- 11.00g 由原先的8G增加到了11G

对文件系统扩容

#resize2fs /dev/vg0/lv1

六、VG扩容

增加pv

pvcreate /dev/sdd

vgextend vg0 /dev/sdd

七、缩减LV

当磁盘空间不足时,可以通过缩减LV,释放空间。

1 卸载逻辑卷 umount /dev/lemonning/lv1

2 检测逻辑卷上的剩余空间 e2fsck -f /dev/lemonning/lv1

3 使用resize2fs缩减文件系统的空间 resize2fs /dev/lemonning/lv1 70M

注意:文件系统的大小必须跟逻辑卷大小保持一致,如果逻辑卷过大会导致空间浪费,如果文件系统过大,那数据就出问题了。

4 用lvreduce缩减LV的大小 lvreduce -L 70M /dev/lemonning/lv1

5 重新挂载 mount /dev/lemonning/lv1 /dsideal/mnt mount |grep mnt

参考链接1 参考链接2