LVM逻辑卷管理(Logical Volume Manager)node
随着数据的逐渐增长,当初设计的磁盘大小已经知足不了如今的需求了,当磁盘面临着满盘时,运维人员如何解决问题?是换一个更大的磁盘,把原先的数据copy到如今更大的磁盘里面,继续撑一段时间,仍是寻找其它方法?LVM的出现很好的解决了这一问题。LVM是linux环境下对磁盘分区进行管理的一种机制,是创建在硬盘和分区之上的一个逻辑层,来提升磁盘分区管理的灵活性。linux
LVM有两个特性bash
一、便捷的调整文件系统大小app
二、支持快照snapshot运维
建立LVM的示意图ide
PV能够是硬盘的分区,PV组成了VG,在VG上面割取PE就组成了LVspa
物理卷physical volume (PV)设计
物理卷是硬盘分区,也能够是整个硬盘或已建立的Software RAID 卷。3d
卷组volume group (VG)code
卷组是LVM 中最高抽象层,是由一个或多个物理卷所组成的存储器池。
物理块physical extent (PE)
物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。
逻辑块logical extent (LE)
逻辑卷按“块”为单位存储,在一卷组中的全部逻辑卷的块大小是相同的。
逻辑卷logical volume (LV)
逻辑卷至关于非LVM 系统中的分区,它在卷组上创建,是一个标准的块设备,能够在其上创建文件系统
从一块硬盘到能使用LV文件系统的步骤:
硬盘----分区----PV----VG----LV----格式化(LV为ext文件系统)----挂载
1、LVM的第一个特性,便捷的调整文件系统大小
一、PV的相关操做
先对硬盘进行分区
pvcreate 建立PV
[root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6 Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created
pvromve 移除PV
[root@Redhat6 ~]# pvremove /dev/sda5 Labels on physical volume "/dev/sda5" successfully wiped
pvdisplay 显示PV的详细信息,用pvs也能够显示pv的信息
[root@Redhat6 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g /dev/sda5 lvm2 a-- 10.00g 10.00g /dev/sda6 lvm2 a-- 10.00g 10.00g
pvmove 移动pv,将此PV的数据转移至其它PV
[root@Redhat6 ~]# pvmove /dev/sda5 /dev/sda6 #把sda5的数据转移到sda6上面 /dev/sda5: Moved: 100.0%
二、VG的相关操做
vgcreate 建立vg,-s PE:指定PE大小,默认为4M
[root@Redhat6 ~]# vgcreate myvg /dev/sda5 /dev/sda6 Volume group "myvg" successfully created
vgdisplay 显示VG的详细信息,用vgs也能够显示VG的信息
[root@Redhat6 ~]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 25.01 GiB PE Size 4.00 MiB Total PE 6402 Alloc PE / Size 0 / 0 Free PE / Size 6402 / 25.01 GiB VG UUID cLkCtE-LB7X-SYCE-GcKF-I30f-pBYH-MTCLZC
vgremove 移除vg,只需跟vg的名称便可
[root@Redhat6 ~]# vgremove myvg Volume group "myvg" successfully removed
vgextend vg的扩展,先必须添加其它的PV
首先准备好一个PV--->而后使用vgextend命令便可完成扩展
[root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6 #建立PV Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created [root@Redhat6 ~]# vgcreate myvg /dev/sda5 /dev/sda6 #建立VG Volume group "myvg" successfully created [root@Redhat6 ~]# pvcreate /dev/sda3 #把另一个分区建立为PV Physical volume "/dev/sda3" successfully created [root@Redhat6 ~]# vgextend myvg /dev/sda3 #在myvg组里面扩展VG Volume group "myvg" successfully extended
vgreduce vg的缩减,
肯定要移除的PV--->将此PV的数据转移至其它PV---->从卷组中将此PV移除
[root@Redhat6 ~]# pvs #查看PV,肯定要移除哪一个PV PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g /dev/sda3 myvg lvm2 a-- 5.01g 5.01g /dev/sda5 myvg lvm2 a-- 10.00g 3.00g /dev/sda6 myvg lvm2 a-- 10.00g 10.00g [root@Redhat6 ~]# pvmove /dev/sda3 /dev/sda5 #把sda3的数据转移到sda5上面 /dev/sda3: Moved: 100.0% [root@Redhat6 ~]# vgreduce myvg /dev/sda3 #从VG中把PV移除 Removed "/dev/sda3" from volume group "myvg" [root@Redhat6 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g /dev/sda3 lvm2 a-- 5.01g 5.01g /dev/sda5 myvg lvm2 a-- 10.00g 3.00g /dev/sda6 myvg lvm2 a-- 10.00g 10.00g [root@Redhat6 ~]#
三、LV的相关操做
lvcreate 建立LV,相关参数:-l 指定PE个数,-L指定LV的大小,
-s建立一个快照卷,-n LV的名称
[root@Redhat6 ~]# lvcreate -L 5G -n lv1 myvg Logical volume "lv1" created
lvdisplay 显示LV的详细信息,用lvs也能够显示LV的信息
[root@Redhat6 ~]# lvdisplay --- Logical volume --- LV Path /dev/myvg/lv1 LV Name lv1 VG Name myvg LV UUID 7Ewvyg-pEFI-o4XL-kFDa-Jtvl-hmak-5fg3qT LV Write Access read/write LV Creation host, time Redhat6, 2013-07-23 05:42:33 +0800 LV Status available # open 0 LV Size 5.00 GiB #建立一个5G的lv Current LE 1280 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
lvremove 移除lv,须要移除lv的设备文件:
/dev/myvg/lv1或者/dev/mapper/myvg-lv1
[root@Redhat6 ~]# lvremove /dev/myvg/lv1 Do you really want to remove active logical volume lv1? [y/n]: y Logical volume "lv1" successfully removed
lvextend 扩展LV
先肯定要扩展多大-->肯定当前VG有足够的空闲空间-->扩展(一、物理边界---二、逻辑边界)
当VG不够时,先增长PV,在扩展VG,最后在VG上面扩展LV。
[root@Redhat6 ~]# mke2fs -t ext4 /dev/myvg/lv1 #先把lv格式化 [root@Redhat6 ~]# lvextend -L +4G /dev/myvg/lv1 #实现物理扩容 Extending logical volume lv1 to 9.00 GiB #以前只有5G,如今扩了4G Logical volume lv1 successfully resized [root@Redhat6 ~]# resize2fs /dev/myvg/lv1 #实现逻辑扩容 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/lv1 to 2359296 (4k) blocks. The filesystem on /dev/myvg/lv1 is now 2359296 blocks long.
lvreduce 缩小LV
先卸载--->而后减少逻辑边界---->最后减少物理边界--->在检测文件系统 ====谨慎用===
[root@Redhat6 ~]# umount /dev/mapper/myvg-lv1 [root@Redhat6 ~]# e2fsck -f /dev/myvg/lv1 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/lv1: 13/589824 files (0.0% non-contiguous), 73829/2359296 blocks [root@Redhat6 ~]# resize2fs /dev/myvg/lv1 7G #把lv减小到7G,减小了2G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/lv1 to 524288 (4k) blocks. The filesystem on /dev/myvg/lv1 is now 524288 blocks long. [root@Redhat6 ~]# lvs #查看lv的大小发现并无实际的减小 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 myvg -wi-a---- 9.00g root vg0 -wi-ao--- 20.00g swap vg0 -wi-ao--- 2.00g usr vg0 -wi-ao--- 10.00g var vg0 -wi-ao--- 20.00g [root@Redhat6 ~]# lvreduce -L -2G /dev/myvg/lv1 #减小lv的物理边界,指定减小2G WARNING: Reducing active logical volume to 7.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to 7.00 GiB Logical volume lv1 successfully resized [root@Redhat6 ~]# lvs #查看lv的大小发现已经实际的减小了 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 myvg -wi-a---- 7.00g root vg0 -wi-ao--- 20.00g swap vg0 -wi-ao--- 2.00g usr vg0 -wi-ao--- 10.00g var vg0 -wi-ao--- 20.00g [root@Redhat6 ~]# e2fsck -f /dev/myvg/lv1 #减小以后检查文件系统 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/lv1: 13/131072 files (0.0% non-contiguous), 43698/524288 blocks
2、LVM的第二个特性,在备份数据的时候创键快照卷
当须要备份LV里面的数据时,且LV的数据也在进行写操做时,这个时候建立快照就颇有必要了,快照是一个访问LV里面数据的一个通道,他不会保存LV里面全部的数据,当LV某些PE里面数据变化时,快照保存以前PE的数据,未变化的PE将不会被保存。
步骤:
分区--->建立PV--->建立VG--->建立LV--->格式化LV为ext4--->挂载--->写入数据--->须要备份(建立快照)--->建立快照卷--->再次继续写入数据---->挂载快照卷--->备份以前的数据到快照卷里面--->卸载快照--->删除快照卷
root@station128 ~]# fdisk /dev/sda #先创建两个逻辑分区,大小为10G Command (m for help): n First cylinder (9165-15665, default 9165): Using default value 9165 Last cylinder, +cylinders or +size{K,M,G} (9165-15665, default 15665): +10G Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 8e #并改成LVM文件系统 Changed system type of partition 5 to 8e (Linux LVM) Command (m for help): n First cylinder (10471-15665, default 10471): Using default value 10471 Last cylinder, +cylinders or +size{K,M,G} (10471-15665, default 15665): +10G Command (m for help): t Partition number (1-6): 6 Hex code (type L to list codes): 8e Changed system type of partition 6 to 8e (Linux LVM) Command (m for help): w [root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6 #建立PV Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created [root@Redhat6 ~]# vgcreate -s 8M myvg /dev/sda5 /dev/sda6 #建立VG,并指定PE为8M Volume group "myvg" successfully created [root@Redhat6 ~]# lvcreate -L 4G -n lv1 myvg #建立LV为4G Logical volume "lv1" created [root@Redhat6 ~]# mkfs -t ext4 /dev/myvg/lv1 #格式化LV为ext4 [root@Redhat6 ~]# blkid #显示设备的UUID及文件系统类型,及卷标 /dev/mapper/vg0-var: UUID="c9776f08-bbaf-4a36-a009-3e16a09ad924" TYPE="ext4" /dev/sda1: UUID="dc3cc214-a9f6-4730-a186-d08765ccfa4f" TYPE="ext4" /dev/sda2: UUID="zPpbgE-0Ip7-A4m2-GG4K-sBrC-eUeU-V8VdCI" TYPE="LVM2_member" /dev/sda5: UUID="e5eLw1-JTrG-H9Q7-18qA-SrPV-axMc-QLPW5M" TYPE="LVM2_member" /dev/sda6: UUID="7OOZcJ-XzLf-zJJq-JbdF-e386-xCTl-Ym2UE3" TYPE="LVM2_member" /dev/mapper/vg0-root: UUID="bae7835a-af3b-4935-a04b-5932b2fc123b" TYPE="ext4" /dev/mapper/vg0-swap: UUID="3e0cb4a7-d393-4f75-af12-1fe6e8c96273" TYPE="swap" /dev/mapper/vg0-usr: UUID="46d516b8-03ea-4c0d-bb03-0e9d6893bd1a" TYPE="ext4" /dev/mapper/myvg-lv1: UUID="2d44718c-993d-42e6-896b-05e06af45aee" TYPE="ext4" [root@Redhat6 ~]# mkdir /mnt/lv1 #建立LV的挂载点 [root@Redhat6 ~]# mount /dev/myvg/lv1 /mnt/lv1/ #挂载LV [root@Redhat6 ~]# cd /mnt/lv1/ #进入到LV的挂载点 [root@Redhat6 lv1]# ls lost+found [root@Redhat6 lv1]# cp /etc/rc.sysinit /etc/inittab ./ #copy一个文件到LV的挂载目录里面 [root@Redhat6 lv1]# ls inittab lost+found rc.sysinit [root@Redhat6 lv1]# lvcreate -L 50M -s -p r -n MY_SNAP /dev/myvg/lv1 #建立快照卷为50M,且只能读,名称为MY_SNAP Rounding up size to full physical extent 56.00 MiB Logical volume "MY_SNAP" created [root@Redhat6 lv1]# mkdir /mnt/snap #建立快照卷的挂载点 [root@Redhat6 lv1]# mount /dev/myvg/MY_SNAP /mnt/snap/ #挂载快照卷 mount: block device /dev/mapper/myvg-MY_SNAP is write-protected, mounting read-only [root@Redhat6 lv1]# mkdir /backup #建立备份目录 [root@Redhat6 lv1]# tar -jcf /backup/lv1.tar.bz2 /mnt/snap/* #把快照卷里面的数据归档 tar: Removing leading `/' from member names [root@Redhat6 lv1]# cp /etc/fstab /mnt/lv1/ #copy文件到LV文件,使LV文件与以前快照的文件有所改变 [root@Redhat6 lv1]# umount /dev/myvg/MY_SNAP #备份完成后,卸载快照卷的挂载点 [root@Redhat6 lv1]# lvremove /dev/myvg/MY_SNAP #移除快照卷 Do you really want to remove active logical volume MY_SNAP? [y/n]: y Logical volume "MY_SNAP" successfully removed [root@Redhat6 lv1]# cd /mnt/lv1/ [root@Redhat6 lv1]# ls #能够查看到LV文件里面有3个文件 fstab inittab lost+found rc.sysinit [root@Redhat6 lv1]# cd /backup/ [root@Redhat6 backup]# tar xf lv1.tar.bz2 #解压以前备份的文件 [root@Redhat6 backup]# ls lv1.tar.bz2 mnt [root@Redhat6 backup]# cd mnt/lv1/ [root@Redhat6 lv1]# ls #查看到快照只备份了以前的文件 inittab lost+found rc.sysinit [root@Redhat6 lv1]#