您的位置:首页 > 其它

lvm(逻辑卷管理)的魅力

2014-07-20 22:45 344 查看
近来,随着课程的深入,开始接触到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: