本文共 4620 字,大约阅读时间需要 15 分钟。
前言
每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬 盘、重新对硬盘分区,然后恢复数据到新分区。
虽然现在有很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另 外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区 调整程序就不能解决问题。
因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬 盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义: “development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的 文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
首先需要用fdisk把分区类型改为8e
[root@localhost ~]# fdisk /dev/sdbWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): tPartition number (1-6): 1Hex code (type L to list codes): 8eChanged system type of partition 1 to 8e (Linux LVM)Command (m for help): t Partition number (1-6): 2Hex code (type L to list codes): 8eChanged system type of partition 2 to 8e (Linux LVM)Command (m for help): pDisk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xd25c91c2 Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 8e Linux LVM【改成LVM分区类型】/dev/sdb2 133 264 1060290 8e Linux LVM/dev/sdb3 265 396 1060290 8e Linux LVM/dev/sdb4 397 1305 7301542+ 5 Extended/dev/sdb5 397 528 1060258+ 8e Linux LVM/dev/sdb6 529 660 1060258+ 8e Linux LVMCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.
现在把sdb3和sdb5做成pv【物理卷】
pvscan查看pv
[root@localhost ~]# pvremove /dev/sdb5 Labels on physical volume "/dev/sdb5" successfully wiped
创建卷组【vg】
用法:vgcreate 卷组名 物理卷名
-s #:指定PE大小,默认是4M,每一个物理卷被划分为大小相等的称为PE(Physical Extents)的基本单元。物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实现情况在建立物理卷时指定。物理区域大小一旦确定,将 不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。PE的大小是可配置的,默认为4MB。
[root@localhost ~]# vgcreate myvg /dev/sdb{3,5} Volume group "myvg" successfully created
vgs查看vg
在还没有创建lg的时候可以删除vg,创建了lg有了数据就不能再删除了
扩展vg就要增加pv
用法:lvcreate -n LV_NAME -L #G VG_NAME
创建文件系统
逻辑卷有两个名字mylv和myvg-mylv,都是软链接
用法:-L [+]# /PATH/LV,"[+]"代表有"+"号时,代表加多少G【容量】,没有+号代表扩展到多少G
resize2fs命令被用来增大或者收缩未加载的“ext2/ext3”文件系统的大小。如果文件系统是处于mount状态下,那么它只能做到扩容,前提条件是内核支持在线resize。,linux kernel 2.6支持在mount状态下扩容但仅限于ext3文件系统。来自: http://man.linuxde.net/resize2fs
-d:打开调试特性;
-p:打印已完成的百分比进度条;
-f:强制执行调整大小操作,覆盖掉安全检查操作;
-F:开始执行调整大小前,刷新文件系统设备的缓冲区。
注意:
不能在线缩减,先卸载
确保缩减后的空间大小依然能存储原有的数据
在缩减之前应该先强行检查文件系统,以确保文件系统处于一致性状态【e2fsck -f】
缩减逻辑卷刚好和上面相反,先resize2fs再lvreduce
快照一般都很小,它存的是原系统上要发生变化的文件,比如我要修改一个文件,快照会首先把文件存起来,然后修改过后的文件在原系统,未修改的文件存进了快照。这样就实现了数据备份,这样快照卷刚开始很小,时间长了就大了。它这个备份存的是软件资料的备份。而我们的raid1和raid10存的备份是磁盘的备份。我的磁盘直接坏掉了,快照肯定没有备份下来,还原也是没用的【快照也是存在磁盘上的】。
快照卷的好多文件其实都是和原文件系统共用的,所以快照卷相当于一个分区的另一个入口,这样快照卷肯定在该分区上,对LVM而言就是在一个卷组上【因为PE在vg下面的每个PV上都有】
要求:
生命周期为整个快照的文件系统的生命周期,并且在该周期内原文件系统变化的文件大小不能超过快照卷,因为每有文件变化就会备份一份该文件变化之前的快照,最大不会超过快照的原文件系统大小
快照应该是只读
跟原卷在同一卷组
使用方法:lvcreate -L # -n SLV_NAME -s -p r /PATH/LV 【指定为那个逻辑卷创建的】
-s:表示快照卷
-p:指定权限r|w
-L:快照卷大小
#test是逻辑卷mylv挂载目录#test1是快照卷挂载目录[root@localhost test]# lslost+found[root@localhost test]# touch b.txt【创建快照前先在原文件系统创建一个b.txt】[root@localhost test]# lvcreate -L 100M -n mylv-snap -s -p r /dev/myvg/mylv 【为mylv创建快照】 Rounding up size to full physical extent 104.00 MiB Logical volume "mylv-snap" created[root@localhost test]# mount /dev/myvg/mylv-snap /mnt/test1【挂载】mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only[root@localhost test]# ls /mnt/test1【创建当前快照,这个b.txt其实也是/mnt/test的b.txt,快照只是入口】b.txt lost+found[root@localhost test]# vi b.txt【编辑test下的b.txt,快照这个时候才备份,备份原来的空文件b.txt】[root@localhost test]# cat b.txtdsadsaaaaa[root@localhost test]# cat /mnt/test1/b.txt【发现还是空,已经快照备份了】[root@localhost test]# #删除快照[root@localhost test]# umount /mnt/test1[root@localhost test]# lvremove /dev/myvg/mylv-snapDo you really want to remove active logical volume mylv-snap? [y/n]: y Logical volume "mylv-snap" successfully removed
转载地址:http://xibii.baihongyu.com/