(一)LVM

     LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管  

     理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

     卷:一系列罗列的组织方式。

     优点:硬盘就不必使用分区,可以随意扩展或者缩小某个分区的大小

(二)LVM工作原理

clip_p_w_picpath002

PV Physical volume物理卷,例如一个硬盘,或一个Software RAID设备; 硬盘的一个分区 (或

                         者甚至硬盘本身或者回环文件),在它上面可以建立卷组

VG Volume group卷组,将一组物理卷收集为一个管理单元。逻辑的映射设备。卷组VG的大小

                     受PE的个数限制,而不是受容量限制。

    PE (Physical extent物理块,划分物理卷的数据块;当相应的物理卷加入到相应的卷组的时

                            候,才真正产生PE的划分。PE是卷组操作物理卷的方式,操作物理卷

                            存储的相应的单位。PE越大,卷组所能容纳的空间越大。

LVLogical volume逻辑卷,等同于传统分区,可看作便准块设备,以容纳文件系统。LV的组成单  

                      元成为LE。

   LE 是多个PE的连续映射。

   LV划分:线性划分,条带式划分


(三)LVM操作

1、创建PV(物理卷)

  pvcreate

1)新建两个200M的分区

clip_p_w_picpath004

2)执行partprobe使分区表立即生效

3)执行pvcreate /dev/sda7

  pvcreate /dev/sda8

  创建pv,可以一次全部创建。建议单独创建

clip_p_w_picpath006

  创建完成。

4)使用pvdisplay查看创建结果

clip_p_w_picpath008

2、创建VG(卷组)

  基本格式

  vgcreate 卷组名 物理卷对应设备

  参数

  -l 最大的逻辑卷数量,控制最大可以创建多少个逻辑卷

  -p 最多可以容纳多少个物理卷

  -s 物理扩充的大小,VG扩充的最大容量,相应单位的大小决定单个PE大小

1)vgcreate vg0 /dev/sda7

clip_p_w_picpath010

2)使用vgdisplay查看vg创建结果

clip_p_w_picpath012

 PE size 4M ,存储的单元,划分LV的最小步长即划分LV的时候必须是4的倍数。

3、创建LV(逻辑卷)

  基本格式

   lvcreate 相应卷组的名称 创建出的逻辑卷名称

   参数:

   -L 指定相应的大小和单位

   -l(小写L) 划分多少个LE给LV

   -i 指定相应LV的步长。如果有多个PV,通过PV划分相应的LE和LV,两个PV之间切换的频率即步长

      间做一次交换

  -n 指定名称,如果不指定名称,系统会默认一个名称

1)lvcreate -L 100M -n lv0 vg0

clip_p_w_picpath014

2)lvdisplay查看lv的划分

clip_p_w_picpath016

  LV write Access 是否可写

3)LV划分出来之后,就可以把LV当成分区进行格式化使用

  mkfs -t ext3 /dev/vg0/lv0

clip_p_w_picpath018

4) 进行挂接

  mount /dev/vg0/lv0 /mnt

clip_p_w_picpath020


(四)扩张

1)PV的扩张就是使用pvcreate命令创建更多的pv;

2)VG的扩张将新建的pv加入到vg中来扩充整个VG的大小;

(1)pvs简要查看

clip_p_w_picpath022

(2)使用vgextend命令扩张VG的大小

    vgextend参数

    -A 自动做一个备份,注意备份的是VG本身的信息,不是VG存放的数据

<1>vgextend vg0 /dev/sda8

clip_p_w_picpath024

<2>使用vgdisplay查看

clip_p_w_picpath026

3)LV的扩张

(1)首先使用lvdisplay查看lv的大小

clip_p_w_picpath028

(2)lvextend -L +100M /dev/vg0/lv0(绝对路径而不是名称)

    +100M表示原有的基础上增加100M,

    不用+,直接跟100M,表示增加到100M

clip_p_w_picpath030

(3)lvdisplay查看

clip_p_w_picpath032

(4)df -h查看当前已挂接文件的大小

clip_p_w_picpath034

    发现大小为97M,没有扩张到200M;LV扩大了,文件系统却没有扩大。现在需要重新计算文件系  

    统,并且生成inode和block的对应关系。

(5)现在卸载挂接

    umount /mnt

(6)resize2fs重置大小

   格式

   resize2fs 设备 新的大小

   resize2fs /dev/vg0/lv0 200M

clip_p_w_picpath036


提示先检查磁盘

(7)执行e2fsck检查

    e2fsck -f /dev/vg0/lv0

clip_p_w_picpath038

(8)现在重新执行resize2fs /dev/vg0/lv0 200M

clip_p_w_picpath040

(9) 挂接并查看空间,显示空间已扩展。

clip_p_w_picpath042

   必须执行e2fsck的原因:

   如果不执行e2fsck检查磁盘,相应的resize2fs后跟的磁盘大小无法确定。只有执行检查之后,依

   据blocks的数量才能计算出大小。

   使用tune2fs –-l 检查磁盘文件系统的相应文件报告,

   显示的内容和dump2fs类似

clip_p_w_picpath044

调整LV大小的过程:

扩大LV的顺序:

增大lv (lvextend)-->卸载挂接(umount)-->扫描磁盘(e2fsck)-->修改文件系统大小(resize2fs)-->重新挂接(mount)

缩小LV的顺序:

卸载挂接(umount)-->扫描磁盘(e2fsck)-->修改文件系统大小(resize2fs)-->缩小LV(lvreduce)-->重新挂接(mount)


