Loading... <p style="text-indent: 2em">LVM(Logical Volume Manager,逻辑卷管理)是CentOS6中常用的磁盘管理的工具。常用于CentOS6上,提供了分区的动态扩展、缩减等功能。目前的常用版本为LVM2。</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">结构:</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180721-35.png" title="1453272240237675.png" alt="LVM.png" /></p> <p style="text-indent: 2em"><strong>一、物理卷</strong></p> <p style="text-indent: 2em">LVM的物理卷以分区为单位。通常情况下,会以一个硬盘一个分区的情况下进行容量扩展。</p> <p style="text-indent: 2em">在分区之后,要使用fisk命令来改变分区的类型,LVM的磁盘类型的ID号为8e。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-22.png" title="1458891677324743.png" alt="分区.png" /></p> <p style="text-indent: 2em">这里使用sdb1到sdb3这三个分区来做lvm2的试验。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-8.png" title="1458891758264084.png" alt="fdisk_t_8e.png" /></p> <p style="text-indent: 2em">分区完成后,通过partx来使新分区生效。</p> <p style="text-indent: 2em">然后通过pvcreate来使分区转换成物理卷。可以使用pvs以及pvdisplay来查看物理卷的状况。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-33.png" title="1458891813371117.png" alt="pvcreate.png" /></p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><strong>二、卷组</strong></p> <p style="text-indent: 2em">创建物理卷PV之后,可以使用vgcreate命令指定需要的分区来创建卷组VG。</p> <p style="text-indent: 2em">需要注意的是,VG并不是只能创建一个的。</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">卷组(VG)相关的命令:</p> <pre class="brush:ps;toolbar:false"> vgcreate [-s [KkNmGgTtPpEe]] VG_name /dev/PVdevice vgextend [-s [KkNmGgTtPpEe]] VG_name /dev/PVdevice vgreduce VG_name PhysicalDevicePath #注意:-s用来指定PE的大小,也就是属于LV的最小单位。如果不指定的话,默认值是4M, #往后扩展的大小,例如+2G,系统都是按PE的大小,凑够2G。 #由于lvm1的时候PE数量是有限制的,为65534个。所以4M*65534近似于256G。 #LVM2的时候这个限制就被扩大了,所以个人认为能用lvm2的时候就用lvm2吧。</pre> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><span style="text-indent: 2em">创建之后同样可以使用vgdisplay来查看逻辑卷的状况。</span></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-71.png" title="1458891979598820.png" alt="vgdisplay_12.png" /></p> <p style="text-indent: 2em">这里我们使用默认值,添加一个最简单的卷组vg_bc,并使用vgdisplay来查看他的状态。</p> <p style="text-indent: 2em">我们可以大概的计算一个,2558*4M就是近似于10G。也就是卷组中sdb1和sdb2两个物理卷的的大小。</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">同时,当VG的容量用满的时候,可以通过vgextend来添加物理卷pv的方式进行扩容</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-84.png" title="1458892246882446.png" alt="vgextend_sdb123.png" /></p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><strong>三、逻辑卷</strong></p> <p style="text-indent: 2em">当创建好VG之后,我们可以将VG当做是一个可以调整大小的硬盘来使用。</p> <p style="text-indent: 2em">而在VG上面,我们可以创建逻辑卷以进行使用。</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">lv管理工具:</p> <pre class="brush:ps;toolbar:false">lvs lvdisplay lvcreate -L [+] [KkNmGgTtPpEe] -n name VGname #-L指的是线性地填充pv,也就是填充满了一个pv之后,再填充一个。</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180722-29.png" title="1458893090243888.png" alt="lvcreate.png" /></p> <p>创建好lv之后,接着的步骤就是进行格式化和挂载了吧。</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180722-81.png" title="1458893703911769.png" alt="mkfs.png" /></p> <p>我们尝试往里面复制一个文件,并使用df来查看挂载好的文件夹的使用情况</p> <p>-h选项为将容量显示为可以为人类容易识别的形式。要不然就是按1k来显示了。</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180722-29-1.png" title="1458893847332835.png" alt="df -h.png" /></p> <p><span style="text-indent: 2em">扩展逻辑卷的步骤</span></p> <pre class="brush:ps;toolbar:false;">lvextend -L size /dev/vgname/lvname resize2fs /dev/vg_name/Lv_name #需要注意的是,虽然扩展可以在线扩展。 #但是,但是!lv缩减的时候,要先卸载分区。 #因为可能的分区在线的时候,你需要缩减的部分,本来没被使用但又刚好被使用等奇怪情况。[object Object]</pre> <p style="text-indent: 2em">扩展了lv的大小之后,别忘记resize一下ext系统。其实也就是告诉ext系统,你的分区改变了。<img src="//cto.wang/usr/uploads/2016/07/20160703180722-85.png" title="1458896974386331.png" alt="lvextend.png" style="text-indent: 2em" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180722-81-1.png" title="1458894982204571.png" alt="df-resize.png" /></p> <p>我们可以看见,在扩展LV的时候resize2fs命令是动态在线的,并没有影响已经使用的文件。</p> <p></p> <p><strong>lv缩减的步骤</strong></p> <pre class="brush:ps;toolbar:false">umount LVName e2fsck -f LVName resize2fs LVName Size lvreduce -L Size LVname Mount</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-90.png" title="1458896618627959.png" alt="lvreduce.png" /></p> <p style="text-indent: 2em">注意:由于文件系统使用久了会有碎片。所以结构可能不是紧凑的,也就是说占用了文件系统<span style="text-indent: 32px">5G。</span></p> <p style="text-indent: 2em"><span style="text-indent: 32px">当把文件夹刚好减少到5G,就很有可能造成文件损坏。所以这个功能在不需要的时候还是不要使用比较好。</span></p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><strong>四、快照</strong></p> <p style="text-indent: 2em">lvm2还提供快照功能储存修改过的文件,可以帮助找回误删或者修改的文件。</p> <p style="text-indent: 2em"></p> <pre class="brush:ps;toolbar:false">lvcreate -L [KkNmGgTtPpEe] -p r -s -n NAME /dev/VG/LV #而创建快照的命令跟lv创建类似,但是要注意的有两点。 #-s代表snapshot,也就是快照,而最后一个跟的不是vg的名字,而是要创建快照的LV!! #也就是说快照就基于lv的,并不是所有lv的旧文件都会往里面塞。</pre> <p style="text-indent: 2em">创建快照</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-70.png" title="1458899923741921.png" alt="snapshot.png" /></p> <p style="text-indent: 2em">使用lvs,可以看出my_lvm3_snapshot是my_lvm3的快照。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-89.png" title="1458899950594116.png" alt="snapshot1.png" /></p> <p style="text-indent: 2em"></p> <pre class="brush:bash;toolbar:false">lvm上的快照 snapshot 通过快照分区访问源数据, 没改变的访问原inode,改变了的文件则访问储存在快照上的文件。 要访问某时间点的就访问储存在快照上的文件。</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-78.png" title="1458967436106429.png" alt="snashot.png" /></p> <p style="text-indent: 2em">我们把/etc/httpd文件夹复制到lvm1里面。</p> <p style="text-indent: 2em">并为lvm1创建一个快照my_snapshot2_lvm2_2,并将快照挂载到/media/snapshot2上。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-100.png" title="1458967782407675.png" alt="snapshot_2.png" /></p> <p style="text-indent: 2em">此时我们echo 0覆盖到lvm1的httpd.conf下面,再查看快照上的httpd.conf。</p> <p style="text-indent: 2em">我们会发现,快照上的文件并没有改变。</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703180722-86.png" title="1458968756487699.png" alt="lvdisplay.png" /></p> <p style="text-indent: 2em">使用lvdisplay来查看快照的状态</p> <p style="text-indent: 2em">lv-size是被快照的lv的容量,而COW-table-size则是快照的实际容量.</p> <p style="text-indent: 2em">COW(Copy On Wirte,写时复制)</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">与快照相关阅读的扩展阅读:快照的常见类型</p> <p style="text-indent: 2em"></p> <p><strong>关于快照的数据恢复:</strong></p> <pre class="brush:bash;toolbar:false">截取自鸟哥的私房菜: 为什么要备份呢?为什么不可以直接格式化lv然后将快照直接复制给lv上呢? 要知道 vbirdss 其实是 vbirdlv 的快照,因此如果你格式化整个lv 时,原本的文件系统所有数据都会被搬移到快照。 那如果 vbirdss 的容量不够大 (通常也真的不够大),那么部分数据将无法复制到 vbirdss 内,数据当然无法全部还原啊! 所以才要在上面表格中制作出一个备份文件的!了解乎?</pre> <p><span class="Apple-tab-span"> </span>示例:<span class="Apple-tab-span"> </span></p> <p> tar -jcv -f /backups/lvm.tar.bz2 *</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><strong>与RAID的异同:</strong></p> <p style="text-indent: 2em"><strong>相同点:</strong></p> <p style="text-indent: 2em"><span style="text-indent: 2em">以分区为单位,将多个分区通过软件的方式整合成一个统一单位。</span></p> <p style="text-indent: 2em">通常的环境下,一般以一个硬盘一个分区的方式进行容量扩展。</p> <p style="text-indent: 2em">例如,LVM将分区转化为物理卷,再将物理卷(PV)加入卷组(VG)这个整体中进行管理。而后,再创建逻辑卷(LV)。</p> <p style="text-indent: 2em">而RAID同样地以分区为单位,通过软件或者硬件的方式整合成一个MD设备。然后将MD设备当成一个普通的硬盘一样使用。</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em"><strong>不同点:</strong></p> <p style="text-indent: 2em">常用的RAID方式中,1,5,6提供冗余功能。磁盘损坏的情况下,损坏的文件部分可以通过计算得出。</p> <p style="text-indent: 2em">LVM不提供冗余功能,文件坏了就是坏了。但是无论RAID或者LVM,都要注意好备份。</p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信