逻辑卷管理LVM

逻辑卷管理LVM
 Logic Volume Manager


盘碟1 ----\    /-----> 分区1
 -------> 硬盘 ----->
盘碟2 ----/    \-----> 分区2


物理卷1 ----\  /-----> 逻辑卷1
 --------> 卷组(VG)
物理卷2 ----/  \-----> 逻辑卷2

 

物理卷PV:
 一个可以存放数据的块设备都能成为物理卷,只不过它经过命令初始化过,里面包含逻辑卷的相关元数据。它是逻辑卷技术中,最底层用于存放数据的设备,这些是物理设备。

卷组VG:
 它由若干个物理卷组成,构成一个容量更大的逻辑组合体(不是实体),这个组合体所有的容量可以分配逻辑卷使用。

逻辑卷LV:
 也是逻辑设备(并没有真正对应的硬件),用户格式化,存放数据的时候,操作的就是这个逻辑设备文件.


首先把原本实验中,用来做软raid分区全部清楚raid信息
# umount /dev/md0
# mdadm  -S /dev/md0
# mdadm --zero-superblock /dev/sda{7,8,9,10}

可以把分区类型修改成8e

有了四个空闲的设备可以作为物理卷.

 

例子1: 创建简单的逻辑卷

1、创建pv
# pvcreate /dev/sda{7,8,9}


查看系统哪些设备是物理卷
# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda7       lvm2 a--  2.01g 2.01g
  /dev/sda8       lvm2 a--  2.01g 2.01g
  /dev/sda9       lvm2 a--  2.01g 2.01g

# pvdisplay


2、创建vg
# vgcreate mysql-vg /dev/sda{7,8,9}
  Volume group "mysql-vg" successfully created
 创建了一个名字为mysql-vg的卷组,它是由sda7,sda8,sda9组成的

查看卷组的信息
# vgs
  VG       #PV #LV #SN Attr   VSize VFree
  mysql-vg   3   0   0 wz--n- 6.01g 6.01g

# vgdisplay


3、创建lv
# lvcreate -n data-lv -L 3G mysql-vg
  Logical volume "data-lv" created
 创建一个名字为data-lv的逻辑卷,它的容量是来自于mysql-vg这个卷组。

# ls /dev/mysql-vg/data-lv


4、格式化、挂载
# mkfs.ext4 /dev/mysql-vg/data-lv
# mount /dev/mysql-vg/data-lv  /mnt

 

例子: 多逻辑卷进行扩容

 支持在线扩容: 逻辑卷正在被挂载使用,但能够对它增加容量

# lvextend -L +1G /dev/mysql-vg/data-lv
  Extending logical volume data-lv to 4.00 GiB
  Logical volume data-lv successfully resized
 《---  +1G 就是在原有基础上添加1G容量


# resize2fs /dev/mysql-vg/data-lv  <---重新刷新文件系统的元数据,调整为最新的文件系统容量

 


例子: 对卷组扩容
 
 添加新的物理卷到卷组中
# pvcreate /dev/sda10
# vgextend mysql-vg /dev/sda10


例子: 裁剪逻辑卷lv的容量

 1、不支持在线裁剪
 2、裁剪后的容量不能低于裁剪前已用容量


1) 取消挂载
# umount /dev/mysql-vg/data-lv

2) 对逻辑卷上文件系统进行检查,如果有错误先修复
# fsck -f /dev/mysql-vg/data-lv

3) 先使用resize2fs调整为新的容量: 裁剪后逻辑卷应该是2G
# resize2fs /dev/mysql-vg/data-lv 2G

4) 使用lvreduce指令对逻辑卷裁剪量
# lvreduce /dev/mysql-vg/data-lv -L 2G

  WARNING: Reducing active logical volume to 2.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data-lv? [y/n]:  y
  Reducing logical volume data-lv to 2.00 GiB
  Logical volume data-lv successfully resized

 

5) 重新再去对文件系统进行检查,保证没错
# fsck -f /dev/mysql-vg/data-lv


6) 挂载使用
# mount /dev/mysql-vg/data-lv /mnt

 


例子:对卷组裁剪容量
 就是把没有使用过的物理卷从卷组中移除。

# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda10 mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g 4.00m <---很明显它已经被使用了
  /dev/sda8  mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 2.00g

所以以上能够移除的就是 sda8,sda9,sda10

# vgreduce mysql-vg /dev/sda8
  Removed "/dev/sda8" from volume group "mysql-vg"


例子:把故障的物理卷从卷组中移除。
# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda10 mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g 4.00m
  /dev/sda8           lvm2 a--  2.01g 2.01g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 2.00g

模拟有物理卷损坏了。
# dd if=/dev/zero  of=/dev/sda10 bs=1M count=1024

# pvs
  Couldn't find device with uuid 1HM3OV-nYid-bBXi-t7RD-Z0R9-ZnVj-3SqKiu.
  PV             VG       Fmt  Attr PSize PFree
  /dev/sda7      mysql-vg lvm2 a--  2.00g 4.00m
  /dev/sda8               lvm2 a--  2.01g 2.01g
  /dev/sda9      mysql-vg lvm2 a--  2.00g 2.00g
  unknown device mysql-vg lvm2 a-m  2.00g 2.00g

强制把丢失的物理卷从卷组中移除
# vgreduce --removemissing --force mysql-vg
  Couldn't find device with uuid 1HM3OV-nYid-bBXi-t7RD-Z0R9-ZnVj-3SqKiu.
  Wrote out consistent volume group mysql-vg

之后就不会报错
# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda7  mysql-vg lvm2 a--  2.00g 4.00m
  /dev/sda8           lvm2 a--  2.01g 2.01g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 2.00g