(五)缩小LV

    提示:如果情况允许,缩小LV之前建议将数据备份。

1、首先检查挂接

clip_p_w_picpath046

2、执行umount /mnt卸载挂接(注意:一定要先卸载

3、现在如果直接执行reszie2fs,系统依然提示首先执行e2fsck检查磁盘

clip_p_w_picpath048

4、执行e2fsck -f /dev/vg0/lv0检查

clip_p_w_picpath050

5、现在缩小文件系统


经验:首先要注意当前lv已用空间大小;缩减时建议预留出多一些空间,避免出现意外情况,造成数

     据丢失。

  lvreduce -L -100M /dev/vg0/lv0

  -100M:表示减少100M

  没有 - ,100M 表示减少到100M

1)执行lvreduce -L 100M /dev/vg0/lv0,    
clip_p_w_picpath052

2)提示警告,可能会损坏数据;并再次确认,输入y确认

clip_p_w_picpath054

3)lvdisplay查看lv空间已缩成100M

clip_p_w_picpath056

4)执行mount /dev/vg0/lv0 /mnt 挂接

5)df -h

clip_p_w_picpath058


(六)缩小VG

     格式

     vgreduce 名称 物理卷路径

1、使用vgdisplay查看,有两个PV

clip_p_w_picpath060

2、使用vgs查看vg0大小是284M

clip_p_w_picpath062

3、执行pvs查看,有两个pv同属于vg0,并且/dev/sda8显示无数据,因此可以安全的把/dev/sda8从

  vg0下卸载。

clip_p_w_picpath064

4、vgreduce vg0 /dev/sda8

clip_p_w_picpath066

5、执行vgdisplay查看,VG缩减为194M

clip_p_w_picpath068


(七)删除LVM

     删除之前首先卸载挂接

1、删除LV

  lvremove /dev/vg0/lv0

clip_p_w_picpath070

  再次要求确认,输入y继续

clip_p_w_picpath072

  现在执行lvdisplay无输出,确认LV已经删除。

2、删除VG

  格式

  vgremove 名称

  执行vgremove vg0

clip_p_w_picpath074

  执行vgdisplay查看无输出,确认vg已经删除

3、执行pvs查看,/sda7,/sda8都没有所属的Vg

clip_p_w_picpath076

  删除PV:

  分别执行pvremove /dev/sda7

  pvremove /dev/sda8

clip_p_w_picpath078

  执行pvdispaly无输出,确认pv已经删除


(八)迁移LVM

<一> LVM的PV和PV之间的数据迁移,例如替换故障硬盘

    构建一个LVM环境,操作和之前的一样

1、执行pvcreate /dev/sda7

      vgcreate vg0 /dev/sda7

      vgcreate vg0 /dev/sda7

      lvcreate -L 100M -n lv0 vg0

      mkfs -t ext3 /dev/vg0/lv0

      mount /dev/vg0/lv0 /mnt

2、切换到/mnt目录

clip_p_w_picpath080

3、退出/mnt目录,执行pvs查看

clip_p_w_picpath082

4、现在将/dev/sda7的数据迁移到/dev/sda8分区中,同时使用sda8。

1)执行vgextend vg0 /dev/sda8,将/sda8加入vg0中

clip_p_w_picpath084

2)执行pvs查看,/dev/sda8已经加入到vg0中

clip_p_w_picpath086

3)执行pvmove /dev/sda7 /dev/sda8,将sda7的数据迁移到sda8。注意是pvmove命令

clip_p_w_picpath088

4)执行pvs查看

clip_p_w_picpath090

5)执行lvdiplay,切换到/mnt目录查看数据正常

clip_p_w_picpath092

6)执行vgreduce vg0 /dev/sda7,移除出当前的VG

clip_p_w_picpath094

7)查看确定sda7的数据已经迁移到sda8中

clip_p_w_picpath096


生产中,迁移LVM较为少用


<二>系统升级LVM迁移到新的系统,将LVM]整个导出

1、首先卸载LV的挂接

clip_p_w_picpath098

2、执行vgchange -a n vg0,下线VG

clip_p_w_picpath100

3、导出卷:

  切换到/tmp/work目录下,执行vgexport导出

clip_p_w_picpath102

4、执行vgdisplay查看,VG的信息已经导出到磁盘的记录上

clip_p_w_picpath104

5、pvscan 扫描pv,判断硬盘是否是PV

clip_p_w_picpath106

6、导入卷:

  执行vgexport -a vg0导入到新的系统内;

7、在新的系统内,执行vgdisplay就可以查看到VG的相关信息

8、执行vgchange -a y vg0 重新激活VG

至此,LVM从一台机器迁移到另外一台机器上操作全部完成


(九)LVM快照

clip_p_w_picpath108

1、重新创建LVM

执行vgcreate vg1 /dev/sda7

   lvcreate -L 100M -n lv1 vg1

   mkfs -t ext3 /dev/vg1/lv1

clip_p_w_picpath110

2、lvcreate –s 创建快照

1)lvcreate -L 1M -s -n snap1 /dev/vg1/lv1

(改变幅度) (快照名称) (快照相应LV)

clip_p_w_picpath112

2)执行mount /dev/vg1/snap1 /tmp/work 挂载,比较/mnt和/tmp/work下的数据,内容一样

clip_p_w_picpath114

3)执行echo 234 > /mnt/file,改变原有的file文件;查看快照发现保留了原有的数据。

clip_p_w_picpath116