Linux LVM逻辑卷
概述
LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再创建一个更大的分区将原分区卸载然后将数据拷贝到新分区,但是在企业的生产系统往往不允许停机或者允许停机的时间很短,LVM就能很好的解决在线扩充空间的问题,而且不会对数据造成影响,LVM还能通过快照在备份的过程中保证日志文件和表空间文件在同一时间点的一致性;本篇文章不会对概念知识做太详细的介绍,主要讲述LVM的扩容、收缩、移除的方法。
原理

PE(Physical Extend):卷的最小单位,默认4M大小,就像我们的数据是以页的形式存储一样,卷就是以PE的形式存储。
PV(Physical Volume):物理卷,如果要使用逻辑卷,首先第一步操作就是将磁盘格式化成PV,从上图可以看出PV是保护PE的,PV内PE的数量取决于这块磁盘的容量/4M.
VG(Volume Group):卷组,VG就是将很多PE组合在一起生成一个卷组,当然这里的PE是可以跨磁盘的,如果当前服务器磁盘空间不足就可以增加一个新磁盘对当前系统不会产生任何影响。
LV(Logical Volume):逻辑卷,逻辑卷最终是给用户使用的,前面几个都是为创建逻辑卷做的准备,创建逻辑卷的大小只要不超过VG剩余空间就可以。
步骤:
1.PV:格式化磁盘
2.VG:创建卷组
3.LV:创建逻辑卷
4.mkfs:格式化逻辑卷
5.mount:挂载逻辑卷
创建LV
1.PV(格式化磁盘):pvcreate命令
第一步就是对磁盘格式化,不要对现有已分区的磁盘做这个操作。
先查看当前系统磁盘信息,我电脑通过虚拟机刚添加了两块块20G的磁盘,分别是sdb、sdc,使用fdisk -l查看
fdisk -l

格式化/dev/sdb
pvcreate /dev/sdb /dev/sdc

使用pvdisplay或者pvs查看pv信息

从上图可以的信息可以得知PV的大小和剩余空间信息。
2.VG(创建卷组):vgcreate命令
vgcreate vggroup /dev/sdb /dev/sdc
vggroup是卷组名称

使用vgdisplay和vgs查看vg信息

通过vgdisplay可以查看vg的大小和PE的大小,从上图可以看到单个PE的默认大小是4M,当前VG总共有10238个PE,当前vg总共使用了两个pv。
3.LV(创建逻辑卷):lvcreate -n 逻辑卷名称 -L 逻辑卷大小 卷组名
记住创建逻辑卷大小不能超过卷组的剩余空间大小,我这里创建30G大小的逻辑卷。
lvcreate -n lv -L 30G vggroup

使用lvdisplay和lvs查看lv的信息

lvdisplay可以获取到的lv信息包括,lv的名称和路径、lv对应的vg组的名称、lv的大小、当前lv包含的PE数量。
lv的文件路径保存在vg下面。
4.mkfs(格式化lv)
mkfs.ext4 /dev/vggroup/lv

5.mount(挂载LV)
mount -t ext4 /dev/vggroup/lv /mnt

使用df -h查看挂载信息

注意:这里的挂载只是临时挂载,当服务器重启后挂载会没有,需要永久挂载需要修改配置文件,方法参考:http://www.cnblogs.com/chenmh/p/5097530.html
扩充逻辑卷(LV)
在对LV(逻辑卷)进行容量扩充之前先查看VG(卷组)中剩余空间有多少,扩充的大小不能超过VG剩余的空间大小
vgdisplay

当前VG剩余空间9.99G
1.lvextend(扩充逻辑卷)
为了演示在线扩充对文件不造成影响,我先在/mnt目录下创建了一个text测试文件,内容为“1”
lvextend -L +.99G /dev/vggroup/lv
这里将VG所有的剩余空间全部划分给LV


vg的剩余空间变成了0

LV的大小变成了39.99G
2.resize2fs:更新文件系统
resize2fs /dev/vggroup/lv

查看/mnt目录下的text文件是否受影响

