LVM ( Logical Volume Manager ) 是基于内核的一种逻辑卷管理器,允许用户动态调整文件系统大小,可以利用快照功能备份数据。
LVM分为:物理卷 卷组 逻辑卷
物理卷:(PV)是LVM最底层概念,和磁盘份区是对应的关系(一个分区对应一个物理卷,由命令生成。)
卷 组:(VG)由一个或多个物理卷组成,大小取决于物理卷的个数及容量,创建时可以指定其PE大小。卷组我们可以看成是一个磁盘设备。
PE(Physical Extent)即物理长度,逻辑意义上磁盘最小存储单位,默认大小为4M。
逻辑卷:(LV)是LVM逻辑意义上的分区,可以指定多少容量来创建分区大小,最后格式化创建文件系统挂载使用。
一般常用的几个命令:
PV: pvcreate (创建物理卷)
pvremove(移除物理卷)
pvmove(把PV上的数据移动其它PV上,移除物理卷之前使用。)
pvscan
pvs(简单查看PV卷)
pvdispaly(查看PV卷的祥细信息)
vg: vgcreate(创建卷组)
vgremove(移除卷组)
vgs(简单的查看VG卷的信息)
vgscan()
vgdispaly(查看VG的详细信息)
vgextend(扩展VG)
vgreduce(缩减VG)
LV:lvcreate (创建LV卷)
lvremove (移除LV卷)
lvs (简单查看LV卷信息)
lvscan
lvdispaly (查看LV卷的祥细信息)
lvextend (扩展LV卷)
lvreduce (缩卷LV卷)
centos 6 :resize2fs 调整lv大小
*****************************************************************************************
命名方式:
dm: device mapper 设备映射
设备文件:/dev/卷组名/逻辑卷名
/dev/mapper/卷组名-逻辑卷名
假如系统是一卷组为myvg 逻辑卷为lvdata 则在目录中表示如下:
第一种:/dev/myvg/lvdata # 用户一般用此方式访问
第二种:/dev/mapper/myvg-lvdata # 内核识别
********************************************************************************************
创建LVM逻辑卷:
1、准备创建PV卷的分区
# fdisk /dev/<磁盘名>
2、创建PV卷
# pvcreate /dev/<分区名>
3、创建 VG卷组
# vgcreate vg_name /dev/sda[1...] # 可以一次指定多个PV
-s 创建时指定其PE大小,默认为4M
4、创建LV卷
#lvcreate -l <PE数量> -n <lv名称> /dev/vg_name
也可以使用 -L 指定大小,单位为M,G 等
***********start****************
1、创建磁盘分区,并把类型更改为8e LVM卷,一定要改,避免重装系统后,内核不能识别该分区
使用fdisk /dev/sda 创建新的分区 t 选项指定分区的类型。
Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 2168 2048000 82 Linux swap / Solaris /dev/sda3 2168 6527 35019103+ 5 Extended /dev/sda5 2168 2299 1057662 8e Linux LVM # 新增的 /dev/sda6 2300 2431 1060258+ 8e Linux LVM # 新增的
创建分区后,使用如下两个命令让内核重新识别新的分区
# kpartx -af /dev/sda # partx -a /dev/sda # cat /proc/partitions # 查看分区是否以被内核识别,没的重新执行以上命令
2、创建PV
[root@test ~]# pvcreate /dev/sda[5..6] Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created [root@test ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda5 lvm2 a-- 1.01g 1.01g /dev/sda6 lvm2 a-- 1.01g 1.01g
3、创建VG
[root@test ~]# vgcreate myvg /dev/sda5 /dev/sda6 # 使用了两个pv创建了一个VG Volume group "myvg" successfully created [root@test ~]# vgs # 简单查看vg的信息 VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 2.01g 2.01g
[root@test ~]# vgdisplay # 查看其祥细信息,查看时,可以指定一个VG名称。 --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write # 读写 VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 2.01 GiB # VG大小 PE Size 4.00 MiB # 默认的PE大小为4M 可以在创建VG使用-s 指定其默认大小 Total PE 515 Alloc PE / Size 0 / 0 Free PE / Size 515 / 2.01 GiB VG UUID B4Soui-Z6Fx-aEht-hTmG-lCAP-1j6Z-Bp7eJO
4、创建LV
# lvcreate -L +1.5G -n lvdata /dev/myvg # -L指定大小 -n 指定名称,可以使用小l指定其PE的个数。 Logical volume "lvdata" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lvdata myvg -wi-a----- 1.50g
5、创建文件系统(格式化)并挂载使用
# mke2fs -t ext4 /dev/myvg/lvdata # 创建文件系统,指定其为ext4的类型 # mkdir /mnt/lvmdata # 创建一个挂载目录 # mount /dev/myvg/lvdata /mnt/lvmdata/ # 挂载卷
***********end**********************
当使用过程中数据不断增大,慢慢LVM卷大小不能满足我们的需求,这时需要增加其大小.
逻辑卷扩展的步骤:
1、先确定扩展的大小;并确保所属的卷组有足够的剩余空间;不够就需要增加PV卷(VG卷满足的话这一步是可以省略的, 使用vgs查看VG卷组够不够)
# 使用fdisk命令 新建一个分区,-t 指定其类型为8e
# pv /dev/<新建的分区名>
# vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
2、扩展物理边界:
# lvextend -L [+]Size /path/to/lv_device
3、扩展逻辑边界:
# resize2fs /path/to/lv_device
**************start*******************
1、增加PV卷,扩展VG卷(如果VG卷空间足够,这一步可以省略)
[root@test ~]# vgextend myvg /dev/sda7 Volume group "myvg" successfully extended [root@test ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 3.02g 1.52g
2、扩展物理边界(相当于分区的大小)注意:+号的使用与不使用的效果。
[root@test ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lvdata myvg -wi-ao---- 1.50g [root@test ~]# lvextend -L +1G /dev/myvg/lvdata # 也可以使用小写的l 来增加PE的个数 Extending logical volume lvdata to 2.50 GiB
3、扩展逻辑边界(相当于文件系统大小。也就是说格式化后的大小,可以这么来理解)
[root@test ~]# df -h # 扩展前查看 Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 974M 13G 7% / tmpfs 729M 0 729M 0% /dev/shm /dev/mapper/myvg-lvdata 1.5G 35M 1.4G 3% /mnt/lvmdata # 物理边界己经扩展到了2.5G了但这里还是1.5 [root@test ~]# resize2fs /dev/myvg/lvdata # 扩展逻辑边界 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/lvdata is mounted on /mnt/lvmdata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/lvdata to 655360 (4k) blocks. The filesystem on /dev/myvg/lvdata is now 655360 blocks long. [root@test ~]# df -h # 扩展后的结果 Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 974M 13G 7% / tmpfs 729M 0 729M 0% /dev/shm /dev/mapper/myvg-lvdata 2.5G 35M 2.4G 2% /mnt/lvmdata # 扩展后的效果
**************end*******************
注意:如果条件允许,最好先卸载文件系统,然后使用e2fsck 检查文件系统再扩展。
缩减逻辑卷的步骤:
1、卸载卷,并执行强制检测
# e2fsck -f /path/to/lv_device
2、缩减逻辑边界:
# resize2fs /path/to/lv_device SIZE
3、缩减物理边界:
# lvreduce -L [-]Size /path/to/lv_device
4、移动PV卷数据到其它PV卷,移除卷组中的PV,再移除PV卷
************start********************
1、卸载卷,并执行强制检测
# umount /dev/myvg/lvdata # e2fsck -f /dev/myvg/lvdata
2、缩减逻辑边界
# resize2fs /dev/myvg/lvdata 2G
3、缩减物理边界
# lvreduce -L 2G /dev/myvg/lvdata # 缩减到了2G,注意不写+号就是到多少G # mount /dev/myvg/lvdata /mnt/lvmdata/ # 然后再挂载使用
4、移除空闲PV
如果此时我们要移除sda5
[root@test ~]# pvs 首先查看PV卷,看PV使用情况,此时sda5有数据在使用我们需要移动数据到其它PE PV VG Fmt Attr PSize PFree /dev/sda5 myvg lvm2 a-- 1.00g 12.00m /dev/sda6 myvg lvm2 a-- 1.01g 0 /dev/sda7 myvg lvm2 a-- 1.01g 1.01g
[root@test ~]# pvmove /dev/sda5 # 移动数据到其它PE /dev/sda5: Moved: 0.8% /dev/sda5: Moved: 50.8% /dev/sda5: Moved: 100.0%
[root@test ~]# vgreduce myvg /dev/sda5 # 缩减VG卷组
[root@test ~]# pvremove /dev/sda5 # 移除PV Labels on physical volume "/dev/sda5" successfully wiped
********************end***************
扩展卷组:
1、准备要添加的物理卷;
2、扩展卷组:
添加物理卷至卷组中;
# vgextend vg_name /path/to/pv_device
缩减卷组:
1、确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小;
2、将要移除的物理卷上的所有PE移动至其它PV
# pvmove /path/to/pv_device
3、缩减vg
# vgreduce vg_name /path/to/pv_device
快照:
由于 我们使用cp命令对数据进行复制,如果数据过大,而且正在使用,会造成时间戳不一致,导致数据还原不可用
快照卷也是一个逻辑卷,通常为只读,大小不要求和原卷一样大小,创建后的快照不会受原卷数据的影响(原卷数据改变,快照数据不会跟
着改变),可以用来备份
用快照备份完成数据后,卸载 ,删除快照卷
快照卷:逻辑卷的一种,通常为止读(-p {r|w})
创建快照卷-->挂载快照卷-->备份快照卷里的数据-->卸载快照卷-->移除快照卷
# lvcreate -s -L Size -n Name -p r /path/to/original_lv_device
-p 指定r 或rw
-L 逻辑卷的大小 ,也可以使用小写L指定其块大小
-n 指定其名
*************start******************
1、给逻辑卷/dev/vg_group1/test_lv1创建快照
[root@serverln ~]# lvcreate -L 50M -s -p r -n my_snap /dev/vg_group1/test_lv1 Rounding up size to full physical extent 52.00 MiB Volume group "vg_group1" has insufficient free space (1 extents): 13 required.
2、备份数据 (先挂载快照,再备份快照数据完成对原始卷的备份)
# mkdir /mnt/backup # mount /dev/vg_gruop1/my_snap /mnt/backup #cd /mnt/backup; tar cjvf /opt/mysql_data.tar.bz2
3、删除快照卷
# lvremove /dev/vg_group1/my_snap
***************end***********************
还有一种:牺牲快照恢复原始卷
lvcreate -L +20M -s -n lv1s /dev/vg1/lv1 创建快照 [root@root lv1]# lvs 显示LV卷 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 owi-aos-- 80.00m lv1s vg1 swi-a-s-- 20.00m lv1 0.06 [root@root lv1]# ls 查看原如卷之前的内容 config-2.6.32-358.el6.i686 symvers-2.6.32-358.el6.i686.gz vmlinuz-2.6.32- 358.el6.i686 initramfs-2.6.32-358.el6.i686.img System.map-2.6.32-358.el6.i686 [root@root lv1]# rm -rf sy* 删除原始卷一些内容 [root@root lv1]# ls config-2.6.32-358.el6.i686 System.map-2.6.32-358.el6.i686 initramfs-2.6.32-358.el6.i686.img vmlinuz-2.6.32-358.el6.i686 [root@root lv1]# umount /mnt/lv1 卸载原如卷 [root@root ~]# lvconvert --merge /dev/vg1/lv1s 用快照卷恢复原始卷 [root@root ~]# mount /dev/vg1/lv1 /mnt/lv1 [root@root ~]# ls /mnt/lv1 恢复后的数据,和之前做快照的数据一样 config-2.6.32-358.el6.i686 System.map-2.6.32-358.el6.i686 initramfs-2.6.32-358.el6.i686.img vmlinuz-2.6.32-358.el6.i686 symvers-2.6.32-358.el6.i686.gz