lvm :logical volume manage 逻辑卷管理器
可以讲多个物理分区整合在一起,让这些分区看起来就像是一个磁盘一样。
功能:
在不影响数据的情况下弹性调整磁盘的容量
创建系统快照,用于备份大量数据。
LVM 的各个阶段及命令
pv:physical volume 物理卷
LVM的最底层
命令:
- pvcreate :将实体 partition 建立成为 PV ;
- pvscan :搜寻目前系统里面仸何具有 PV 的磁盘;
- pvdisplay :显示出目前系统上面的 PV 状态;
- pvs 显示多少个物理卷
- pvmove移动数据
- pvremove :将 PV 属性移除,让该 partition 丌具有 PV 属性。
- #pvcreate /dev/sda9
- #pvcreate /dev/sda{5,6,7}
VG :volume group 卷组
VG就是把多个PV整合到一起,组成一个大磁盘。指定PE (physical extend 物理扩展块,是LVM的最小存储块默认是4MB)大小,一个VG 最都包含65534个PE ,所以按照默认值,VG最大容量256G。
命令:
- vgcreate -s 指定PE 大小 默认4m
- vgs
- vgdisplay VGNAME
- vgextend myvg /path/to/DEVICE扩展卷组
- vgchange 设置VG是否启动
- vgreduce 在VG内删除PV
- vgremove 删除一个VG
- vgscan
- #vgcreate -s 16m vgname /dev/sda{5,6,7}
- #vgextend vgname /dev/sda8 增加vg 的容量
LV:logical volume 逻辑卷
最终的VG 还会被切成LV,LV就可以被格式化使用,也只有LV可以被格式化,
命令:
- lvcreate -L 3G -n mylv1 myvg ( -l N)
- 容量 名字 卷组 PE的个数(容量)
- #lvcreate
- #lvscan
- #lvs
- #lvdisplay
- #lvextend 在LV 内增加容量
- #lvreduce 减少容量
- #lvremove 删除一个LV
- #lvresize 对LV 进行容量大小的调整
- # lvcreate -L 30M -n lvname vgname
- 最终会发现创建的是32M,因为PE默认是4M,LV的容量是4的倍数。
PV VG LV 的关系可看下图 :
结合上面两副图我们应该对他们之间的关系有个清晰地印象了,下面我们就做一个简单的实验来看一下具体操作步骤:
要求:
1、先分出两个分区,每个分区容量为1G,且systemID标示为8e
2、用pvcreat 将物理分区新建成PV
3、用vgcreate 将PV整合为VG,VG名称为myvg,且PE大小为16m
4、用lvcreate 创建一个60M的LV ,LV名称为mylv.
5、用mke2fs 格式化这个LV,且挂载到/mnt/lvm目录下
具体操作如下:
- # fdisk -l
- /dev/sdb5 1 123 987934+ 8e Linux LVM
- /dev/sdb6 124 246 987966 8e Linux LVM
- # partprobe /dev/sdb
- #pvcreate /dev/sdb{5,6} 创建PV
- # pvdisplay
- "/dev/sdb5" is a new physical volume of "964.78 MB"
- --- NEW Physical volume ---
- PV Name /dev/sdb5
- VG Name
- PV Size 964.78 MB
- Allocatable NO
- PE Size (KByte) 0
- Total PE 0
- Free PE 0
- Allocated PE 0
- PV UUID 98pIbr-ORIu-7ymE-46st-V2ap-WCS2-lYZhrE
- # vgcreate -s 16M myvg /dev/sdb5 创建VG
- Volume group "myvg" successfully created
- # vgdisplay
- --- Volume group ---
- VG Name myvg
- System ID
- Format lvm2 版本号
- Metadata Areas 1
- Metadata Sequence No 2
- VG Access read/write
- VG Status resizable
- MAX LV 0
- Cur LV 1
- Open LV 1
- Max PV 0
- Cur PV 1
- Act PV 1
- VG Size 960.00 MB
- PE Size 16.00 MB PE的大小
- Total PE 60
- Alloc PE / Size 4 / 64.00 MB
- Free PE / Size 56 / 896.00 MB
- VG UUID YT0SBT-xa3R-2Ukr-Dd9O-fqSs-F1gW-umBFF3
- # lvcreate -L 60M -n mylv myvg 创建LV
- Rounding up size to full physical extent 64.00 MB
- #指定60m 实际创建64M,因为PE的值是16M.只能是16的倍数
- Logical volume "mylv" created
- # lvdisplay
- --- Logical volume ---
- LV Name /dev/myvg/mylv
- VG Name myvg
- LV UUID 7E5AvR-3Z6n-zBwx-iuJj-gkNj-YCQu-TxJfWw
- LV Write Access read/write
- LV Status available
- # open 1
- LV Size 64.00 MB
- Current LE 4 其实就是PE 大小就是16M
- Segments 1
- Allocation inherit
- Read ahead sectors auto
- - currently set to 256
- Block device 253:2
- # mke2fs -j /dev/myvg/mylv 格式化
- # mkdir /mnt/lvm
- # mount /dev/myvg/mylv /mnt/lvm/ 挂载
说着复杂 创建其实很简单
下面我们做一些有技术含量的实验
放大LV的容量:
1、用fdisk设置新的具有8e systemID的分区
2、利用pvcreate 构建pv
3、放大VG的容量,利用vgextend将PV 加入到我们的vgname
4、放大LV的容量,利用lvresize将新加入的PV 内的PE 加入到lvname中
5、放大文件系统的容量,通过resize2fs将文件系统的容量确实增大
- #fdisk -l
- #pvcreate /dev/sdb6
- #vgextend myvg /dev/sdb6
- #lvextend -L 100M /dev/myvg/mylv
- # resize2fs /dv/mgvg/mylv1
缩小LV的容量:
必须先卸载 而且还要强制进行文件系统检测
1、先卸载mylv
2、磁盘检查,用fsck或者e2fsck 都可以
3、直接降低文件系统容量 用resize2fs
4、降低LV的容量,利用lvreduce
5、重新挂载 到此就可以结束了
6、移除/dev/sdb6,先利用pvmove将/dev/sdb6上的数据移除,再利用vgreduce将/dev/sdb6移除vg这个组,最后再利用pvremove移除它的PV属性。即可
LVM的系统快照:
- #umount /mnt/lvm 卸载
- #e2fsck -f /dev/myvg/mylv 磁盘检查
- #resize2fs /dev/myvg/mylv 6900m 缩减 必须制定大小
- #lvreduce -L 40M /dev/myvg/mylv
- #mount /dev/myvg/mylv /mnt/lvm 重新挂载
- #df /mnt/lvm 查看 减小了
- #pvmove /dev/sdb6 /dev/sdb5
- #vgreduce myvg /dev/sdb6
- #pvscan 查看 sdb6不属于任何一个vg
- #pvremove /dev/hdb6 # 将sdb6的pv属性删除
系统快照(snapshot)是LVM的另外一个重要功能,快照就是将当时的数据记录下来,就好像照相记录一样,以后数据有任何改动,原数据会被移动到快照区,没有被改变的区域则由快照区与文件系统共享。
如图所示,我们就可以看到,快照区的容量远远小于数据的容量,他只用存储改变的数据,所以说系统快照是很好的备份工具,用具备份大量的数据,同时也不影响系统的正常运行。
由于快照区和原本的LV共享很多PE,所以快照区与被快照的区域必须在同一个VG上。
命令:
#lvcreate -L 30m -p r -s -n mylvsnap /dev/myvg/mylv
-L 30M 指定创建的快照的容量
-p r 只读
-s 指定为创建快照
-n 快照的名称
/dev/myvg/mylv 指定对哪个lv创建快照
创建成功后就是挂载,可以通过/mnt/snap/访问原LV里的数据
#mkdir /mnt/snap
#mount /dev/myvg/mylvsnap /mnt/snap
此时我们就可以备份数据了,也不会影响系统正常的数据读取,
#cd /mnt/snap
# tar -jcf /backups/lvm.tar.gz * 备份好了
先卸载lvm 在把LV格式化 然后用备份的数据恢复
#umount /mnt/lvm
#mke2fs -j /dev/myvg/mylv
#mount /dev/myvg/mylv /mnt/lvm
#tar -jxf /backups/lvm.tar.gz -C /mnt/lvm
#ll /mnt/lvm
好了,数据恢复了 ,
最后所有的实验做完了 ,我们要做一下善后处理工作 删除LVM 把所有的分区恢复成原来的systemID,做到善始善终,以便我们做其他实验。
1. 先卸除系统上面的 LVM 文件系统 (包括忚快照与所有 LV);
#umount /mnt/lvm
#umount /mnt/snapshot
2. 使用 lvremove 删除 LV ;
#lvremove /dev/vgname/lvname
#lvremove /dev/vgname/lvss
3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
# vgchange -a n vgname
4. 使用 vgremove 删除 VG:
#vgremove vgname
5. 使用 pvremove 删除 PV;
#pvremove /dev/hda{5,6,7}
6. 最后,使用 fdisk 修改 ID 回来啊!