LVM浅析

 

一、简介

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

5 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

此处如果遇到报错:

resize2fs: Bad magic number in super-block while trying to open /dev/rhel/root
Couldn't find valid filesystem superblock.

可以使用 xfs_growfs /dev/centos/root 具体原因需要找时间好好研究一下

 

6 VG扩容

增加pv

#pvcreate /dev/sdd

#vgextend vg0 /dev/sdd

7 缩减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

 

参考地址 https://www.cnblogs.com/fiberhome/p/8109530.html

    http://www.cnblogs.com/ssslinppp/p/5853312.html

 

posted @ 2018-12-21 17:05  lemonning  阅读(612)  评论(0编辑  收藏  举报