LVM---Linux

来源:互联网 发布:centos lnmp安装包 编辑:程序博客网 时间:2024/05/18 11:46

LVM


1、LVM简介

LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。(由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。)

通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可,也就是我们常说的动态调整分区的大小。

简单来说:把物理存储设备的差异隐藏在LVM统一的接口之下;好处是接口统一,管理方式统一,还可以进行动态卷扩展。

2、基本术语

物理存储介质、物理卷(PV)、卷组(VG)、逻辑卷(LV)、物理块(PE)、逻辑块(LE)。

●物理存储介质(PhysicalStorageMedia)

指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

●物理卷(Physical Volume,PV)

指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

●卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

●逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

●物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

●逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

LVM抽象模型:

 3、安装

查看是否安装了LVM

[root@mqd /]# rpm -qa | grep lvm

如果没有,可以使用命令安装:rpm -ivh 软件名

4、创建LVM

创建LVM系统,一般需要一下步骤:

创建分区、创建PV、创建VG、创建LV、LV格式化和挂载。

4.1、创建分区(如果是整个硬盘做一个pv,大家可以想想怎么操作)

使用分区工具fdisk来进行分区,方法与一般的磁盘分区一样,区别在于lvm的分区类型是8e。

先查看磁盘分区的信息,其中可以看到刚刚添加的5G新硬盘:

[root@mqd ~]# fdisk -l

Disk /dev/sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


创建两个分区:

[root@mqd ~]# fdisk /dev/sdb

Device contains neither a valid DOS partitiontable, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier0xa5e4e1ca.

Changes will remain in memory only, until youdecide to write them.

After that, of course, the previous content won'tbe recoverable.

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

WARNING: DOS-compatible mode is deprecated. It'sstrongly recommended to

        switch off the mode (command 'c') and change display units to

        sectors (command 'u').

Command (m for help): n       #n是新建分区

Command action

   e   extended

   p   primary partition (1-4)

p                                              #p主分区

Partition number (1-4): 1        #第一个分区

First cylinder (1-652, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-652,default 652): 2G              #大小

Command (m for help): p              #列出分区表

Disk /dev/sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xa5e4e1ca

   DeviceBoot      Start         End      Blocks  Id  System

/dev/sdb1               1           2       16033+ 83  Linux

Command (m for help): n       #n是新建分区

Command action

   e   extended

   p   primary partition (1-4)

p                                              #p主分区

Partition number (1-4): 2        #第二个分区

First cylinder (3-652, default 3):

Using default value 3

Last cylinder, +cylinders or +size{K,M,G} (3-652,default 652):

Using default value 652

Command (m for help): p              #列出分区表

Disk /dev/sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x8134619a

   DeviceBoot      Start        End      Blocks   Id System

/dev/sdb1               1           2       16033+ 83  Linux

/dev/sdb2               3         652    5221125   83  Linux

Command (m for help): t        #更改分区类型

Partition number (1-4): 1        #第一个分区

Hex code (type L to list codes): 8e       #分区类型

Changed system type of partition 1 to 8e (LinuxLVM)

Command (m for help): t        #更改分区类型

Partition number (1-4): 2        #第二个分区

Hex code (type L to list codes): 8e              #分区类型

Changed system type of partition 2 to 8e (LinuxLVM)

Command (m for help): p              #列出分区表

Disk /dev/sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x8134619a

   DeviceBoot      Start         End      Blocks  Id  System

/dev/sdb1               1           2       16033+ 8e  Linux LVM

/dev/sdb2               3         652    5221125   8e Linux LVM

Command (m for help): w             #保存。如果想退出输入:q

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

至此分区就完成了,可使用fdisk -l查看分区的情况:

[root@mqd /]# fdisk -l

4.2、创建PV

把新建的/dev/sdb1和/dev/sdb2两个分区转化为物理卷,其主要是添加LVM属性信息并划分PE存储单元。

