CentOS 6.5 LVM磁盘管理学习笔记
在系统运维和服务器管理过程中,经常遇到服务器磁盘容量不足,需要在线扩容的情况。普通磁盘分区的管理方式在逻辑分区划好之后就无法改变其大小。而LVM可以实现Linux服务器下面磁盘空间的在线扩容和动态管理,相对于普通的磁盘分区有很大的灵活性。 一、LVM简介 LVM是Logical VolumeManager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上进行组合,做为一个大的硬盘空间来使用,当硬盘的剩余空间不够的时候,可以将其它的硬盘加入到分区当中,这样可以实现磁盘空间的动态管理。 二、LVM基本术语 物理卷(physical volume,PV):物理卷就是指硬盘分区,也可以是整个硬盘或已创建的RAID,是LVM的基本存储设备,与普通物理存储介质的区别是该设备包含有LVM相关的管理参数。 卷组(volume group,VG):卷组是由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个“LVM分区”(逻辑卷)。 逻辑卷(logical volume,LV):LVM的逻辑卷类似于非LVM系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统。 物理块(physical extent,PE):物理卷以大小相等的物理块为存储的基本单位,同时也是LVM寻址的最小单元。 逻辑块(logical extent,LE):逻辑卷以大小相等的逻辑块为存储的基本单位,在同一个卷组中,LE的大小和PE是相等的,并且一一对应。 三、通过LVM分区方式安装Centos 1.选择安装类型,选择最后一个复选框,即创建自定义布局。 2.首先划分/boot分区,/boot分区建议使用物理分区。 3.将剩余空间划分为一个物理卷(PV)。 4.创建一个卷组(VG)。默认卷组名为VolGroup00,修改卷组名为vg51cto_lv。 5.在VG上面创建逻辑卷(LV)。逻辑卷默认为LogVol00,LogVol01……末两位由00开始依次递增。 6.LVM分区完成。 7.df -h查看磁盘空间。 1 2 3 4 5 6 7 8 [root@hadoop01~] #df-h FilesystemSizeUsedAvailUse%Mountedon /dev/mapper/vg51cto_lv-LogVol01 9.9G1.2G8.2G13%/ tmpfs495M0495M0% /dev/shm /dev/sda1 194M29M155M16% /boot /dev/mapper/vg51cto_lv-LogVol03 20G172M19G1% /data /dev/mapper/vg51cto_lv-LogVol02 5.0G138M4.6G3% /home /dev/mapper/vg51cto_lv-LogVol04 23G173M22G1% /usr/local 四、LVM管理 第一部分:卷组(volume group,VG)相关的操作。 1.查看卷组(VG)名,卷组名为vg51cto_lv。 1 2 3 [root@hadoop01~] #vgscan Readingallphysicalvolumes.Thismaytakeawhile... Foundvolumegroup "vg51cto_lv" usingmetadata type lvm2 2.查看卷组(VG)包含的PV、LV信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [root@hadoop01~] #vgdisplay-vvg51cto_lv Usingvolumegroup(s)on command line Findingvolumegroup "vg51cto_lv" ---Volumegroup--- VGNamevg51cto_lv SystemID Formatlvm2 MetadataAreas1 MetadataSequenceNo6 VGAccess read /write VGStatusresizable MAXLV0 CurLV5 OpenLV5 MaxPV0 CurPV1 ActPV1 VGSize59.80GiB PESize4.00MiB TotalPE15309 AllocPE /Size 15309/59.80GiB FreePE/Size0/0 VGUUIDuF4S1y-21AZ-KOfs-rNIF-lFmN-wQ75-2sX7F1 ---Logicalvolume--- LVPath /dev/vg51cto_lv/LogVol04 LVNameLogVol04 VGNamevg51cto_lv LVUUIDrvOZeO-Oz2G-wx7Z-u0b6-CvXj-FKEj-RwCLXO LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:30:51+0800 LVStatusavailable #open1 LVSize22.80GiB CurrentLE5837 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:2 ---Logicalvolume--- LVPath /dev/vg51cto_lv/LogVol01 LVNameLogVol01 VGNamevg51cto_lv LVUUIDd6YKrd-fWMJ-x61I-cfWG-v2me-Hn8V-xdm96L LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:30:56+0800 LVStatusavailable #open1 LVSize10.00GiB CurrentLE2560 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:0 ---Logicalvolume--- LVPath /dev/vg51cto_lv/LogVol00 LVNameLogVol00 VGNamevg51cto_lv LVUUIDhSyH2r-mvMV-th7q-geKg-sVpm-O1zJ-D6DwT8 LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:30:58+0800 LVStatusavailable #open1 LVSize2.00GiB CurrentLE512 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:1 ---Logicalvolume--- LVPath /dev/vg51cto_lv/LogVol03 LVNameLogVol03 VGNamevg51cto_lv LVUUIDgKHLfz-O5Lm-TGMq-2LcF-xcH1-ASea-QCVVNc LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:30:58+0800 LVStatusavailable #open1 LVSize20.00GiB CurrentLE5120 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:3 ---Logicalvolume--- LVPath /dev/vg51cto_lv/LogVol02 LVNameLogVol02 VGNamevg51cto_lv LVUUIDlkqKmO-Dt0u-3CnB-UqeD-d6gc-2rmP-gWtKVp LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:31:00+0800 LVStatusavailable #open1 LVSize5.00GiB CurrentLE1280 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:4 ---Physicalvolumes--- PVName /dev/sda2 PVUUIDpKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX PVStatusallocatable TotalPE /Free PE15309/0 3.修改卷组名,由vg51cto_lv修改成vg51cto。 1)修改卷组名的命令为vgrename,语法如下: vgrename OldVolumeGroupNameNew VolumeGroupName 1 2 [root@hadoop01~] #vgrenamevg51cto_lvvg51cto Volumegroup "vg51cto_lv" successfullyrenamedto "vg51cto" 2)修改/etc/fstab配置文件,把vg51cto_lv修改成vg51cto。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@hadoop01~] #vim/etc/fstab # #/etc/fstab #CreatedbyanacondaonThuNov517:33:462015 # #Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk' #Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(8)formoreinfo # /dev/mapper/vg51cto-LogVol01 /ext4defaults11 UUID=9c02e519-3b85-4918-b9fd-395535cab496 /boot ext4defaults12 /dev/mapper/vg51cto-LogVol03 /data ext4defaults12 /dev/mapper/vg51cto-LogVol02 /home ext4defaults12 /dev/mapper/vg51cto-LogVol04 /usr/local ext4defaults12 /dev/mapper/vg51cto-LogVol00 swapswapdefaults00 tmpfs /dev/shm tmpfsdefaults00 devpts /dev/pts devptsgid=5,mode=62000 sysfs /sys sysfsdefaults00 proc /proc procdefaults00 3)修改grub.conf配置文件,把vg51cto_lv修改成vg51cto。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@hadoop01~] #vim/etc/grub.conf #grub.confgeneratedbyanaconda # #Notethatyoudonothavetorerungrubaftermakingchangestothisfile #NOTICE:Youhavea/bootpartition.Thismeansthat #allkernelandinitrdpathsarerelativeto/boot/,eg. #root(hd0,0) #kernel/vmlinuz-versionroroot=/dev/mapper/vg51cto_lv-LogVol01 #initrd/initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0) /grub/splash .xpm.gz hiddenmenu titleCentOS(2.6.32-431.el6.x86_64) root(hd0,0) kernel /vmlinuz-2 .6.32-431.el6.x86_64roroot= /dev/mapper/vg51cto-LogVol01 rd_NO_LUKSrd_LVM_LV=vg51cto /LogVol01 rd_LVM_LV=vg51cto /LogVol00 rd_NO_MDcrashkernel=autoLANG=zh_CN.UTF-8KEYBOARDTYPE=pcKEYTABLE=usrd_NO_DMrhgbquiet initrd /initramfs-2 .6.32-431.el6.x86_64.img 4)reboot重启后用df -h查看。 1 2 3 4 5 6 7 8 [root@hadoop01~] #df-h FilesystemSizeUsedAvailUse%Mountedon /dev/mapper/vg51cto-LogVol01 9.9G1.2G8.2G13%/ tmpfs495M0495M0% /dev/shm /dev/sda1 194M29M155M16% /boot /dev/mapper/vg51cto-LogVol03 20G172M19G1% /data /dev/mapper/vg51cto-LogVol02 5.0G138M4.6G3% /home /dev/mapper/vg51cto-LogVol04 23G173M22G1% /usr/local 第二部分:逻辑卷(logical volume,LV)相关的操作。 1.查看逻辑卷(LV)名。 使用LVM安装系统时,默认的卷组名为VolGroup00,卷组内的逻辑卷为LogVol00,LogVol01……末两位由00开始依次递增。 1 2 3 4 5 6 [root@hadoop01~] #lvscan ACTIVE '/dev/vg51cto/LogVol04' [22.80GiB]inherit ACTIVE '/dev/vg51cto/LogVol01' [10.00GiB]inherit ACTIVE '/dev/vg51cto/LogVol00' [2.00GiB]inherit ACTIVE '/dev/vg51cto/LogVol03' [20.00GiB]inherit ACTIVE '/dev/vg51cto/LogVol02' [5.00GiB]inherit 2.查看逻辑卷详细信息 lvdisplay命令查看所有逻辑卷的详细信息 lvdisplay 逻辑卷名称 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@hadoop01~] #lvdisplay/dev/vg51cto/LogVol00 ---Logicalvolume--- LVPath /dev/vg51cto/LogVol00 LVNameLogVol00 VGNamevg51cto LVUUIDhSyH2r-mvMV-th7q-geKg-sVpm-O1zJ-D6DwT8 LVWriteAccess read /write LVCreationhost, time hadoop01,2015-11-0517:30:58+0800 LVStatusavailable #open1 LVSize2.00GiB CurrentLE512 Segments1 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:1 3.修改逻辑卷名 1)修改逻辑卷命令为lvrename,语法如下: 1 2 3 4 5 6 7 8 9 10 11 lvrenameOldLogicalVolumePathNewLogicalVolumePath [root@hadoop01~] #lvrename/dev/vg51cto/LogVol00/dev/vg51cto/lv_swap Renamed "LogVol00" to "lv_swap" in volumegroup "vg51cto" [root@hadoop01~] #lvrename/dev/vg51cto/LogVol01/dev/vg51cto/lv_root Renamed "LogVol01" to "lv_root" in volumegroup "vg51cto" [root@hadoop01~] #lvrename/dev/vg51cto/LogVol02/dev/vg51cto/lv_home Renamed "LogVol02" to "lv_home" in volumegroup "vg51cto" [root@hadoop01~] #lvrename/dev/vg51cto/LogVol03/dev/vg51cto/lv_data Renamed "LogVol03" to "lv_data" in volumegroup "vg51cto" [root@hadoop01~] #lvrename/dev/vg51cto/LogVol04/dev/vg51cto/lv_usr Renamed "LogVol04" to "lv_usr" in volumegroup "vg51cto" 2)修改/etc/fstab配置文件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@hadoop01~] #vim/etc/fstab # #/etc/fstab #CreatedbyanacondaonThuNov517:33:462015 # #Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk' #Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(8)formoreinfo # /dev/mapper/vg51cto-lv_root /ext4defaults11 UUID=9c02e519-3b85-4918-b9fd-395535cab496 /boot ext4defaults12 /dev/mapper/vg51cto-lv_data /data ext4defaults12 /dev/mapper/vg51cto-lv_home /home ext4defaults12 /dev/mapper/vg51cto-lv_usr /usr/local ext4defaults12 /dev/mapper/vg51cto-lv_swap swapswapdefaults00 tmpfs /dev/shm tmpfsdefaults00 devpts /dev/pts devptsgid=5,mode=62000 sysfs /sys sysfsdefaults00 proc /proc procdefaults00 3)修改grub.conf配置文件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@hadoop01~] #vim/etc/grub.conf #grub.confgeneratedbyanaconda # #Notethatyoudonothavetorerungrubaftermakingchangestothisfile #NOTICE:Youhavea/bootpartition.Thismeansthat #allkernelandinitrdpathsarerelativeto/boot/,eg. #root(hd0,0) #kernel/vmlinuz-versionroroot=/dev/mapper/vg51cto_lv-LogVol01 #initrd/initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0) /grub/splash .xpm.gz hiddenmenu titleCentOS(2.6.32-431.el6.x86_64) root(hd0,0) kernel /vmlinuz-2 .6.32-431.el6.x86_64roroot= /dev/mapper/vg51cto-lv_root rd_NO_LUKSrd_LVM_LV=vg51cto /lv_root rd_LVM_LV=vg51cto /lv_swap rd_NO_MDcrashkernel=autoLANG=zh_CN.UTF-8KEYBOARDTYPE=pcKEYTABLE=usrd_NO_DMrhgbquiet initrd /initramfs-2 .6.32-431.el6.x86_64.img 第三部分:物理卷(physical volume,PV)相关操作。 1.查看物理卷(PV)名,这里为/dev/sda2,linux中SCSI的第1块硬盘为/dev/sda,第2块硬盘为/dev/sdb,依此类推。 1 2 3 [root@hadoop01~] #pvscan PV /dev/sda2 VGvg51ctolvm2[59.80GiB/0 free ] Total:1[59.80GiB]/ in use:1[59.80GiB]/ in noVG:0[0] 2.查看物理卷详细信息。 1 2 3 4 5 6 7 8 9 10 11 [root@hadoop01~] #pvdisplay ---Physicalvolume--- PVName /dev/sda2 VGNamevg51cto PVSize59.80GiB/notusable3.00MiB Allocatable yes (butfull) PESize4.00MiB TotalPE15309 FreePE0 AllocatedPE15309 PVUUIDpKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX 四、LVM空间管理 1.LVM减少LV空间 举例:减少/data空间,从20G减少到10G。 1)卸载设备(Unmount thefilesystem) 1 [root@hadoop01~] #umount/data/ 2)e2fsck命令检查文件系统(Checkthe filesystem) 1 2 3 4 5 6 7 8 [root@hadoop01~] #e2fsck-f/dev/mapper/vg51cto-lv_data e2fsck1.41.12(17-May-2010) 第一步:检查inode,块,和大小 第二步:检查目录结构 第3步:检查目录连接性 Pass4:Checkingreferencecounts 第5步:检查簇概要信息 /dev/mapper/vg51cto-lv_data :11 /1310720files (0.0%non-contiguous),126289 /5242880 blocks 3)resize2fs命令调整lv大小,10G表示调整后/data剩余空间。 1 2 3 4 [root@hadoop01~] #resize2fs/dev/mapper/vg51cto-lv_data10G resize2fs1.41.12(17-May-2010) Resizingthefilesystemon /dev/mapper/vg51cto-lv_data to2621440(4k)blocks. Thefilesystemon /dev/mapper/vg51cto-lv_data isnow2621440blockslong. 4)lvreduce命令减少文件系统大小(Resizethe filesystem),表示将/data的空间减少9G。 1 2 3 4 5 6 [root@hadoop01~] #lvreduce-L-9G/dev/mapper/vg51cto-lv_data WARNING:Reducingactivelogicalvolumeto11.00GiB THISMAYDESTROYYOURDATA(filesystemetc.) Doyoureallywanttoreducelv_data?[y /n ]:y Reducinglogicalvolumelv_datato11.00GiB Logicalvolumelv_datasuccessfullyresized 5)vgs命令查看卷组剩余空间为9G。 6)mount文件系统并查看磁盘空间剩余空间。 2.LVM增加LV空间 举例:将刚才9G空间增加到/home分区。 1)vgs命令查看是否有空闲空间可以扩容。 1 2 3 [root@hadoop01~] #vgs VG #PV#LV#SNAttrVSizeVFree vg51cto150wz--n-59.80g9.00g 2)df -h查看当前磁盘空间 3)lvextend命令将home分区空间增加9G。 1 2 3 4 5 6 7 8 [root@hadoop01~] #lvextend-L+9G-f-r/dev/mapper/vg51cto-lv_home Extendinglogicalvolumelv_hometo14.00GiB Logicalvolumelv_homesuccessfullyresized resize2fs1.41.12(17-May-2010) Filesystemat /dev/mapper/vg51cto-lv_homeis mountedon /home ;on-lineresizingrequired olddesc_blocks=1,new_desc_blocks=1 Performinganon-lineresizeof /dev/mapper/vg51cto-lv_home to3670016(4k)blocks. Thefilesystemon /dev/mapper/vg51cto-lv_home isnow3670016blockslong. 4)查看分区是否增加成功。 五、LVM在线扩容 服务器磁盘空间不足,添加新的硬盘后,需要把空间添加当前分区当中。 linux中SCSI的第1个硬盘/dev/sda,第2个硬盘/dev/sdb依此类推。其中服务器第一块硬盘/dev/sda已经划分为LVM分区。/dev/sdb是新加的硬盘。 1)用pvcreate /dev/sdb命令初始化分区sdb为物理卷(PV)。 1 2 [root@hadoop01~] #pvcreate/dev/sdb Physicalvolume "/dev/sdb" successfullycreated 2)pvdisplay命令显示物理卷的信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@hadoop01~] #pvdisplay ---Physicalvolume--- PVName /dev/sda2 VGNamevg51cto PVSize59.80GiB/notusable3.00MiB Allocatable yes (butfull) PESize4.00MiB TotalPE15309 FreePE0 AllocatedPE15309 PVUUIDpKC6SA-fkfe-OAl2-scVr-tq0h-EAXD-AWpwgX "/dev/sdb" isanewphysicalvolumeof "40.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdb VGName PVSize40.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUIDdMeOLS-Sks3-8k3q-pVWp-Iuz2-0Hh2-8njjhY 3)vgextend命令将pv加入到vg,vgcreate命令为新创建vg(vgcreate vg51cto /dev/sdb),这里的vg51cto已经存在,只需要用vgextend加入即可。 1 2 [root@hadoop01~] #vgextendvg51cto/dev/sdb Volumegroup "vg51cto" successfullyextended 4)用vgdisplay命令查看vg信息,看到已经有40G空闲PE。 5)lvextend命令扩展分区,将40G空间全部添加到/data分区。 直接增加40G空间不足,报下面的错误,因此添加39.9G的空间。 Insufficient free space:10240 extents needed, but only 10239 available 1 2 3 4 [root@hadoop01~] #lvextend-L+39.99G/dev/mapper/vg51cto-lv_data Roundingsizetoboundarybetweenphysicalextents:39.99GiB Extendinglogicalvolumelv_datato50.99GiB Logicalvolumelv_datasuccessfullyresized 6)上一步操作只是增加了逻辑卷的大小,用resize2fs命令重新定义文件系统的大小。 1 2 3 4 5 6 [root@hadoop01~] #resize2fs/dev/mapper/vg51cto-lv_data resize2fs1.41.12(17-May-2010) Filesystemat /dev/mapper/vg51cto-lv_datais mountedon /data ;on-lineresizingrequired olddesc_blocks=1,new_desc_blocks=4 Performinganon-lineresizeof /dev/mapper/vg51cto-lv_data to13367296(4k)blocks. Thefilesystemon /dev/mapper/vg51cto-lv_data isnow13367296blockslong. 7)查看磁盘在线扩容是否正常。 总结: 1)/分区不能umount,说明/分区只能扩容,不能减少/分区的空间。 2)减少分区的时候需要卸载分区,进行umount操作。 3)扩容的分区的时候不需要卸载分区。 4)重命名vg,lv命名后,需要修改/etc/fstab和/etc/grub.conf引导文件。 本文转自 sfzhang 51CTO博客,原文链接:http://blog.51cto.com/sfzhang88/1710059,如需转载请自行联系原作者