论坛首页 综合技术论坛

LVM - 很好很强大

浏览 95391 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-11-29   最后修改:2008-11-30
LVM (Logic Volume Management,逻辑卷管理),是传统商业Unix就带有的一项高级磁盘管理工具,异常强大。后来LVM移植到了Linux操作系统上,尽管不像原来Unix版本那么强大,但瘦死的骆驼比马大,Linux的LVM仍然非常强大,可以在生产运行系统上面直接在线扩展硬盘分区,可以把分区umount以后收缩分区大小,还可以在系统运行过程中把一个分区从一块硬盘搬到另一块硬盘上面去等等,简直就像变魔术,而且这一切都可以在一个繁忙运行的系统上面直接操作,不会对你的系统运行产生任何影响,很安全。

还是拿JavaEye的网站服务器随便举个小例子吧。话说今天晚上我登录JavaEye网站服务器随便这么一查看磁盘使用状况:

df -h


竟然发现/home分区的磁盘消耗的很快
Filesystem                Size  Used  Avail Use%   Mounted on
/dev/mapper/system-home    40G   32G    8G  80%    /home


有点出乎意料,已经使用了80%,如果用光了,可就有点麻烦了,所以为了安全,把/home分区扩大5GB,多给它点硬盘空间,敲入两条shell命令

lvextend -L +5G /dev/system/home
resize_reiserfs -s +5G /dev/system/home 

先把逻辑卷扩大5GB,再把上面的reiserfs文件系统扩大5GB,前后耗时不超过3秒钟。再df -h查看一下:
Filesystem                Size  Used  Avail Use%   Mounted on
/dev/mapper/system-home    45G   32G    13G  71%    /home


哈哈,/home立刻多了5GB,搞定收工,这是不是很像变戏法,我没停任何服务,没重起服务器,大家没有任何感觉,就一切搞定,说实话我也一直觉得LVM很cool,所以我一直是LVM+Reiserfs的忠实拥趸。有兴趣学习LVM的同学可以下载后面的附件,这可是我珍藏多年的LVM秘籍!

另外强烈推荐Daniel Robbins在IBM DW网站上面关于LVM的系列文章:

通用线程: 学习 Linux LVM,第 1 部分
通用线程:学习 Linux LVM,第 2部分

另外,在大规模的生产系统上面,文件系统的管理是一个错综复杂的工作,如果你对这个方面的知识很感兴趣,你可以继续了解一下EVMS(Enterprise Volume Management System,企业级文件卷管理系统)。EVMS 为 Linux 下的所有存储技术提供了统一的、可扩展的、基于插件的 API。这意味着什么?它意味着由于 EVMS,您可以使用单个工具来对磁盘分区、创建 LVM 对象以及甚至创建 Linux 软件 RAID 卷。并且可以使用这一工具以强有力的方式合并这些技术。还是推荐看Daniel Robbins的文章:

通用线程: 高级文件系统实现者指南,第 12 部分 EVMS 简介
通用线程: 高级文件系统实现者指南,第 13 部分EVMS 详情

BTW:Daniel Robbins在IBM DW所有的文章都值得一读,特别是《通用线程: 高级文件系统实现者指南》这个系列。

介绍点背景知识:Daniel Robbins是Gentoo Linux的创始人,Linux社区赫赫有名的牛人。早几年微软公司成立了一个开源实验室,把Daniel Robbins给忽悠过去了,此事曾经在Linux社区闹的沸沸扬扬。Daniel Robbins当时是报着推动微软公司开源,并且促进微软和开源社区之间交流的目的而去的,但是Daniel Robbins在微软公司不到一年就辞职离开了,原因是发现被微软忽悠了,微软根本没有足够开源的诚意,他在微软也就是一个闲职。


   发表时间:2008-11-29   最后修改:2008-11-29
有时间改改自己的不太合理硬盘分区

引用