[root@mqd /]# pvcreate /dev/sdb1/dev/sdb2

  Physicalvolume "/dev/sdb1" successfully created

  Physicalvolume "/dev/sdb2" successfully created

查看有哪些pv

[root@mqd /]# pvs

[root@mqd /]# pvdisplay

注:pvs是查看pv简单的信息,pvdisplay是查看pv详细的信息。

4.3、创建VG

查看是否有vg

[root@mqd /]# vgs

[root@mqd /]# vgdisplay

注:vgs是查看vg简单的信息,vgdisplay是查看vg详细的信息。

创建新的vg,使用vgcreate

[root@mqd /]# vgcreate vg_01 /dev/sdb2

如果想直接把pv加入已存在的vg,可使用vgextend

[root@mqd /]# vgextend vg_00 /dev/sdb1

如果想删除多余的vg,可使用vgremove

[root@mqd /]# vgremove vg_01

4.4、创建LV

查看是否有lv

[root@mqd /]# lvs

[root@mqd /]# lvdisplay

注:lvs是查看lv简单的信息,lvdisplay是查看lv详细的信息。

(1)创建一个大小为500M名为test-lv1的逻辑卷

[root@mqd /]# lvcreate -L 500M -n test-lv1 vg_01

(2)创建一个占空闲空间90%名为test-lv2的逻辑卷

[root@mqd /]#lvcreate -l 90%Free -n test-lv2 vg_01

说明:-L指定大小;-n指定名字;vg_01指从vg_01划分空间

4.5、LV格式化和挂载

[root@mqd /]#mkfs(可按Tab键两次查看可使用的格式)

[root@mqd /]#mkfs.ext4 /dev/vg_01/test-lv1

在/mnt下创建一个文件夹,然后新的lv挂载到这个目录

[root@mqd /]#mkdir /mnt/test-lvm1

挂载前查看,然后挂载

[root@mqd /]#df -h

[root@mqd /]#mount /dev/vg_01/test-lv1 /mnt/test-lvm1

查看是否挂载成功

[root@mqd /]#df -h

已看到挂载成功,但下次重启linux系统后,挂载设备又看不到了,这个需要在/etc/fstab分区表文件添加相关信息

[root@mqd /]#vi /etc/fstab

注意:如果挂载前这个目录下有文件,挂载后是看不到的,原来的文件仍然在原来的分区,umount后才可以看到原来的文件

5、管理LVM

5.1、LV管理

(1)LV扩容
给逻辑卷增加空间并不会影响以前空间的使用,所以无需卸载文件系统,即:(支持在线扩展)

查看lv和文件系统的信息

[root@mqd /]#lvs

[root@mqd /]#df -h

查看vg剩余空间

[root@mqd /]#vgs

扩容500M

[root@mqd ~]# lvextend -L +500M /dev/vg_01/test-lv1

查看lv和文件系统的信息

[root@mqd /]#lvs

[root@mqd /]#df -h

这个时候发现lv的容量增加了,但文件系统的大小没有变化,需要调整文件系统大小

 [root@mqd~]#resize2fs /dev/vg_01/test-lv1

(2)LV缩减

首先需要卸载,不能在线缩减,切记

[root@mqd /]#umount/mnt/test-lvm1

检测test-lv1的空闲空间

[root@mqd /]#e2fsck -f /dev/vg_01/test-lv1

使用resize2fs将文件系统减少到700M

[root@mqd /]#resize2fs /dev/vg_01/test-lv1 700M

使用lvreduce命令将逻辑卷减少到700M

[root@mqd /]#lvreduce -L 700M /dev/vg_01/test-lv1

  Volumegroup "vb_01" not found

  Cannotprocess volume group vb_01