# vgs
  VG       #PV #LV #SN Attr   VSize VFree
  mysql-vg   2   1   0 wz--n- 4.01g 2.01g

 


逻辑卷的其他特性:
 可以实现逻辑卷的条带化:相当于raid0
 可以实现逻辑卷的镜像: 相当于raid1
 可以使用逻辑卷的快照功能,实现数据的“瞬间备份”


例子:实现逻辑卷的条带化,提高数据的读写效率

 前提: 卷组中至少有两个不同的物理卷,而且要真正意义上提高速度,肯定这两个物理卷应该是独立硬盘

# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda10 mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g 4.00m
  /dev/sda8  mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 2.00g


# lvcreate -n web-lv -L 2G -i 2 mysql-vg
  Using default stripesize 64.00 KiB
  Logical volume "web-lv" created
 创建了一个名字为web-lv ,条带化到2个物理卷,逻辑卷的容量是2G,所以根据条带化的原理,每个物理其实是贡献了1G的空间

# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda10 mysql-vg lvm2 a--  2.00g 1.00g  《---
  /dev/sda7  mysql-vg lvm2 a--  2.00g 4.00m
  /dev/sda8  mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 1.00g   《---


格式化、挂载、测试
# mkfs.ext4 /dev/mysql-vg/web-lv
# mount -o sync /dev/mysql-vg/web-lv  /mnt

 

例子:实现镜像逻辑卷

 实现数据的冗余,尽管有部分物理卷损坏,数据照样可以访问

 至少要有两个可用物理卷来创建镜像逻辑卷。

# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda10 mysql-vg lvm2 a--  2.00g 1.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda8  mysql-vg lvm2 a--  2.00g 2.00g
  /dev/sda9  mysql-vg lvm2 a--  2.00g 1.00g


# lvcreate  -n lv-mirror -L 1500M -m 1 --mirrorlog core mysql-vg
  Logical volume "lv-mirror" created

  创建了一个逻辑卷名字为lv-mirror,大小为1.5G,
  -m 1 分别把数据同时保存到两个不同物理卷,保存的数据是一样的。

或者指定使用哪些物理卷进行镜像
# lvcreate  -n lv-mirror -L 500M -m 1 --mirrorlog core mysql-vg /dev/sda{9,10} 
  Logical volume "lv-mirror" created

 


# lvs
  LV        VG       Attr   LSize Origin Snap%  Move Log Copy%  Convert
  lv-mirror mysql-vg mwi-a- 1.46g                        100.00   <--完全同步状态    
  web-lv    mysql-vg -wi-ao 2.00g

# pvs
  PV         VG       Fmt  Attr PSize PFree 
  /dev/sda10 mysql-vg lvm2 a--  2.00g   1.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g 552.00m 《--
  /dev/sda8  mysql-vg lvm2 a--  2.00g 552.00m  《---说明数据是镜像在sda7,sda8上
  /dev/sda9  mysql-vg lvm2 a--  2.00g   1.00g

 

如果镜像的逻辑卷中涉及到其中一个物理卷损坏了,如何处理?
 模拟故障: dd 命令把其中一个物理卷损坏掉
逻辑卷就无法挂载了
# mount /dev/mysql-vg/lv-mirror /mnt
mount: wrong fs type, bad option, bad superblock on /dev/mapper/mysql--vg-lv--mirror,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
# lvs
  Couldn't find device with uuid kCJ3NC-BLeu-FkD7-OQyJ-dcnv-tU4u-KpCcji.
  LV        VG       Attr   LSize Origin Snap%  Move Log Copy%  Convert
  lv-mirror mysql-vg mwi-a- 1.46g                        100.00       
  web-lv    mysql-vg -wi-a- 2.00g

把故障设备移除后,才能继续访问原来的镜像逻辑卷,由于原来的其中一个物理卷已经损害了,所以原来镜像逻辑卷就变成了普通逻辑卷了。

# vgreduce --removemissing --force mysql-vg 《--移除损坏掉的物理卷

# lvs
  LV        VG       Attr   LSize Origin Snap%  Move Log Copy%  Convert
  lv-mirror mysql-vg -wi-a- 1.46g   <--  属性中的m已经没有了,说明已经变成普通的逻辑卷
  web-lv    mysql-vg -wi-a- 2.00g 

现在逻辑卷可以恢复访问:
# mount /dev/mysql-vg/lv-mirror /mnt

把故障的设备修复后,重新加入卷组,然后让逻辑卷重新恢复到镜像状态:
# pvcreate /dev/sda7
  Writing physical volume data to disk "/dev/sda7"
  Physical volume "/dev/sda7" successfully created


# vgextend mysql-vg /dev/sda7
  Volume group "mysql-vg" successfully extended

# pvs
  PV         VG       Fmt  Attr PSize PFree 
  /dev/sda10 mysql-vg lvm2 a--  2.00g   1.00g
  /dev/sda7  mysql-vg lvm2 a--  2.00g   2.00g  《--加入了卷组了
  /dev/sda8  mysql-vg lvm2 a--  2.00g 552.00m
  /dev/sda9  mysql-vg lvm2 a--  2.00g   1.00g


恢复成镜像逻辑卷
# lvconvert -m 1 --mirrorlog core /dev/mysql-vg/lv-mirror
  mysql-vg/lv-mirror: Converted: 1.3%
  mysql-vg/lv-mirror: Converted: 35.7%
  mysql-vg/lv-mirror: Converted: 68.8%
  mysql-vg/lv-mirror: Converted: 100.0%


# lvs
  LV        VG       Attr   LSize Origin Snap%  Move Log Copy%  Convert
  lv-mirror mysql-vg mwi-ao 1.46g                        100.00   《--恢复      
  web-lv    mysql-vg -wi-a- 2.00g    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值