文件没有受影响。
扩充卷组(VG)
当前我系统VG已经没有剩余空间了,如果这个时候系统空间不够了,这个时候就要增加一块磁盘来增加VG的大小,在虚拟机我增加一个10G的新磁盘sdd
1.格式化新磁盘(pvcreate)
pvcreate /dev/sdd
2.将格式化的PV添加到VG中去(vgextend)
vgextend vggroup /dev/sdd
3.查看当前vg的大小(vgdisplay)

当前VG的大小变成了50G,剩余空间也变成10G,当前VG的PV数变成了3
收缩逻辑卷(LG)
注意:对逻辑卷进行收缩操作之前必须先卸载逻辑卷,再缩小文件系统,最后才是缩小逻辑卷,而且收缩的大小也不能超过剩余空间大小。
1.卸载逻辑卷(unmount)
umount /mnt

2.收缩文件系统
这步一定要操作,而且是在收缩LV之前操作
先检查文件系统(e2fsck)
e2fsck -f /dev/vggroup/lv

缩小文件系统(resize2fs)
将文件系统缩小到30G,刚才如果细心注意会发现,使用lvdisplay查看文件系统是39.9G,而通过df -h查看是40G,这里以df -h的大小为准,因为下一步收缩LV的时候是通过减操作,所以要数据一致性下一步就是-10G
--将文件系统缩小为30G
resize2fs /dev/vggroup/lv 30G

3.缩小LV(lvreduce)
lvreduce -L -10G /dev/vggroup/lv

注意:这三步操作顺序不能弄乱。
接下来再挂载lV卷看看空间是否修改
mount /dev/vggroup/lv /mnt/

可以看到重新挂载后text文件还是存在,lv的大小也变成了30G
虽然可以使用收缩LV但是还是不建议这样做,特别是企业的系统,因为收缩后的结果会存在很多的未知可能。
收缩卷组(VG)
收缩卷组只能对那些未使用pv进行操作,如果你的当前PV已经已经在逻辑卷中被使用,那么该PV是不能去除的,比如刚才新增加的sdd磁盘未被使用就可以将其从VG中去除。
通过PVS查看那些PV已被使用
pvs

当前只有/dev/sdd未被使用
1.卸载逻辑卷
逻辑卷对应的是卷组而不是PV,虽然sdd在前面的操作并没有被添加到LV当中,但是这里还是需要先将LV卸载
umount /mnt
2.移除PV(vgreduce)
vgreduce vggroup /dev/sdd

3.删除pv
pvremove /dev/sdd

可以看到/dev/sdd已经被移除
删除lv、vg、pv
1.同样删除前先卸载所有lv,在当前系统只有一个lv
umount /mnt
2.lvremove,vgreomve,pvremove
--删除LV
lvremove /dev/vggroup/lv --删除VG
vgremove vggroup --删除PV
pvremove /dev/sdb /dev/sdc

这些删除操作都确保未被使用,比如删除LV在删除前先将数据拷贝出去然后再删除,删除VG确保VG组中不存在LV,删除PV刚才已经说过了,PV需要没有被使用。
重设一个lV的大小
删除LV
卸载LV
umount /home
删除lv
lvremove /dev/vg_mingyu001/lv_home
创建LV
创建LV
lvcreate -n lv_home -L 100G vg_mingyu001
格式化lv
mkfs.ext4 /dev/vg_mingyu001/lv_home
挂载lv
mount -t ext4 /dev/vg_mingyu001/lv_home /home
查看
查看挂载
df -h
mount挂载相关内容参考: http://www.cnblogs.com/chenmh/p/5097530.html
分区相关内容参考:http://www.cnblogs.com/chenmh/p/5096592.html
修改逻辑卷名
1.查看逻辑卷名
lvscan
[root@monitor ~]# lvscan
ACTIVE '/dev/vggroup/lv' [19.00 GiB] inherit
2.修改逻辑卷名
lvrename /dev/vggroup/lv /dev/vggroup/lv_data
将逻辑卷名“lv”改为“lv_data”
3.修改分区文件
vim /etc/fstab
这里同样将lv改成lv_data
4.修改引导
vim /etc/grub.conf
引导只针对boot分区,如果不是针对boot分区的逻辑卷进行改名那么也就不修改修改引导的逻辑卷卷名了。
5.重启
reboot
20161410补充

总结
LVM带来的好处不仅仅是在线扩容,在备份的过程中为了保证日志文件和表空间文件一致性问题也用到了LVM,在工作当中可能会遇到这种情况,当前的逻辑空间全部分配到了一个不合理的挂载上了,现在需要将这个挂载的空间调小,这种情况下需要提前将这个挂载内的文件拷贝到别的地方,然后卸载挂载删除lv,再创建一个小的LV,将原先的文件拷贝回来。对于特别重要的数据可以先用一个新盘挂载分配好逻辑LV将数据拷贝到新的LV上然后卸载旧的LV,将新的LV挂载到挂载到旧的LV的挂载点上确保新盘无误后可以删除旧的数据。
不要吝啬投上您神圣的一票!!!
|
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。 《欢迎交流讨论》 |
Linux LVM逻辑卷的更多相关文章
- Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据, ...
- Linux 笔记 - 第十七章 Linux LVM 逻辑卷管理器
一.前言 在实际生产中,有时会遇到磁盘分区空间不足的情况,这时候就需要对磁盘进行扩容,普通情况下需要新加一块磁盘,重分区.格式化.数据复制.卸载旧分区.挂载新分区等繁琐的步骤,而且有可能造成数据的丢失 ...
- Linux lvm 逻辑卷篇
Linux LVM逻辑卷配置过程详解(创建.增加.减少.删除.卸载) 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用 ...
- Linux LVM逻辑卷配置过程详解
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以 ...
- (转)Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)
一.预备知识 LVM全称为Logical Volume Manager 逻辑卷管理器,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘 ...
- Linux LVM 逻辑卷管理
使用Linux好久了,一定会意识到一个问题,某个分区容量不够用了,想要扩容怎么办?这里就涉及到LVM逻辑卷的管理了,可以动态调整Linux分区容量. LVM 概述 全称Logical Volume M ...
- Linux随笔 - Linux LVM逻辑卷配置过程详解[转载]
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以 ...
- LINUX——LVM逻辑卷管理
LVM: logical volumes manager LVM逻辑卷部署 物理卷—>卷组—>逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...
- linux LVM逻辑卷管理
什么是LVM LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性. ...
- linux lvm逻辑卷管理之lvdisplay命令
linux 磁盘管理分fdisk parted 和LVM三种方式,我们这里重点是说lvm 我们来看看LVM基本术语(lvm和传统fdisk分区方式有区别)由于传统的磁盘管理不能对磁盘进行磁盘管理,因此 ...
随机推荐
- linux中redis安装
一.登录redis官网下载redis-3.0.7.tar.gz 二.通过ftp工具上传至自己的服务器中 三.tar -zxvf redis-3.0.7.tar.gz解压 四.cd redis-3.0. ...
- 用vue2 +vue-router2 + es6 +webpack 高仿饿了么app(干货满满)
#高仿饿了么app商家详情 (vue2 +vue-router2 + es6 +webpack ) ##demo [demo 地址](http://liangxiaojuan.github.io/ ...
- allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[System.DateTime]
allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[S ...
- Android下的屏幕适配
1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px
- 普林斯顿算法课第四周作业_8Puzzle
作业地址:http://coursera.cs.princeton.edu/algs4/assignments/8puzzle.html 作业难点: 1.如何求一个Puzzle的解? 根据作业提示,使 ...
- java复习集合类之List接口
List 为有序可重复列表 实现List接口的类主要是ArrayList 下面为ArrayList的测试代码 import java.util.ArrayList; public class demo ...
- js判断图片是否加载完成
var img = new Image(); //新建一个图片对象:img.src = ...; //图片地址是你准备要加载的地址:if(img.complete){ //表示图片已经加载完成}
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- es查询命令备份(只需要网页9200/_plugin/head/就可以访问)
本文只是写一些常用es命令,这里不用任何客户端,只用 9200/_plugin/head/ 那个端口网页就可以,然后是复合查询. 注意es其实一个idnex只能有一个type,如果一个index做了多 ...
- C\C++ 1A2B小游戏源码
学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...