3.9 扩展LV
为逻辑卷增加容量可用使用lvextend,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如
# lvextend -L12G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 12 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
将扩大逻辑卷testlv的容量为12GB。
# lvextend -L+1G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 13 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
将为LV testlv再增大容量1GB至13GB。
为LV扩容的一个前提是:LV所在的VG有足够的空闲存储空间可用。
在为LV扩容之后,应同时为LV之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。
3.9.1 ext2/ext3
除非内核已有ext2online 补丁,否则在改变ext2/ext3文件系统的大小时应卸载它:
# umount /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
# mount /dev/testvg/testlv /home
这里假设testlv安装点为/home。在es2fsprogs-1.19或以上版本中包含resize2fs命令。
在LVM发行包中有一个称为e2fsadm的工具,它同时包含了lvextend与resize2fs的功能,如:
# e2fsadm -L+1G /dev/testvg/testlv
等价于下面两条命令:
# lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用户仍需首先卸载文件系统。
3.9.2 reiserfs
与ext2不同,Reiserfs不必卸载文件系统,如:
# resize_reiserfs -f /dev/testvg/testvl
3.9.3  xfs
SGI XFS文件系统必须在安装的情况下才可改变大小,并且要使用安装点而不是块设备,如:
# xfs_growfs /home
3.10 缩小LV
逻辑卷可扩展同样也可缩小,但应在缩小LV之前首先减小文件系统,否则将可能导致数据丢失。
3.10.1 ext2/ext3
可以使用LVM的工具e2fsadm操作,如:
# umount /home
# e2fsadm -L-1G /dev/testvg/testvl
# mount /home
如果采用resize2fs,就必须知道缩少后卷的块数:
# umount /home
# resize2fs /dev/testvg/testvl 524288
# lvreduce -L-1G /dev/testvg/testvl
# mount /home
3.10.2 reiserfs
在缩小reiserfs时,应首先卸载它,如:
# umount /home
# resize_reiserfs -s-1G /dev/testvg/testvl
# lvreduce -L-1G /dev/testvg/testvl
# mount -treiserfs /dev/testvg/testvl /home
3.10.3 xfs
无法实现。
0 请登录后投票
   发表时间:2008-11-30  
哈哈,谢谢robbin的私人珍藏
0 请登录后投票
   发表时间:2008-11-30  
对LVM不了解,一直感觉很神秘,不敢去深究。原来一直总以为LVM是一种虚拟的磁盘分区,看robbin的这篇文章,时候又是用来操作实际的磁盘分区的。
不知道自己的看法是否贻笑大方了。还真希望robbin能把LVM给稍微详细介绍一下,也好让我等不了解之人不会让人笑话了。
0 请登录后投票
   发表时间:2008-11-30  
jsea 写道

对LVM不了解,一直感觉很神秘,不敢去深究。原来一直总以为LVM是一种虚拟的磁盘分区,看robbin的这篇文章,时候又是用来操作实际的磁盘分区的。 不知道自己的看法是否贻笑大方了。还真希望robbin能把LVM给稍微详细介绍一下,也好让我等不了解之人不会让人笑话了。

你想了解的这些内容,我提供的附件文档里面介绍的很详细了。
3 请登录后投票
   发表时间:2008-12-01   最后修改:2008-12-01
为什么/home自己分一个区呢?

一般我都是/boot分100M,再分点给swap,剩下的都给/就行了

如果是多块硬盘,直接做好Raid。

Robbin遇到的问题不是严重的场景,因为不是你的硬盘不够用,而是当初分区的时候没有设计这么长远而已。真正的大问题是所有硬盘都快用光了,需要新增硬盘,这就需要服务器的RAID卡支持在线扩容,在线扩容后会新增一个逻辑分区,这才是LVM大展身手的时候,直接把新扩充出来的逻辑分区补充给/就行了。从这一点上来说,品牌服务器确实比DIY的服务器考虑周全的多。

不过一开始就用LVM也有应用场景,那就是服务器是用做存储的,对磁盘容量有要求,已经意识到了将来某一天必然要对这个服务器动手术。否则用LVM就没有必要了,系统管理员的工作之一就是整理磁盘上的非重要数据,将磁盘使用量控制在一定范围内,而不能任由其无限制地增长

BTW: JavaEye在google中国的rank真高,这个帖子昨天发的今天已经上搜索“LVM”的首页了,厉害 
0 请登录后投票
   发表时间:2008-12-01  
hongliang 写道
为什么/home自己分一个区呢?

一般我都是/boot分100M,再分点给swap,剩下的都给/就行了

如果是多块硬盘,直接做好Raid。

Robbin遇到的问题不是严重的场景,因为不是你的硬盘不够用,而是当初分区的时候没有设计这么长远而已。真正的大问题是所有硬盘都快用光了,需要新增硬盘,这就需要服务器的RAID卡支持在线扩容,在线扩容后会新增一个逻辑分区,这才是LVM大展身手的时候,直接把新扩充出来的逻辑分区补充给/就行了。从这一点上来说,品牌服务器确实比DIY的服务器考虑周全的多。

