个人总结:
---------------------------------------------------------------------------------------------------------------------
1、查看rpm -qa |grep lvm 查看系统所安装的LVM版本,因为RHEL 各个版本的LVM的版本也不一样。因为各个版本创建的VG,都可以查到,所以涉及到版本转换的问题,
vgconvert -M2 vg00 转换为LVM2.0版本 具体可以man vgconvert 来研究。
2、Lvm的层次结构
最底层是pv -----vg-------lv-----文件系统------使用,(一般的软件必须在文件系统上使用,也就是需要格式化成ext2/3等格式,但oracle可以使用LV的裸设备)
3、建立lvm
思路:首先分区要建立PV,PV之前要有文件系统,接着建立VG, LV
Pvcreate /dev/sdb ----> vgcreate vg00 /dev/sdb /dev/sdc (-s 指定32M 指定VG支持的大小64M 支持4T ,32M 好像够用了) ---->lvcreate -L 500M -n lv00 vg00 (500M)------->mkfs -t ext3 /dev/vg00/lv00 格式化-----》midir /data , mount 挂载完成--编辑/etc/fstab,完成
4、添加新硬盘
思路:首先对硬盘格式化 fdisk ,然后建立PV(建立PV时注意格式化后硬盘的名字 ),接着将PV加入VG。增加两个硬盘sdb sdc
操作:fdisk /dev/sdb/c 分别输入参数n、p、1,回车,格式化mke2fs /dev/sdb/c------->pvcreate /dev/sdb/c , vgextend vg00 /dev/sdb /dev/sdc 增加之后,vgdisplay 确认,
如果出现错误“Couldn't find device with uuid ” vgreduce –removemissing vg00这个命令解决
5、增加LV空间
思路: 先增加LV空间,然后再更新文件系统,
Lvextend -L +500M /dev/vg00/lv00 增加之后,然后resize2fs /dev/vg00/lg00
6、减少LV空间(生产系统慎重,且很少)
思路:先减少文件系统空间,然后减少LV空间
操作:先umount /data ,检查文件系统e2fsck -f /dev/vg00/lv00, resize2fs /dev/vg00/lv00 剩余的空间 ,挂载系统上mount /dev/vg00/lv00 确认是否减少系统无误,df查看,最后减少逻辑卷 lvreduce -L 500M /dev/vg00/lv00 减少之后。
7、减少硬盘
思路:用pvdisplay查看删除的硬盘的空间占用情况, 如果有文件占用硬盘,就用pvmove命令来操作,然后用vgreduce 减少物理卷
操作:pvmove /dev/sda2 将数据移到剩余的LV空间里,然后 vgreduce vg00 /dev/sdb。将sdb移除空间。
8、lvm不提供容错,生产系统中,所以LVM一般都是应用在做好了raid0/1/5等磁盘阵列上,如果没有这些,也需要做软raid(md0,软raid硬盘),或者做硬raid 也就是服务器上的raid(阵列)卡
9、Lvm back 配置文件备份和恢复
a) vgchange -A y --refresh vg00 ( 查看VG自动备份是否打开,默认是打开的,-A 自动备份,y 表示“是”) 具体查看 man vgchage
b) Vgcfgbakup -f /tmp/aaa.backup vg00
c) vgcfgrestore -f /tmp/aaa.bakup vg00
d) vgchange -a n vg00 将VG置为不可用。y 代表可用。
10、LVM快照功能 snap
冷备,系统停下来备份,热备,系统运行中备份,
思路:首先查看要备份的LVM占用的空间大小,然后创建一个快照LV来备份
操作如下:lvdispaly ==== lvcreate -L XXXM -s -n lvbakup /dev/vg00/lv00 (为lv00创建的).====== mount /dev/vg00/lvbakup /mnt 完成了
snapshot是一种特殊的逻辑卷,它就是对逻辑卷快照
创建快照使用lvcreate
一个例子
lvcreate -L 50M - s -p r -n lvmsnap /dev/myvol/mylv1
注:-L 50M 是指定快照卷变化的大小
-s 说明创建的是快照卷
-p r 创建的快照卷是只读的,防止用户在快照卷创建文件,快照可以卷仅仅是让我们获得一个备份路径
-n lvmsnap 给快照卷起的名字
/dev/myvol/mylv1 对哪个逻辑卷创建快照卷,此处在卷组myvol下的逻辑卷mylv1创建
创建完就可以挂载了
mkdir /snap
mount -o ro /dev/myvol/lvmsnap /snap
注:快照卷和逻辑卷在同一个目录下
-o ro指定只读方式挂载
cd /snap
拷过来一个文件rc.sysinit做实验,wc -l rc.sysinit看到他有980行
然后修改一下
vim /lvm/rc.sysinit 删除它的前10行
此时 wc -l /lvm/rc.sysinit 可以看到他有970行
再看当前目录下wc -l rc.sysinit 仍然是980行
此时head rc.sysinit可以看到删除的10行出现在/snap下面
使用tar备份tar jcf /root/lvm.tar.bz2 /snap/*
创建完成后卸载
umount /snap
删除快照卷 lvremove /dev/myvol/lvmsnap
cd /lvm 注:/lvm是/dev/myvol/mylv1挂载的位置
rm -f rc.sysinit
tar jxf /root/lvm.tar.bz2 -C /lvm
mv /snap/* ./
例子2:
问题:1、备份一个非常繁忙的服务器,需要停止大量的程序。否则,你将以数据不一致告终。
2、保存数据库或目录。如果一个文件在使用状态,我们就没有任何线索了,除非我们给应用程序时间做一个清
除的关闭。
这样我们不得不关闭程序,做备份,然后重新启动他们。时间的长短。。影响我们的工作。。
解决:使用LVM,我们可以做一个LV瞬间的快照,然后mount它,再备份它。
步骤:
# mount /dev/test/HOWTO /mnt
# echo > /mnt/a.test.file
# ls /mnt/
a.test.file lost+found
# ls -l /mnt/
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
Ok,我们现在有些事情要用它一起做。让我们产生这个快照:
# lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO
lvcreate -- WARNING: all snapshots will be disabled if more than 16 MB are changed
lvcreate -- INFO: using default snapshot chunk size of 64 KB
lvcreate -- doing automatic backup of "test"
lvcreate -- logical volume "/dev/test/HOWTO" successfully created
# mount /dev/test/snap /snap
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
现在我们从原处删除a.test.file,并且检查它是否仍然在快照里:
# rm /mnt/a.test.file
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
原理:
记得我们不得不设置“--size”参数吗?真正发生的事情是,“snap”卷需要有那些当LVM调用时,在原处要被改变的所有块的一个拷贝。
当我们删除a.test.file时,它的i节点被删除。这引起64KB要被标注成“脏的”--同时原始数据的一个拷贝被写到“snap”卷。这个例子中,我们分配了16MB给快照,因此如果多于16MB的块要被修改,快照就会无效了。
要决定一个快照分区的正确大小,你将不得不推测基于主LV的使用模式、快照要激活的总时间。例如,在午夜,当无人使用系统的情况下,一个几小时的备份可能要求很小的空间。
请注意,快照不是永久的。如果你卸下LVM或重启,它们就丢失了,需要重新创建。
经过我的实验:快照的目的是保持瞬间的数据,而不影响系统的运行。。。(静态备份某一时刻的数据)
相关命令: lvremove--删除lv
lvcreate --size 1000M --snapshot --name varsnap /dev/(逻辑卷)
---------------------------------------
应用探讨:
通过 lvm 为一致性备份做快照
假如你的数据在/usr/mysql/var下。。而你的/usr是一个lvm。。
可以通过lvm做一致性快照备份数据。。
lvcreate --size 1000M --snapshot --name varsnap /dev/(逻辑卷)
mkdir /bakfile
mount /dev/vgX/varsnap /bakfile
tar -czvf mysql.tar.gz /bakfile
注:不影响mysql的运行。。。
--------------------------------------------------------------------------------------------------------------------
其他摘要:
LVM(逻辑分区管理)中的几个概念: ===================================================== 步骤: 1.准备物理分区(Physical Partions) |
硬raid5阵列做lvm逻辑卷管理器记录
250G x 7,先做硬RAID5, 再做LVM(Logicl Volume Manager 逻辑卷管理器)的一些记录,贴在这里了。
linux/uxin类下的,windows的服务器就请略过。
看本地硬盘信息
[root@backup root]# fdisk -l
Disk /dev/cciss/c0d0: 1500.1 GB, 1500153831424 bytes
255 heads, 63 sectors/track, 182383 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/cciss/c0d0 doesn’t contain a valid partition table
PV相关操作
pvcreate /dev/cciss/c0d0 # 初始化硬盘,建立整个硬盘PV,依提示有可能需要运行vgscan. 如果需要按分区来建使用LVM,则需要运行FDISK分区,并更改分区表为8e
VG相关操作
vgcreate MSA20 /dev/cciss/c0d0 #建立VG
vgchange -a y/n MSA20 #激活/停用VG
vgremove MSA20 #移除VG
vgextend MSA20 /dev/sdb #MSA20卷空间不足时, 加新硬盘sdb来增容
vgreduce MSA20 /dev/sdb #移除/dev/sdb的PV
vgdisplay #查看VG信息
vgreduce –removemissing MSA20 #解决Couldn’t find device with uuid ‘xx-xx-xxxx’
LV相关操作
lvcreate -L 1024G -n MSA20_LV1 MSA20 # 建一个1T的LV1逻辑卷
lvcreate -l 44707 -n MSA_LV1 MSA20 #使用全部VG容量建LV,其中vgdisplay |grep “Total PE”得到Total PE值44707
lvremove /dev/cciss/c0d0 #删除LV,需要先umount
lvextand -L +1G /dev/cciss/c0d0 #增加1G的lv容量,需要保证VG有剩余空间. 完成后还需要文件系统扩容
resize2fs /dev/ddd/lv01 #文件系统的扩容,续上面操作. 依提示可能需要运行e2fsck,也可以加-f 强制扩容
格式化
mkfs.ext3 /dev/MSA20/MSA20_LV1
挂载
mount /dev/MSA20/MSA20_LV1 /data
[root@backup data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 66G 25G 38G 40% /
/dev/sda1 487M 19M 443M 5% /boot
none 249M 0 249M 0% /dev/shm
/dev/MSA20/MSA20_LV1 1008G 88M 957G 1% /data
其它
LV,PV状态显示Not available时,需要再激活,以LV为例: lvchange -a y /dev/MSA20/MSA20_LV1
附: 一篇不错的LVM资料
LVM(Logicl Volume Manager),逻辑卷管理器,通过使用逻辑卷管理器对硬盘存储设备进行管理,可以实现硬盘空间的动态划分和调整。
一、 基本概念
1、 物理卷—–PV(Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
2、 卷组——–VG(Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
3、 逻辑卷—–LV(Logical Volume)
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组。
4、 物理区域–PE(Physical Extent)
物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
5、 逻辑区域—LE(Logical Extent)
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
6、 卷组描述区域—–(Volume Group Descriptor Area)
卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。
二、 LVM的一般操作过程
1、 在磁盘分区上建立物理卷
#fdisk /dev/hdb
#pvdisplay /dev/hdb1 //在已经建立好的分区或硬盘上建立物理卷
#pvcreate /dev/hdb1
2、 使用物理卷建立卷组
#vgcreate myVG /dev/hdb1 //建立卷组,日后可以根据需要添加新的物理卷到已有卷组中
3、 在卷组中建立逻辑卷
#lvcreate –L 10M –n myLV1 myVG //从已有卷组建立逻辑卷,通常只分配部分空间给该逻//辑卷
4、 在逻辑卷上建立文件系统
5、 将文件系统挂载到Linux系统的目录树中
6、 在卷组中添加新的物理卷
当卷组中没有足够的空间分配给逻辑卷时,可以使用vgextend命令添加新的物理卷到该卷组中,来扩充卷组容量。在一引起特殊的情况下也可以把卷组中现有的物理卷移出卷组。
#vgextend myVG /dev/hdb2
7、 扩充逻辑卷的容量
当逻辑卷的空间不能满足需要时,可以使用lvextend命令把卷组中的空闲空间分配到该逻辑卷以扩展逻辑卷的容量。在逻辑卷的空闲空间过大时,也可以使用lvreduce命令缩减逻辑卷的容量。这样就实现了逻辑卷容量的动态调整。
#lvextend –L +4M /dev/myVG/myLV
8、 调整逻辑卷中文件系统的大小
三、 常用命令
1、 物理卷命令
一般维护命令:
#pvscan //在系统的所有磁盘中搜索已存在的物理卷
#pvdisplay 物理卷全路径名称 //用于显示指定物理卷的属性。
#pvdata 物理卷全路径名称 //用于显示物理卷的卷组描述区域信息,用于调试目的。
#pvchange –x|–allocation {y|n} 物理卷全路径名 //用于改变物理卷的分配许可设置
物理卷的创建与删除命令
#pvcreate 设备全路径名 //用于在磁盘或磁盘分区上创建物理卷初始化信息,以便对
//该物理卷进行逻辑卷管理。
#pvmove 源物理卷全路径我[目的物理卷全路径名] //用于把某物理卷中的数据转
//移到同卷组中其他的特刊卷中。
2、 卷组命令
一般维护命令
#vgscan //检测系统中所有磁盘
#vgck [卷组名] //用于检查卷组中卷组描述区域信息的一致性。
#vgdisplay [卷组名] //显示卷组的属性信息
#vgrename 原卷组名 新卷组名
#vgchange -a y|n [卷组名] //改变卷组的相应属性。是否可分配
#vgchange -l 最大逻辑卷数 //卷组可容纳最大逻辑卷数
#vgchange -x y|n [卷组名] //卷是否有效
#vgmknodes [卷组名|卷组路径] //用于建立(重新建立)已有卷组目录和其中的设备文
//件
卷组配置的备份与恢复命令
#vgcfgbackup [卷组名] //把卷组中的VGDA信息备份到“/etc/lvmconf”目录中的文件
#vgcfgrestore -n 卷组名 物理卷全路命名 //从备份文件中必得指定物理卷的信息
卷组的建立与删除命令
#vgcreate 卷组名 物理卷全路径名[物理卷全路径名]
#vgremove 卷组名
卷组的扩充与缩小命令
#vgextend 卷组名 物理卷全路径名[物理卷全路径名]
#vgreduce 卷组名 物理卷全路径名[物理卷全路径名]
卷组的合并与拆分
#vgmerge 目的卷组名 源卷组名 //合并两个已经存在的卷组,要求两个卷组的物理
//区域大小相等且源卷组是非活动的。
#vgsplit 现有卷组 新卷组 物理卷全路径名[物理卷全路径名]
卷组的输入与输出命令
#vgexport 卷组名
#vgimport 卷组名 卷组中的物理卷[卷组中的物理卷]
3、 逻辑卷命令
一般命令
#lvscan
#lvdisplay 逻辑卷全路径名[逻辑卷全路径名]
#lvrename 旧逻辑卷全路径名 新逻辑卷全路径名
#lvrename 卷组名 旧逻辑卷名 新逻辑卷名
#lvchange
#e2fsadm -L +|- 逻辑卷增减量 逻辑卷全路径名
逻辑卷的创建与删除命令
#lvcreate
#lvremove
逻辑卷的扩充与缩小命令
#lvextend -L|–size +逻辑卷大小增量 逻辑卷全路径名
#lvreduce q -L|–size +逻辑卷减小量 逻辑卷全路径名
4、 逻辑卷管理命令
#lvmdiskscan //检测所有的SCSI、IDE等存储设备
#lvmchange -R|–reset //复位逻辑卷管理器
#lvmsadc [日志文件全路径名] //收信逻辑卷管理器读写统计信息,保存到日志文
//件中。
#lvmsar 日志文件全路径名 //从lvmsadc命令生成的日志文件中读取并报告逻辑卷
//管理器的读写统计信息。