首页 > 代码库 > lvm(逻辑卷管理)的魅力
lvm(逻辑卷管理)的魅力
近来,随着课程的深入,开始接触到lvm逻辑卷。由开始的不懂,到现在的半知半懂,慢慢的感受到了lvm逻辑卷由内而外散发出的魅力。作为一个小白,为了能更好地学习和理解lvm逻辑卷的知识,特趁着难得的休息时间,总结一下自己所学的关于lvm逻辑卷的知识,有错误的地方,请各位大神指正,共同学习!
本人认为lvm逻辑卷主要有两大魅力:
1、逻辑卷的边界是可变化的。
2、lvm支持快照(snapshot)。
各位看官别着急,且听小生慢慢说来:
前言
首先,让我们思考一个问题:为什么会出现LVM技术?
本人是这样认为的:对于我们常用PC的人来说,我们总是不得不对磁盘执行分区。硬盘分区是一种令人厌烦,但公认是使操作系统设置和运行进程不可或缺的一部分。因为要做好工作,就要精确地估计每个分区需要的空间,所以硬盘分区很烦人。如果估计失误了,分得太大,会浪费空间;分得太少了,空间又不够用。为了解决这个问题,你甚至可能需要执行整个系统备份、将硬盘清除干净,然后将所有数据恢复到新的(可能比原来好一些)分区布局中。对于服务器来说,也是如此。传统的这种方法极为不便,不能动态地扩展或缩减分区的大小,所以就有了后来的lvm的出现。
一、lvm、相关概念以及两大魅力简介
1、lvm简介
LVM: Logical Volumn Manager (逻辑卷管理器),它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。它于1998年发布到Linux社区中,它允许你在Linux系统上用简单的命令行管理一个完整的逻辑卷管理环境。
LVM实质上是将一个或多个底层块设备组织一个逻辑的工具。
2、lvm重要概念
重要的概念有:Physical volume (PV):物理卷, Physical extent (PE):盘区,Volume group (VG):卷组,Logical volume(LV) :逻辑卷
以下是概念的详细解释:
物理存储介质(The physical media):这里指系统的存储设备,如硬盘/分区,是存储系统最低层的存储单元。
物理卷(PV) : LVM的基本存储逻辑块,一般会把硬盘/分区做成物理卷,甚至底层块设备是raid也能被做成物理卷。PV不同于基本的物理存储介质(如分区、磁盘等),它包含有与LVM相关的管理参数。(物理卷不能被格式化,它没有文件系统的概念。)
物理盘区(PE) : 就是一块磁盘空间,物理卷被划分成多个同等大小的PE。大小固定,一般为4M或8M(一个PE只能属于一个逻辑卷)。
卷组(VG):LVM卷组完全类似于扩展分区,不能被直接使用必须进行再次划分。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),卷组由多个物理卷(PV)组成。
逻辑卷(LV):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统,也就是从VG中划分的逻辑分区。
下面以一个简单的图说明一下物理卷、卷组、逻辑卷之间的关系:
创建逻辑卷的过程说明:
(1)先把磁盘/分区转换为pv(物理卷)。由于物理卷没有文件系统的概念,不能被格式化,所以转换为物理卷后,原磁盘/分区的文件系统不能被保留。
(2)创建卷组,把多个物理卷添加到卷组中。实质上,创建卷组会默认或可指定PE的大小,物理卷加入卷组后,会被分割成一个个固定大小的PE。
(3)卷组相当于扩展分区,不能被直接使用,于是要在卷组中创建逻辑卷。实质上,创建指定大小的逻辑卷是在卷组中把可用的多个PE分配给逻辑卷,由于PE的大小是固定的,所以创建出的逻辑卷的大小会有偏差。由此可知,逻辑卷只能看到卷组中的PE,而无法看不到底层中有多少块物理卷。逻辑卷相当于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统。
3、lvm的两大魅力简介
到这里,我们可以知道:
(1)由于lvm可把物理卷分割成PE和划分逻辑卷的特性,可知lvm逻辑卷的边界是可以动态扩展和缩减的。实质上,逻辑卷边界的动态扩展和缩减是分为两层的:物理边界和逻辑边界各自的扩展和缩减。这里不细讲,以下会有详细事例进一步说明。
(2)lvm如果仅有逻辑卷这么一个功能,就不可能那么受欢迎了。lvm令人兴奋的是,它还支持快照的功能。有了快照后,我们对于数据库的备份就会变得非常简单+easy了。这里也不细说,以下会进一步说明。
二、lvm逻辑卷创建过程详解
lvm逻辑卷创建的整个过程大致如下:
分区 --> PV --> VG --> LV --> 将分区格式化(为分区创建文件系统)--> 挂载逻辑分区
下面,用一个实例来加深各位对lvm的理解。
1、分区
使用分区工具fdisk分区,为了使其能被lvm支持,需要把分区的系统ID改为8e(注意:一定要把分区的系统ID该为8e,否则不能将分区转换为物理卷)。
另一个分区的创建就不贴图了,各位小伙伴可以去尝试一下,很好玩的!-_-
2、创建物理卷(PV)
[root@localhost ~]# pvcreate /dev/sda3 /dev/sdb1 Physical volume "/dev/sda3" successfully created Physical volume "/dev/sdb1" successfully created
物理卷(pv)相关命令介绍:
pvcreate : 创建pv(物理卷)
pvs, pvdisplay : 查看pv
pvremove : 移除pv
pvmove : 移动pv(把该物理卷上的数据移到卷组的其他物理卷上)
pvscan : 扫描有哪些pv
3、创建卷组(VG)
[root@localhost ~]# vgcreate -s 8 myvg /dev/sda3 /dev/sdb1 Volume group "myvg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 10.02g 10.02g vg0 1 4 0 wz--n- 59.99g 7.99g [root@localhost ~]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 10.02 GiB PE Size 8.00 MiB #指定PE的大小为8M Total PE 1282 Alloc PE / Size 640 / 5.00 GiB Free PE / Size 642 / 5.02 GiB VG UUID 5cHXI4-WSz9-ACFQ-IiQj-iUIW-vcxd-gahSK8
卷组(VG)相关命令介绍:
vgcreate : 创建卷组,-s 选项可以指定PE的大小
vgs, vgdisplay :查看卷组的信息
vgremove : 移除卷组
vgextend : 扩展卷组的空间
vgreduce : 缩减卷组的空间
缩减卷组中的空间,一般都是通过移除某一个物理卷来完成的。
需要注意的是:
移除卷组中的某一物理卷时,应该先使用pvmove命令把该物理卷上的数据移到卷组上别的分区,然后才用vgreduce命令指定移除该物理卷
vgscan:扫描有哪些卷组
4、创建逻辑卷(LV)
逻辑卷(LV)相关命令介绍:
lvcreate : 创建逻辑卷(lv)
-n lv_name (指定逻辑卷的名称)
-L #UNIT{mMgGtT} (指定逻辑卷的大小)
lvs,lvdisplay :查看逻辑卷的信息
lvremove : 移除指定的逻辑卷
lvextend : 扩展逻辑卷
lvreduce : 缩减逻辑卷
lvscan :扫描有哪些逻辑卷
5、格式化逻辑卷
mke2fs:用来格式化分区(为分区创建文件系统)
-t 指定文件系统类型
6、挂载分区
mount :用于挂载分区
挂载mylv逻辑分区后,就能在该逻辑分区上存储数据了!
怎样?是不是很简单啊!好了,下面让我们进一步深入lvm 吧!
以下所讲的是我们高级班的内容,要学请转入我们的高级班,只要999元!!!
-_- ,说笑的~
三、逻辑卷的扩展与缩减
lvm存储空间边界分为两类:
物理边界:物理磁盘的存储大小
逻辑边界:逻辑卷的空间大小
如下图所示:
内圆范围是文件系统(逻辑),外圆范围是存储空间(物理)。
文件系统是在存储空间上抹上一层软件级别的管理方案。因而文件系统空间大小不能大于存储空间的大小。
因此我们知道逻辑卷扩展和缩减是有要求的:
扩展:物理 --> 逻辑(先扩展物理卷,然后才扩展逻辑卷。)
缩减:逻辑 --> 物理(先缩减逻辑卷,然后才缩减物理卷。)
缩减不能少于已经存储的所有数据空间的大小!!!(缩减须谨慎!!!)
1、扩展逻辑卷
(1)先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 10.02g 5.02g vg0 1 4 0 wz--n- 59.99g 7.99g
(2)扩展物理边界
增加新的分区:
把分区转换成PV:
把新的物理卷加入卷组:
[root@localhost ~]# vgextend myvg /dev/sdb2 # vgextend扩展逻辑卷的大小 Volume group "myvg" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 15.02g 10.02g vg0 1 4 0 wz--n- 59.99g 7.99g
扩展物理边界:
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 5.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@localhost ~]# lvextend -L 10G /dev/myvg/mylv # 注意:-L 10G 是指定扩展后的逻辑卷大小为10G,并不是+10G的意思 Extending logical volume mylv to 10.00 GiB # -L指定的扩展后的逻辑卷大小不能比原来逻辑卷的大小还小 Logical volume mylv successfully resized [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 10.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
(3)扩展逻辑边界
[root@localhost ~]# blkid /dev/myvg/mylv # blkid命令可以查看块设备的UUID号,也可以查看该块设备的文件系统类型 /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" [root@localhost ~]# resize2fs /dev/myvg/mylv # resize2fs命令表示重新调整文件系统的大小(根据物理边界的大小,自动调整) resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks. The filesystem on /dev/myvg/mylv is now 2621440 blocks long. [root@localhost ~]# blkid /dev/myvg/mylv /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" [root@localhost ~]# ls /mnt # 扩展逻辑卷mylv后,数据没丢失 fstab lost+found
2、缩减逻辑卷
注意:a、缩减逻辑卷的操作是很危险的,操作不当,很有可能会使得数据丢失。请慎重!!!
b、缩减逻辑卷时,逻辑卷要离线,不能处在挂载当中!
(1)先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
[root@localhost ~]# lvs /dev/myvg/mylv LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 10.00g
(2)先制裁文件系统,并要执行强制检测
[root@localhost ~]# mount # mount命令能查看当前系统中挂载的设备 /dev/mapper/myvg-mylv on /mnt type ext4 (rw) [root@localhost ~]# umount /dev/myvg/mylv # umount命令可卸载所指定的已挂载的设备 [root@localhost ~]# e2fsck -f /dev/myvg/mylv # e2fsck -f ,强制检测逻辑卷mylv的文件系统 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/mylv: 12/655360 files (0.0% non-contiguous), 76784/2621440 blocks
(3)缩减逻辑边界
[root@localhost ~]# resize2fs /dev/myvg/mylv 5G # 这表示自动调整逻辑卷mylv的文件系统大小到5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks. The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
(4)缩减物理边界
[root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv # 这表示缩减逻辑卷mylv的存储空间到5G WARNING: Reducing active logical volume to 5.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y # 注意:这里会提示你当前的操作有可能会使得数据丢失,问你是否要继续?(想清楚额,后果自付!!!) Reducing logical volume mylv to 5.00 GiB Logical volume mylv successfully resized
(5)重新把逻辑卷挂载上去,查看数据是否丢失
呼!!!看到这里,各位看官是不是都有点视觉疲劳了?
革命尚未成功,同志仍须继续!
不过,写到这里篇幅已经不够了,本人决定另起一篇博客(是这篇博客的续写)继续写下去。
欲知后事如何,且听下回分解!
本文出自 “恒则有成” 博客,请务必保留此出处http://hjqjk.blog.51cto.com/5970897/1440623
lvm(逻辑卷管理)的魅力