不过一开始就用LVM也有应用场景,那就是服务器是用做存储的,对磁盘容量有要求,已经意识到了将来某一天必然要对这个服务器动手术。否则用LVM就没有必要了,系统管理员的工作之一就是整理磁盘上的非重要数据,将磁盘使用量控制在一定范围内,而不能任由其无限制地增长

BTW: JavaEye在google中国的rank真高,这个帖子昨天发的今天已经上搜索“LVM”的首页了,厉害 


菜鸟了吧,还是科普一下:

1、如果你因为各种不可预知的原因,需要格式化重装操作系统的话,你可以选择不格式化/home,否则你就得干净彻底的来装了,这对于很多上面跑了n多系统的服务器来说,是一件很恐怖的事情。

2、服务器掉电重起,在个别情况下会导致文件系统破坏,你是想整个服务器挂掉,还是幸运的只挂掉某个分区?

3、在多块物理硬盘的服务器,逻辑分区可以分到不同的物理硬盘上

LVM在高端Unix上面有很多玩法,不过那些玩法都是要接专用存储设备的,这个咱也是外行,不多提了。
0 请登录后投票
   发表时间:2008-12-01   最后修改:2008-12-01
robbin 写道

菜鸟了吧,还是科普一下:

1、如果你因为各种不可预知的原因,需要格式化重装操作系统的话,你可以选择不格式化/home,否则你就得干净彻底的来装了,这对于很多上面跑了n多系统的服务器来说,是一件很恐怖的事情。


以前这种做法狠流行,后来狠少遇到这种情景了。服务器经常重装系统(比如一年一次以上),我觉得是狠恐怖的事情了。

好吧,现在我明白你为什么如此用心良苦,把/home单独列出来一个分区了。可是这跟LVM也没啥关系,当初你把/home分的再大一点不就行了,既然大部分有用的东西都在/home下,当初干嘛给系统分区留那么多空间呢 

另外,我狠少遇到需要LVM上阵的情景,没有LVM的相关管理经验。我想问一下,你的/home是建立在lvm上的逻辑分区上的逻辑卷,如果你重装系统,格式化硬盘分区,可以选择单独格式化LVM卷(除了/home的/卷)并将系统安装上去?我不太懂这个,按照我的菜鸟理解,重装系统格式化的应该是硬盘分区(disk partition)而不是LVM逻辑卷(LVM logic volume)吧,这样一来,你的LVM逻辑分区上的数据还能保留?

robbin 写道

2、服务器掉电重起,在个别情况下会导致文件系统破坏,你是想整个服务器挂掉,还是幸运的只挂掉某个分区?


这个侥幸心理不可取,多一个分区不等于机会就减小一些,因为无论你是哪个分区,最容易挂掉的总是数据最热的那个  解决这个问题只能靠服务器硬件级别来增加可靠性,软件上怎么努力都于事无补啊。

robbin 写道

3、在多块物理硬盘的服务器,逻辑分区可以分到不同的物理硬盘上


这其实应该是RAID干的事

robbin 写道

LVM在高端Unix上面有很多玩法,不过那些玩法都是要接专用存储设备的,这个咱也是外行,不多提了。


同意。其实这也正是LVM真正有价值的地方。

我只是想说LVM最大的用处是跟RAID结合,提供诸如硬件级别的在线扩容等高端应用。你这种情景搞来搞去还是自己机器上已经有的几块硬盘,最多就是弥补一下当初分区的欠妥之处,使得日后能够灵活应对而已。这不是LVM的本意。而且如果你不是使用3(逻辑分区分到不同的物理硬盘上,类似Stripe模式)的话,LVM会对性能造成一定影响,也带来了一些管理复杂度。而如果用Stripe,那也必然影响数据可靠性,系统维护的好,硬盘挂了的几率比格式化系统要高的多。当然无论是性能影响还是管理复杂度,这些问题都几乎可以忽略不计。我只是觉得有些不必要。

我写这么多就怕有些菜鸟听你这么一忽悠,就呼啦啦不管3721全跑去学LVM了,哈哈,你的影响力可不小哦  LVM这东西是用到才觉得好,只可用,不可特意去学。用不用LVM要看具体的生产环境,如果就那么几块硬盘几百G空间在那搞来搞去,用不用LVM还是需要仔细分析才能决定的,免得带来不必要的系统复杂。
5 请登录后投票
   发表时间:2008-12-02  
同意楼上 技术这东西 用的时候现学就管用。 关键是价值
0 请登录后投票
   发表时间:2008-12-02  
hongliang 写道
我只是想说LVM最大的用处是跟RAID结合,提供诸如硬件级别的在线扩容等高端应用
能否更详细些 ?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics