首页 > 代码库 > LVM逻辑卷管理

LVM逻辑卷管理

   LVM逻辑卷管理,在实际环境中被广泛的应用。使用LVM的最大的好处在与对磁盘分区大小和系统分区结构可以灵活的管理。它可以在服务器上新增加一块磁盘而做到不改变系统的分区结构,可动态增加逻辑分区大小,也可已在需要备份大量数据时,利用快照卷完成对某一逻辑卷的快照使得在数据备份时确保数据的一致性。所以在大多数场景中对LVM的使用是比较多的,所以在系统安装时建议使用LVM进行分区管理,LVM的原理上可以简单理解为是在物理块上做整合重新划分成逻辑上的块,使得在后期管理时可以添加减少其大小,相当于Oracle中表空间一样,当然在很多资料里都有比较专业的解释,在此就不做过多的篇幅介绍了。这里就以平时管理使用上比较常用的几个管理指令来说明。在介绍之前需要提及下是lvm的所有指令都是调用dmsetup来实现管理的,所以也可以通过dmsetup指令来完成LVM逻辑卷管理,只不过dmsetup指令参数太多过于复杂,所以才出现了lvm的管理软件,这样使得无论在是在LV还是PV和VG管理上指令统一、便于平时LVM逻辑卷的管理。需要注意的一点是现在的LVM软件大多都是lvm2,它比LVM做了进一步的改进,所以在LVM逻辑卷管理的过程中需要确保系统中有安装lvm2,如果没有安装可以通过yum或apt等包管理工具进行安装。LVM逻辑管理中比较常用的管理使用也比较简单,在此简单的举列说明。

   下面就先说一说LVM中的逻辑卷扩容管理:

动态扩容:
[root@localhost ~]# lvextend -L +3G -f -r /dev/VolGroup/LogVol02
#向LogVol02卷中增加3GB的空间并激活,注意如果是3GB则是修改成3GB,这个区别还是很大的且在增加空间时,需要确保VG中有足够的空间在每次需要修改之可以vgdisplay查看下卷组中详情
#其中-r参数就是在扩容后增加物理边界,激活逻辑卷分区
#resize2fs -p /dev/VolGroup/LogVol02
增加新逻辑卷:
lvcreate -L 200G -n LogVol02 VolGroup
#在VolGroup卷组内创建一个新的逻辑卷
mkfs.ext4 /dev/VolGroup/LogVol02
mount /dev/VolGroup/LogVol02 /data
#格式化后挂载新的逻辑卷
lvremove /dev/VolGroup/Vol01

移除操作:
#删除逻辑卷
vgremove VolGroup
#删除卷组,做这个删除操作之前需要注意是否有数据,应做好相应的备份,一旦删除数据是无法找回的

逻辑卷改名:
lvscan
#在操作前需要lvscan查看下逻辑卷的名字
lvrename /dev/VolGroup/LogVol01 /dev/VolGroup/Lv_root改名,在改后还需要去/etc/fstab文件中修改,这样在下次重启服务器是系统的磁盘分区能正确的自动挂载当然如果是修改LVM下的/目录或者是swap目录的话,还需要去修改引导文件,如Centos 6中的grub.conf文件

LVM逻辑卷组中加新磁盘:
先创建格式化新磁盘分区,并且创建LVM:

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb5a0e535.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: 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): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes
64 heads, 32 sectors/track, 51200 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb5a0e535

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-51200, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-51200, default 51200): 
Using default value 51200

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes
64 heads, 32 sectors/track, 51200 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb5a0e535

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       51200    52428784   83  Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes
64 heads, 32 sectors/track, 51200 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb5a0e535

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       51200    52428784   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# mkfs.ext4 /dev/sdb1#格式化分区
[root@localhost ~]# pvcreate /dev/sdb1#创建物理卷,创建好后可以使用pvscan查看
[root@localhost ~]# vgextend VolGroup /dev/sdb1把创建过物理卷的分区添加至逻辑卷组内

   在此LVM中的比较常用的扩容还有创建新的逻辑卷组等相关操作,总之使用方法都大致差不错,在此不做一一的介绍了,下面就开始说一说LVM中的收缩,需要注意的是LVM的收缩是和扩容不同的,在做LVM的磁盘收缩时是无法做到分区在线动态扩容的,在做LVM的的收缩之前需要先umount逻辑卷分区然后在做相应的磁盘检查操作后才能缩减,所以,如果在做/目录分区缩减时是无法在服务器在线缩减,必须系统的救援模式下进行,因此在做LVM逻辑卷分区缩减前需要注意,操作流程也不复杂就是扩容的相反的步骤:

[root@localhost ~]# umount /dev/VolGroup/Lv_data
[root@localhost ~]# e2fsck -f /dev/VolGroup/Lv_data#强制质检磁盘
[root@localhost ~]# resize2fs /dev/VolGroup/Lv_data -10G#先减小文件分区的大小
[root@localhost ~]# lvreduce -L -10G /dev/VolGroup/Lv_data#最后在缩减卷组
[root@localhost ~]# mount -a

   这样就是LVM中逻辑卷中比较常用的扩容、缩减的管理,除这两者之外还有一个比较特殊且实用的功能——快照卷,在平时需要做大批量数据备份时就比较实用的一种方式,利用快照卷可以做到不停止相应的业务情况下来进行数据的备份:

[root@localhost ~]# lvcreate -s -L 5G -n Lv_local_backup -p r /dev/mapper/VolGroup-Lv_local 
  Logical volume "Lv_local_backup" created.
  #建立一个5G大小的只读快照卷,快照卷的大小必须要大于等于Used,不然创建出来的快照卷没有实际意义
[root@localhost ~]# mount /dev/VolGroup/Lv_local_backup /mnt/
mount: block device /dev/mapper/VolGroup-Lv_local_backup is write-protected, mounting read-only

在实际生产环境中可以用根据实际情况创建相应逻辑分区的快照卷用来做数据备份,在备份完相应数据或者是不用时可以删除:

[root@localhost /]# umount /mnt/
[root@localhost mnt]# lvscan 
  ACTIVE            ‘/dev/VolGroup/Lv_root‘ [10.27 GiB] inherit
  ACTIVE            ‘/dev/VolGroup/Lv_data‘ [5.16 GiB] inherit
  ACTIVE   Original ‘/dev/VolGroup/Lv_local‘ [5.11 GiB] inherit
  ACTIVE   Snapshot ‘/dev/VolGroup/Lv_local_backup‘ [5.00 GiB] inherit
  [root@localhost mnt]# lvremove /dev/VolGroup/Lv_local_backup
Do you really want to remove active logical volume Lv_local_backup? [y/n]: y
  Logical volume "Lv_local_backup" successfully removed


本文出自 “技术随笔” 博客,谢绝转载!

LVM逻辑卷管理