一,LVM简介

LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的 文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

二,LVM基本术语

前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。

物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

简单来说就是:

PV:是物理的磁盘分区

VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。

LV:也就是从VG中划分的逻辑分区

Linux LVM磁盘管理及LVM扩容_第1张图片

三,创建和管理LVM

要创建一人上LVM系统,需要经过以下步骤

1,创建分区

使用分区工个(fdisk)创建LVM分区,方法和创建分区一样,需要将LVM的分区类型设置成8e,配置如下:

[root@evgoo ~]# fdisk /dev/sdb

Command (m for help): n  #新建分区

Command action

   e   extended

   p   primary partition (1-4)

p   #主分区

Partition number (1-4): 1 #第1个分区

First cylinder (1-15665, default 1):  #默认起始块

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +10G #设置大小为10GB

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (1307-15665, default 1307): 

Using default value 1307

Last cylinder, +cylinders or +size{K,M,G} (1307-15665, default 15665): +10G

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 3

First cylinder (2613-15665, default 2613): 

Using default value 2613

Last cylinder, +cylinders or +size{K,M,G} (2613-15665, default 15665): +3G

Command (m for help): t  #设置分区类型

Partition number (1-4): 1  #第1个磁盘

Hex code (type L to list codes): 8e #类型为8e

Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t

Partition number (1-4): 2

Hex code (type L to list codes): 8e

Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): t

Partition number (1-4): 3

Hex code (type L to list codes): 8e

Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): w #保存退出

[root@evgoo ~]# partx -a /dev/sdb   #重新加载分区

[root@evgoo ~]# partx -a /dev/sdb   #重新加载分区

[root@evgoo ~]# vgcreate myvg /dev/sdb2 #新创建一个vg, 名称叫myvg,使用sdb2磁盘

[root@evgoo ~]# vgcreate myvg /dev/sdb1 #新创建一个vg, 名称叫myvg,使用sdb1磁盘

[root@evgoo ~]# pvdisplay /dev/sdb1

[root@evgoo ~]# vgextend  myvg /dev/sdb1    #作用sdb1 来扩展myvg磁盘,

  Volume group "myvg" successfully extended

  --- Volume group ---

  VG Name                              myvg

  System ID             

  Format                                  lvm2

  Metadata Areas                    2

  Metadata Sequence No       2

  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                               20.00 GiB

  PE Size                                4.00 MiB

  Total PE                              5120

  Alloc PE / Size                    0 / 0   

  Free  PE / Size                    5120 / 20.00 GiB

  VG UUID                            UTRjCt-NUHy-kHV1-rVs9-f2ZK-XLMW-2Jr0fK

[root@evgoo ~]# pvmove  /dev/sdb1 #将sdb1磁盘移除

  No data to move for myvg

[root@evgoo ~]# vgreduce myvg /dev/sdb1 #从myvg里删除sdb1磁盘

  Removed "/dev/sdb1" from volume group "myvg"

[root@evgoo ~]# vgdisplay  #显示myvg的磁盘容量,只有10GB

  --- Volume group ---

  VG Name                          myvg

  System ID             

  Format                              lvm2

  Metadata Areas                1

  Metadata Sequence No   3

  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                           10.00 GiB

  PE Size                            4.00 MiB

  Total PE                          2560

  Alloc PE / Size                0 / 0   

  Free  PE / Size                2560 / 10.00 GiB

  VG UUID                         UTRjCt-NUHy-kHV1-rVs9-f2ZK-XLMW-2Jr0fK

[root@evgoo ~]# lvcreate -L 2G -n mylv myvg #在vg里创建一个新的LV,磁盘添加2GB

  Logical volume "mylv" created

[root@evgoo ~]# ls /dev/mapper/  

control  myvg-mylv

[root@evgoo ~]# mke2fs -t ext4 -b 1024 -L MYLV /dev/myvg/mylv     #格式化mylv,类型为ext4, 块大小为1024 

[root@evgoo ~]# mkdir /backup  #新建文件夹为backup

[root@evgoo ~]# mount /dev/myvg/mylv  /backup/ #挂载backup

[root@evgoo ~]# ls -l /backup/

总用量 12

drwx------ 2 root root 12288 8月  22 18:35 lost+found

[root@evgoo ~]# mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)

gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)

/dev/mapper/myvg-mylv on /backup type ext4 (rw)

[root@evgoo ~]# cd /backup/  #进入到backup文件夹

[root@evgoo backup]# cp /etc/issue /backup/ #拷贝文件到backup

[root@evgoo backup]# cp /etc/grub.conf  /backup/ #拷贝文件到backup

[root@evgoo backup]# cd /backup/

[root@evgoo backup]# ll

总用量 14

-rw------- 1 root root      769 8月  22 18:40 grub.conf

-rw-r--r-- 1 root root      47 8月  22 18:40 issue

