LVM逻辑卷管理
Posted 尹正杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVM逻辑卷管理相关的知识,希望对你有一定的参考价值。
LVM逻辑卷管理
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
在生产环境中,我们可能遇到过很多存储的一系列问题,比如说你有磁盘做的是RAID5,并在线上跑着数据,时时刻刻都会存取数据,但是发现在使用2个月后磁盘剩余空间不足10%,你有当如何处理呢?可能我们能干的事情就得告诉用户,几点至几点需要维护服务器啥的,更换新的硬盘再供用户使用,但是长期这样也不是很好的办法,你想想,如果在生产环境中服务证跑着,发现磁盘空间不足的时候,我给他动态的扩容点不就好了么,也不用停机维护啥的,这个就是我们今天要学习的LVM(逻辑卷管理,即:Logical Volume Manager),它支持动态的扩容,能帮我们干很多的事情呢。而且它还有个神奇的功能,就是快照。
那么它是如何实现的呢?这就得了解一下它的工作原理了,其实就是内核的dm模块将物理磁盘(Physical Volume,物理卷),用该软件将这些不同的物理磁盘磨合成一块磁盘,让用户感觉像一个设备,我们通常叫它卷组(Volume Group,卷组),这个卷组会将物理设备提供的空间再次分割成各个独立的块,这个块要比我们文件系统中的块要大得多,然而比较不幸的是这个卷组不能直接被用户使用。需要重新划分新的卷(它会将物理卷划分的块用来创建新的分区),这个最终划分的卷才能被被用户使用,我们称之为逻辑卷(Logical Volume,逻辑卷),也就是说,逻辑卷是可以被格式化并挂载使用的单独使用的设备,这是别md模块更高级的组织模式!其实数据最终还是存到物理硬盘上去了,不过有点就是让你的逻辑卷可以动态变大(扩容)活变小(但是最好别让其变小,理论上是可以的,但是数据的才是最重要的,如果在压缩的过程中出现了任何问题都是会有风险的),生产环境中,一般都是RAID和LVM一起用的,我在之前的一家公司将3个1T的磁盘做成RAID5,然后将这个设备又做成LVM,最终用于公司的samba共享了。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 基本概念 9 Logical Volume Manager 10 ** 多个物理分区/磁盘 ==> 组合成一个整体 ==>划分逻辑存储单位,即逻辑卷 11 ** 逻辑分区的大小可以根据需要扩大、缩减 12 ** /boot 用来存放引导文件,不能使用LVM逻辑卷(启动时会找不到内核) 13 14 PV(Physical Volume,物理卷): 15 物理分区,或整个物理磁盘 16 由PE(Physical Extent,基本单元)组成 【PE默认4MB】 17 VG(Volume Group,卷组) 18 一个或多个物理卷组成的逻辑整体 19 LV(Logical Volume,逻辑卷) 20 从卷组中分割出的一块逻辑存储空间 21 经过格式化可建立文件系统 22 23 \'\'\'
注意:逻辑卷不能直接使用!也是需要格式化,格式化的过程就是指定文件系统。让我们一起看看如何管理这些逻辑卷呢?如果将PV转换成VG呢?又是如何将VG转换成LV的呢?我们可以利用图像化工具:图形化管理工具: system-config-lvm。但是作为运维的我们一般都是会用命令来实现,因此我下面的教程也都是基于命令的,先把基本的命令给大家总览一下吧:
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 LVM:Logical Volume Manager,将多块设备组合成一个来使用 9 10 11 盘区: 12 13 14 dm:device maooer 设备映射 15 16 设备文件 /dev/卷组名/逻辑卷名 17 /dev/mapper/卷组名-逻辑卷名 18 19 20 物理卷命令命令:pv 21 pvcreate pvremove psdisplay pvscan pvs pvmove(移动数据) 22 pvcreate 物理卷 23 卷组的管理命令:vg 24 vgcreate vgscan vgs vgextend(扩充)、vgremove(删除) vgreduce(移除,缩容) 25 vgcreate 26 -s:pe大小,默认4M 27 逻辑卷的管理命令:lv 28 lvcreate lvscan lvs lvextend(扩充)、lvremove(删除) vgreduce(移除,缩容) 29 30 lvcreate 31 -n:指定名称 32 -L: 指定大小 33 -l:%vg|pvs|FREE,打算分配% 34 35 36 逻辑卷扩展的步骤: 37 1.先确保扩展的大小;并确保所属的卷组有足够的剩余空间 38 2、扩展物理边界 39 lvextend -L [+]size /path/to/lv_device 40 3、扩展逻辑边界 41 resize2fs /path/to/lv_devive 42 缩减逻辑卷的步骤: 43 1、卸载卷,并执行强制检查 44 e2fsck -f /path/to/lv_devive 45 2、缩减逻辑边界 46 resize2fs /path/to/lv_device SIZE 47 3、缩减物理边界: 48 lvreduce -L [-]size /path/to/lv_device 49 4、挂载卷 50 51 快照: 52 也是逻辑卷的一种,提供过去某一时间的元卷的通道 53 lvcreate -s -L Size -n name 卷组名 -p r,rw /path/to/lv_devsive 54 -p:访问权限 55 56 57 扩展卷组: 58 1.准备要添加的物理卷 59 2 扩展卷组: 60 添加物理卷至卷组中 61 vgextend vg_name /path/to/device 62 缩减卷组: 63 1.确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小 64 2.将要移除的物理卷上的所有pe移动至其他PV 65 pvmove /path/to/pv_device 66 3.缩减vg 67 #vgreduce vg_name /path/to/pv/device
68 4、挂载卷 69 \'\'\'
操作环境:
创建一个10G的LVM
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 [root@yinzhengjie ~]# ls /dev/sdb* #查看有一块空磁盘 9 /dev/sdb 10 [root@yinzhengjie ~]# fdisk /dev/sdb #对这个空磁盘进行分区 11 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel 12 Building a new DOS disklabel with disk identifier 0x7ecc698f. 13 Changes will remain in memory only, until you decide to write them. 14 After that, of course, the previous content won\'t be recoverable. 15 16 Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 17 18 WARNING: DOS-compatible mode is deprecated. It\'s strongly recommended to 19 switch off the mode (command \'c\') and change display units to 20 sectors (command \'u\'). 21 22 Command (m for help): p 23 24 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 25 255 heads, 63 sectors/track, 2610 cylinders 26 Units = cylinders of 16065 * 512 = 8225280 bytes 27 Sector size (logical/physical): 512 bytes / 512 bytes 28 I/O size (minimum/optimal): 512 bytes / 512 bytes 29 Disk identifier: 0x7ecc698f 30 31 Device Boot Start End Blocks Id System 32 33 Command (m for help): n 34 Command action 35 e extended 36 p primary partition (1-4) 37 p 38 Partition number (1-4): 1 39 First cylinder (1-2610, default 1): 40 Using default value 1 41 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +3G 42 43 Command (m for help): n 44 Command action 45 e extended 46 p primary partition (1-4) 47 p 48 Partition number (1-4): 2 49 First cylinder (394-2610, default 394): 50 Using default value 394 51 Last cylinder, +cylinders or +size{K,M,G} (394-2610, default 2610): +7G 52 53 Command (m for help): t #调整分区的ID,似的其分区类型为LVM 54 Partition number (1-4): 1 55 Hex code (type L to list codes): L 56 57 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 58 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 59 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 60 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 61 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 62 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 63 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 64 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 65 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 66 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access 67 a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O 68 b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor 69 c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs 70 e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT 71 f W95 Ext\'d (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 72 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 73 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 74 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 75 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 76 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 77 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 78 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 79 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 80 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 81 1e Hidden W95 FAT1 82 Hex code (type L to list codes): 8e 83 Changed system type of partition 1 to 8e (Linux LVM) 84 85 Command (m for help): t #调整分区的ID,似的其分区类型为LVM 86 Partition number (1-4): 2 87 Hex code (type L to list codes): 8e 88 Changed system type of partition 2 to 8e (Linux LVM) 89 90 Command (m for help): p #查看以上分区情况 91 92 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 93 255 heads, 63 sectors/track, 2610 cylinders 94 Units = cylinders of 16065 * 512 = 8225280 bytes 95 Sector size (logical/physical): 512 bytes / 512 bytes 96 I/O size (minimum/optimal): 512 bytes / 512 bytes 97 Disk identifier: 0x7ecc698f 98 99 Device Boot Start End Blocks Id System 100 /dev/sdb1 1 393 3156741 8e Linux LVM 101 /dev/sdb2 394 1308 7349737+ 8e Linux LVM 102 103 Command (m for help): w #保存当前配置。 104 The partition table has been altered! 105 106 Calling ioctl() to re-read partition table. 107 Syncing disks. 108 [root@yinzhengjie ~]# 109 [root@yinzhengjie ~]# cat /proc/partitions #查看系统是否有分区信息,如果没有就得重读分区表再次查看。 110 major minor #blocks name 111 112 8 16 20971520 sdb 113 8 17 3156741 sdb1 114 8 18 7349737 sdb2 115 8 0 20971520 sda 116 8 1 307200 sda1 117 8 2 18631680 sda2 118 8 3 2031616 sda3 119 [root@yinzhengjie ~]# 120 121 \'\'\'
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 [root@yinzhengjie ~]# pvcreate /dev/sdb{1,2} #创建物理卷组(将sdb1和sdb2这2个分区添加到物理卷组中去)。 9 Physical volume "/dev/sdb1" successfully created 10 Physical volume "/dev/sdb2" successfully created 11 [root@yinzhengjie ~]# pvs #查看当前物理卷组信息。 12 PV VG Fmt Attr PSize PFree 13 /dev/sdb1 lvm2 --- 3.01g 3.01g 14 /dev/sdb2 lvm2 --- 7.01g 7.01g 15 [root@yinzhengjie ~]# 16 [root@yinzhengjie ~]# pvdisplay #查看所有物理卷信息 17 "/dev/sdb1" is a new physical volume of "3.01 GiB" 18 --- NEW Physical volume --- 19 PV Name /dev/sdb1 20 VG Name 21 PV Size 3.01 GiB 22 Allocatable NO 23 PE Size 0 24 Total PE 0 25 Free PE 0 26 Allocated PE 0 27 PV UUID A25Lv7-ZOKU-dtqm-eZDG-rFt0-up22-ofm8Oc 28 29 "/dev/sdb2" is a new physical volume of "7.01 GiB" 30 --- NEW Physical volume --- 31 PV Name /dev/sdb2 32 VG Name 33 PV Size 7.01 GiB 34 Allocatable NO 35 PE Size 0 36 Total PE 0 37 Free PE 0 38 Allocated PE 0 39 PV UUID pM2qr0-yz7k-GRfo-a6Qw-BksQ-kxdh-050IXh 40 41 [root@yinzhengjie ~]# pvdisplay /dev/sdb1 #单独查看某个物理卷信息 42 "/dev/sdb1" is a new physical volume of "3.01 GiB" 43 --- NEW Physical volume --- 44 PV Name /dev/sdb1 45 VG Name 46 PV Size 3.01 GiB 47 Allocatable NO 48 PE Size 0 49 Total PE 0 50 Free PE 0 51 Allocated PE 0 52 PV UUID A25Lv7-ZOKU-dtqm-eZDG-rFt0-up22-ofm8Oc 53 54 [root@yinzhengjie ~]# 55 \'\'\'
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 [root@yinzhengjie ~]# vgcreate yinzhengjie_vgs /dev/sdb{1,2} #创建卷组 9 Volume group "yinzhengjie_vgs" successfully created 10 [root@yinzhengjie ~]# vgs #查看当前以及创建的卷组信息 11 VG #PV #LV #SN Attr VSize VFree 12 yinzhengjie_vgs 2 0 0 wz--n- 10.02g 10.02g 13 [root@yinzhengjie ~]# vgdisplay 14 --- Volume group --- 15 VG Name yinzhengjie_vgs 16 System ID 17 Format lvm2 18 Metadata Areas 2 19 Metadata Sequence No 1 20 VG Access read/write 21 VG Status resizable 22 MAX LV 0 23 Cur LV 0 24 Open LV 0 25 Max PV 0 26 Cur PV 2 27 Act PV 2 28 VG Size 10.02 GiB 29 PE Size 4.00 MiB 30 Total PE 2564 31 Alloc PE / Size 0 / 0 32 Free PE / Size 2564 / 10.02 GiB 33 VG UUID 7IVn6j-raKQ-JAUp-rmLp-tWf8-vsE8-B76Uiq 34 35 [root@yinzhengjie ~]# vgdisplay yinzhengjie_vgs #只看名称为“yinzhengjie_vgs”的卷组 36 --- Volume group --- 37 VG Name yinzhengjie_vgs 38 System ID 39 Format lvm2 40 Metadata Areas 2 41 Metadata Sequence No 1 42 VG Access read/write 43 VG Status resizable 44 MAX LV 0 45 Cur LV 0 46 Open LV 0 47 Max PV 0 48 Cur PV 2 49 Act PV 2 50 VG Size 10.02 GiB 51 PE Size 4.00 MiB #默认PE大小就是4M,这个参数是可以修改的,当然这个参数是在创建卷组的时候指定的,创建之后就无法修改,除非删除后重新创建。 52 Total PE 2564 53 Alloc PE / Size 0 / 0 54 Free PE / Size 2564 / 10.02 GiB 55 VG UUID 7IVn6j-raKQ-JAUp-rmLp-tWf8-vsE8-B76Uiq 56 57 [root@yinzhengjie ~]# pvdisplay /dev/sdb1 #当我们将物理磁盘创建卷组的时候,再去查看物理卷信息的是就多出来一些参数了。 58 --- Physical volume --- 59 PV Name /dev/sdb1 60 VG Name yinzhengjie_vgs 61 PV Size 3.01 GiB / not usable 2.75 MiB 62 Allocatable yes 63 PE Size 4.00 MiB 64 Total PE 770 65 Free PE 770 66 Allocated PE 0 67 PV UUID A25Lv7-ZOKU-dtqm-eZDG-rFt0-up22-ofm8Oc 68 69 [root@yinzhengjie ~]# vgremove yinzhengjie_vgs #删除卷组,切记,我这里是因为磁盘没有数据,直接就vgremove啦,如果有数据应该用vgmove命令将数据拷贝到其他磁盘上去,在去移除设备哟! 70 Volume group "yinzhengjie_vgs" successfully removed 71 [root@yinzhengjie ~]# vgcreate -s 8MB yinzhengjie_data /dev/sdb{1,2} #指定PE的大小就是用-s参数,如果不指定就是4M,创建完毕后将 无法修改 72 Volume group "yinzhengjie_data" successfully created 73 [root@yinzhengjie ~]# pvdisplay /dev/sdb1 #查看该设备的PE分区。 74 --- Physical volume --- 75 PV Name /dev/sdb1 76 VG Name yinzhengjie_data 77 PV Size 3.01 GiB / not usable 2.75 MiB 78 Allocatable yes 79 PE Size 8.00 MiB #过真,变为8M的大小了 80 Total PE 385 81 Free PE 385 82 Allocated PE 0 83 PV UUID A25Lv7-ZOKU-dtqm-eZDG-rFt0-up22-ofm8Oc 84 85 [root@yinzhengjie ~]# 86 [root@yinzhengjie ~]# vgdisplay yinzhengjie_data #查看卷组的大小 87 --- Volume group --- 88 VG Name yinzhengjie_data 89 System ID 90 Format lvm2 91 Metadata Areas 2 92 Metadata Sequence No 1 93 VG Access read/write 94 VG Status resizable 95 MAX LV 0 96 Cur LV 0 97 Open LV 0 98 Max PV 0 99 Cur PV 2 100 Act PV 2 101 VG Size 10.02 GiB 102 PE Size 8.00 MiB 103 Total PE 1282 104 Alloc PE / Size 0 / 0 105 Free PE / Size 1282 / 10.02 GiB 106 VG UUID rdaCR9-1Hah-K2ON-nm1V-6W0C-mjRL-3skazJ 107 108 [root@yinzhengjie ~]# 109 [root@yinzhengjie ~]# vgrename yinzhengjie_data yinzhengjie_vgs #修改卷组名 110 Volume group "yinzhengjie_data" successfully renamed to "yinzhengjie_vgs" 111 [root@yinzhengjie ~]# 112 [root@yinzhengjie ~]# vgdisplay yinzhengjie_vgs #查看修改后的卷组名参数和物理卷参数是一致的。 113 --- Volume group --- 114 VG Name yinzhengjie_vgs 115 System ID 116 Format lvm2 117 Metadata Areas 2 118 Metadata Sequence No 2 119 VG Access read/write 120 VG Status resizable 121 MAX LV 0 122 Cur LV 0 123 Open LV 0 124 Max PV 0 125 Cur PV 2 126 Act PV 2 127 VG Size 10.02 GiB 128 PE Size 8.00 MiB 129 Total PE 1282 130 Alloc PE / Size 0 / 0 131 Free PE / Size 1282 / 10.02 GiB 132 VG UUID rdaCR9-1Hah-K2ON-nm1V-6W0C-mjRL-3skazJ 133 134 [root@yinzhengjie ~]# 135 \'\'\'
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 \'\'\' 8 [root@yinzhengjie ~]# fdisk /dev/sdb #由于我想扩展卷组,所以需要一块新的物理卷,这个物理卷不一定是要来自同一块磁盘,你可以在其他磁盘上添加也是可以的。 9 10 WARNING: DOS-compatible mode is deprecated. It\'s strongly recommended to 11 switch off the mode (command \'c\') and change display units to 12 sectors (command \'u\'). 13 14 Command (m for help): n 15 Command action 16 e extended 17 p primary partition (1-4) 18 p 19 Partition number (1-4): 3 20 First cylinder (1309-2610, default 1309): 21 Using default value 1309 22 Last cylinder, +cylinders or +size{K,M,G} (1309-2610, default 2610): +5G 23 24 Command (m for help): P 25 26 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 27 255 heads, 63 sectors/track, 2610 cylinders 28 Units = cylinders of 16065 * 512 = 8225280 bytes 29 Sector size (logical/physical): 512 bytes / 512 bytes 30 I/O size (minimum/optimal): 512 bytes / 512 bytes 31 Disk identifier: 0x7ecc698f 32 33 Device Boot Start End Blocks Id System 34 /dev/sdb1 1 393 3156741 8e Linux LVM 35 /dev/sdb2 394 1308 7349737+ 8e Linux LVM 36 /dev/sdb3 1309 1962 5253255 83 Linux 37 38 Command (m for help): T 39 Partition number (1-4): 3 40 以上是关于LVM逻辑卷管理的主要内容,如果未能解决你的问题,请参考以下文章