一、简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
PE(Physical
Extends)- 物理扩展单元
每个 PV 都会以 PE 为基本单元划分。
LE(Logical Extends) - 逻辑扩展单元
组成 LV 的基本单元,一个 LE
对应一个 PE
通过实例的演示来详解LVM的应用场景:
实例1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录;
实例2: 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;
实例3:扩展testlv至7G,要求archlinux用户的文件不能丢失;
实例4:收缩testlv至3G,要求archlinux用户的文件不能丢失;
实例一(创建LVM):创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录;
[[email protected] ~]# fdisk -l | grep "^Disk\>" #查看硬盘个数 Disk /dev/sda: 21.5GB, 21474836480 bytes Disk identifier:0x0006b70f Disk /dev/sdc: 21.5GB, 21474836480 bytes Disk identifier:0x00000000 Disk /dev/sdd: 21.5GB, 21474836480 bytes Disk identifier:0x00000000 Disk /dev/sdb: 21.5GB, 21474836480 bytes Disk identifier:0x00000000
通过fdisk /dev/sdb创建lvm,{/dev/sdc
,/dev/sdd}步骤一样
[[email protected] ~]# pvcreate /dev/sdb1 #创建pv Physical volume "/dev/sdb1"successfully created [[email protected] ~]#pvcreate /dev/sdc1 Physical volume "/dev/sdc1"successfully created
[[email protected] ~]# vgcreate -s16M testvg /dev/sdb1 /dev/sdc1 #创建PE为16M,名为test的卷组 Volume group "testvg" successfullycreated [[email protected] ~]# vgs # 显示VG的信息,更详细的可以用vgdisplay VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 39.97g 39.97g
[[email protected] ~]# lvcreate -L 5G -n testlv testvg #创建大小为5G,为testlv的逻辑卷 Logical volume "testlv" created [[email protected] ~]# lvs #显示Llmv的信息 详细信息可用lvdisplay LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g
[[email protected] ~]# mke2fs -t ext4 /dev/testvg/testlv #格式化为ext4文件系统 mke2fs 1.41.12(17-May-2010) Filesystem label= OS type: Linux Block size=4096(log=2) Fragment size=4096(log=2) Stride=0 blocks,Stripe width=0 blocks 327680 inodes,1310720 blocks 65536 blocks (5.00%)reserved for the super user First data block=0 Maximum filesystemblocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backupsstored on blocks: 32768, 98304,163840, 229376, 294912, 819200, 884736
[[email protected]~]# mkdir /users [[email protected] ~]#mount mount mount.fuse mount.nfs4 mountstats mount.cifs mount.nfs mountpoint mount.tmpfs [[email protected] ~]# mount /dev/testvg/testlv /users/ #挂载至/users [[email protected] ~]# df -h 显示挂载的分区 Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.8G 8.5G 787M 92% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 488M 27M 437M 6% /boot /dev/sda5 980M 2.8M 947M 1% /mysql /dev/mapper/testvg-testlv 4.8G 10M 4.6G 1% /users
实例二的创建过程省略:
[[email protected] users]# ls /users/ #显示/user的文件 abc.txt archlinux lost+found
实例三(拓展lvm):扩展testlv至7G,要求archlinux用户的文件不能丢失;
[[email protected] ~]# lvextend -L +2G /dev/testvg/testlv # -L +2 需要拓展的容量 Size of logical volume testvg/testlv changedfrom 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized [[email protected] ~]# lvs #显示后的容量 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 7.00g [[email protected] ~]# su - archlinux [[email protected] ~]$ ls #数据依然还在 pam.d
实例四(lvm的缩减):收缩testlv至3G,要求archlinux用户的文件不能丢失;
缩减步骤:
卸载分区---强制修复文件系统---缩减文件系统--缩减LVM
[[email protected] ~]#umount /dev/testvg/testlv [[email protected] ~]# e2fsck -f /dev/testvg/testlv #强制修复文件系统 e2fsck 1.41.12(17-May-2010) Pass 1: Checkinginodes, blocks, and sizes Pass 2: Checkingdirectory structure Pass 3: Checkingdirectory connectivity Pass 4: Checkingreference counts Pass 5: Checking group summary information /dev/testvg/testlv:77/327680 files (0.0% non-contiguous), 55962/1310720 blocks
[[email protected] ~]# resize2fs /dev/testvg/testlv 3G #将文件系统缩减到3G resize2fs 1.41.12(17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks. The filesystem on/dev/testvg/testlv is now 786432 blocks long. [[email protected] ~]# lvreduce -L 3G /dev/testvg/testlv #缩减LVM到3G WARNING: Reducing active logical volume to3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testlv? [y/n]: y Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume testlv successfully resized [[email protected] users]# lvs #显示的是3G LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 3.00g [[email protected] ~]# mount /dev/testvg/testlv /users/ #重新挂载分区
[email protected] users]# df -h #显示的容量是3G Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.8G 8.4G 860M 91% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 488M 27M 437M 6% /boot /dev/sda5 980M 2.8M 947M 1% /mysql /dev/mapper/testvg-testlv 2.9G 7.8M 2.7G 1% /users
[[email protected] ~]# su - archlinux [[email protected]~]$ [[email protected] ~]$ ls #数据依然还在 pam.d 通过缩减LVM很危险,操作需谨慎。。。。。。。