drwx------ 2 root root      12288 8月  22 18:35 lost+found

[root@evgoo backup]# cat issue  #查看文件内容

CentOS release 6.5 (Final)

Kernel \r on an \m

[root@evgoo ~]# lvextend -L 3G /dev/myvg/mylv  #扩展mylv大小为3G

  Extending logical volume mylv to 3.00 GiB #显示已扩展到3GB

  Logical volume mylv successfully resized

[root@evgoo ~]# df -lh #查看磁盘块大小,mylv显示仍为2GB

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2                  18G  2.6G   15G  16% /

tmpfs                     931M   80K  931M   1% /dev/shm

/dev/sda1                  291M   39M  238M  14% /boot

/dev/mapper/myvg-mylv          2.0G   36M  1.9G   2% /backup

[root@evgoo ~]# umount /backup/ #卸载backup文件

[root@evgoo ~]# mount /dev/myvg/mylv  /backup/ #在挂载backup文件

[root@evgoo ~]# df -lh  #仍显示为2GB磁盘

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2                  18G  2.6G   15G  16% /

tmpfs                     931M   80K  931M   1% /dev/shm

/dev/sda1                  291M   39M  238M  14% /boot

/dev/mapper/myvg-mylv          2.0G   36M  1.9G   2% /backup

[root@evgoo ~]# resize2fs  /dev/myvg/mylv  #重新定义mylv

[root@evgoo ~]# xfs_growfs /dev/myvg/mylv (centos7用这个命令)

[root@evgoo ~]# umount /dev/myvg/mylv #卸载mylv

[root@evgoo ~]# e2fsck -f /dev/myvg/mylv #检查mylv

e2fsck 1.41.12 (17-May-2010)

第一步: 检查inode,块,和大小

第二步: 检查目录结构

第3步: 检查目录连接性

Pass 4: Checking reference counts

第5步: 检查簇概要信息

MYLV: 13/196608 files (0.0% non-contiguous), 86150/3145728 blocks

[root@evgoo ~]# resize2fs /dev/myvg/mylv  2G #缩减逻辑卷为2GB

resize2fs 1.41.12 (17-May-2010)

Resizing the filesystem on /dev/myvg/mylv to 2097152 (1k) blocks.

The filesystem on /dev/myvg/mylv is now 2097152 blocks long.

[root@evgoo ~]# lvreduce -L 2G /dev/myvg/mylv  #缩减LV卷为2GB

  WARNING: Reducing active logical volume to 2.00 GiB

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce mylv? [y/n]: y

  Reducing logical volume mylv to 2.00 GiB

  Logical volume mylv successfully resized

[root@evgoo ~]# mount /dev/myvg/mylv /backup/

[root@evgoo ~]# df -lh   #容量已被缩减成2GB了

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2                  18G  2.6G   15G  16% /

tmpfs                     931M   80K  931M   1% /dev/shm

/dev/sda1                  291M   39M  238M  14% /boot

/dev/mapper/myvg-mylv          2.0G     36M  1.9G   2% /backup

[root@evgoo ~]# cd /backup/  #进入backup文件

[root@evgoo backup]# cat issue  #查看issue文件仍可以正常显示

CentOS release 6.5 (Final)

Kernel \r on an \m

[root@evgoo backup]# lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv  #创建一个快照,快照名为mylv-snap,大小 为512M,权限为只读

  Logical volume "mylv-snap" created

[root@evgoo backup]# mount /dev/myvg/mylv-snap  /mnt #将快照挂载至/mnt目录下

mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only

[root@evgoo backup]# cd /mnt/ #进入/mnt目录下

[root@evgoo mnt]# cat issue #可以正常查看文件

CentOS release 6.5 (Final)

Kernel \r on an \m

[root@evgoo mnt]# cp -a grub.conf issue /tmp #将/mnt目录拷贝到/tmp目录下

[root@evgoo mnt]# cd 

[root@evgoo ~]# umount /mnt/ #卸载/mnt目录

[root@evgoo ~]# lvremove  /dev/myvg/mylv-snap #移除快照

Do you really want to remove active logical volume mylv-snap? [y/n]: y

  Logical volume "mylv-snap" successfully removed

[root@evgoo ~]# umount /backup/  #卸载backup目录

[root@evgoo ~]# lvremove  /dev/myvg/mylv  #移除lv

Do you really want to remove active logical volume mylv? [y/n]: y

  Logical volume "mylv" successfully removed

[root@evgoo ~]# vgremove myvg #移除vg

  Volume group "myvg" successfully removed

[root@evgoo ~]# vgs 

  No volume groups found

[root@evgoo ~]# pvremove  /dev/sdb1 #移除PV

  Labels on physical volume "/dev/sdb1" successfully wiped

[root@evgoo ~]# pvremove  /dev/sdb2 #移除PV

  Labels on physical volume "/dev/sdb2" successfully wiped