[root@mqd mnt]# lvreduce -L 700M/dev/vg_01/test-lv1

  WARNING:Reducing active logical volume to 700.00 MiB.

  THIS MAYDESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg_01/test-lv1? [y/n]:y

  Size oflogical volume vg_01/test-lv1 changed from 1000.00 MiB (250 extents) to 700.00MiB (175 extents).

  Logicalvolume test-lv1 successfully resized.

注意:文件系统大小和逻辑卷大小一定要保持一致才行;如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费;如果逻辑卷小于文件系统,那数据就有可能出问题。

重新挂载/mnt/test-lvm1

[root@mqd /]# mount /dev/vg_01/test-lv1 /mnt/test-lvm1

查看/mnt/testlvm是否挂载

[root@mqd /]# mount | grep /mnt/test-lvm1

(3)LV删除

首先得确保挂载的这个目录下为的,卸载

[root@mqd /]#umount /mnt/test-lvm1

修改/etc/fstab里面逻辑卷的挂载信息

[root@mqd /]#vi /etc/fstab

通过lvremove 删除逻辑卷

[root@mqd /]#lvremove /dev/vg_01/test-lv1

Do you really want to remove active logical volumetest-lv1? [y/n]: y

  Logicalvolume "test-lv1" successfully removed

查看lv

[root@mqd /]#lvs

5.2、VG管理

(1)vg扩容

查看vg

[root@mqd ~]# vgs

在有未挂卷组的PV(/dev/sdb3)情况下扩容:

[root@ mqd ~]# vgextend vg_01 /dev/sdb3

(2)增加vg

[root@ mqd ~]# vgcreate vg_02 /dev/sdb3

(3)缩减vg

这里对应的也可以说是对pv的缩减。

Umount文件系统/mnt/test-lvm1,卸载前需要确保目录下为空

[root@ mqd ~]#umount /mnt/test-lvm1

查看当前pv的情况

[root@ mqd ~]#pvs

将/dev/sdb2从卷组vg_01移除

[root@ mqd ~]#vgreduce vg0 /dev/sdb2

(4)删除vg

确保卷组下没有lv后,执行:

[root@ mqd ~]# vgremove vg_02

5.3、PV管理

(1)添加(创建)

[root@mqd /]# pvcreate /dev/sdb1

(2)从vg移除

[root@ mqd ~]#vgreduce vg_01 /dev/sdb2

(3)改变物理卷的分配许可

[root@mqd /]#pvchange -x n /dev/sdb1

(4)删除pv

[root@mqd /]#pvremove /dev/sdb2

(5)其他命令

扫描物理卷

[root@mqd ~]# pvscan

gparted

MBR,GPT

6、LVM应用

6.1、vg磁盘(信息)迁移

场景:主机A下在一块磁盘B上创建了vg_1,并且创建了LV_1挂载在/mnt/test下,里面有数据;

需求:将主机A的磁盘B迁到主机B,还原VG且数据在主机B能查看。

步骤:主机A备份vg,将主机A的磁盘b迁到主机B,将备份文件拷贝到主机B,还原vg,激活vg,挂载。

1、在主机A备份VG

[root@l-a ~]#vgcfgbackup vg_1

此时会在目录/etc/lvm/backup下生成一个vg_1文件。

2、将主机A的磁盘b迁到主机B。

3、将主机A的备份文件vg_1拷贝到主机B对应的目录,因主机B没有目录,需要手动创建目录/etc/lvm/backup。

4、拷贝文件到主机B后,开始还原vg:

[root@l-b ~]#vgcfgrestore vg_1

5、激活卷组

[root@l-b ~]#vgchange -ay

激活前在/dev下是看不到vg_1这个文件夹的,激活成功后就会有。

6、挂载逻辑卷(挂载文件系统)

[root@l-b ~]#mount /dev/vg_1/lv_1 /mnt/test

进入/mnt/test查看是否有原主机A的数据,如果有就算成功迁移了数据。

7、修改fstab文件

/etc/fstab是用来存放文件系统的静态信息的文件

当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录,简单来说:开机挂载了指定目录的文件系统。