您的位置:首页 > 运维架构 > Linux

LVM的基础运用简介(linux-2.6.34)

2012-09-04 15:01 393 查看
1 简介

1.1 什么是LVM?

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现,与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储.它使系统管理员可以更方便的为应用与用户分配存储空间.在LVM管理下的存储卷可以按需要随时改变大小与移除.LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷.

1.2 为什么使用LVM?

LVM通常用于装备大量磁盘的系统,但它同样适于仅有一,两块硬盘的小系统.

1.2.1 小系统使用LVM的益处

传统的文件系统是基于分区的,一个文件系统对应一个分区这种方式比较直观,但不易改变:

1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;

2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间,

3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复.

当采用LVM时,情况有所不同:

1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;

2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;

3.文件系统建立在LVM上,可以跨分区,方便使用;

1.2.2 大系统使用LVM的益处

在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性.

在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡.

用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整.当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可.同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去.

2 LVM构成

2.1 卷组volume group (VG)

卷组是LVM中最高抽象层,是由一个或多个物理卷所组成的存储器池。

2.2 物理卷physical volume (PV)

典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID 卷。

2.3 逻辑卷logical volume (LV)

逻辑卷相当于非LVM系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。

2.4 物理块physical extent (PE)

物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。

2.5 逻辑块logical extent (LE)

逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

LVM的结构简图如下:

hda1 sda1 hdc1 sdc (PV:s 物理卷,一般为分区或整个硬盘)

\ | /

\ | /

volume group (VG 卷组由物理卷组成)

/ | \

/ | \

usrlv rootlv varlv (LV:s 逻辑卷在卷组上创建)

| | |

ext2 reiserfs xfs (建立在逻辑卷上的文件系统)

3.LVM的操作.

注:

在linux2.6.34内核下使用lvm,首先应该编译2.6.34内核.由于lvm对linux2.4以上版本都支持,所以在编译内核时没有特定的配置选项.在make menuconfig步骤中,将Device Drivers---->Multiple devices driver support (RAID and LVM)中的RAID support,Autodetect RAID arrays during kernel boot,Device mapper support,Mirror target,Zero
target这几个选项选中.然后就开始编译内核.编译完成过后,进入内核2.6.34.安装LVN2,比如在debian6中,直接运行apt-get install lvm2.再选择yes就顺利安装上lvm工具了.

3.1 建立PV

为把一个磁盘或分区作为PV,首先应使用 pvcreate 对其初始化,

运行lvm。进入lvm软件

root@deiban:~# lvm

lvm> help            ;运行help查看lvm对应的各个命令;

lvm>lvmdiskscan            ;首先运行lvmdiskscan,查看可以作为物理卷的设备;

lvm>pvcreate /dev/ram14

lvm>pvcreate /dev/ram15        ;将以上两个分区作为PV

pvcreate PV1 [ PV2 ... ];它的参数可以是整个磁盘、分区,也可以是一loop设备。

3.2 建立VG

在使用pvcreate 建立了PV后,可以用vgcreate 建立卷组,如有PV1、PV2分别是/dev/ram14与/dev/ram15,使用

lvm> vgcreate mytestvg /dev/ram14 /dev/ram15

将建立一个名为mytestvg的卷组,它由两个PV:/dev/ram14与/dev/ram15组成。vgcreate的一般用法为:

lvm> vgcreate [options] VG_name PV1 [PV2 ...]

其中的可选项包括设置VG最大支持的LV数、PE大小(缺省为4MB)等。

3.3 激活VG

在被激活之前,VG与LV是无法访问的,这时可用命令:

lvm> vgchange -a y mytestvg        ;此时已经激活mytestvg,并且它会显示0 logical volume(s) in volume group "mytestvg" mow active.因为此时还没有创建逻辑卷。

激活所要使用的卷组。

当不再使用VG时,可用

lvm> vgchange -a n mytestvg

使之不再可用。

vgchange可用来设置VG的一些参数,如是否可用( -a [y|n]选项)、支持最大逻辑卷数等。

3.4 移除VG

在移除一卷组前应确认卷组中不再有逻辑卷,首先休眠卷组:

lvm> vgchange -a n mytestvg

然后可用vgremove移除该卷组:

lvm> vgremove mytestvg            ;结果显示 Volume group "mytestvg" successfully removed.

3.5 为VG增加新PV

当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令vgextend,如

lvm> vgextend mytestvg /dev/hdc1

其中/dev/hdc1是新的PV,当然在这之前,它应使用pvcreate初始化。

3.6 从VG移除PV

在移除PV之前,应确认该PV没用被LV使用,这可用命令pvdisplay查看,如:

lvm> pvdisplay /dev/ram14

  --- Physical volume ---

  PV Name               /dev/ram14

  VG Name               mytestvg

  PV Size               16.00 MiB / not usable 4.00 MiB

  Allocatable           yes

  PE Size               4.00 MiB

  Total PE              3

  Free PE               3

  Allocated PE          0

  PV UUID               RkDRHl-sNiu-qkbq-ZNKB-VE9G-FAhj-KxSl9c

如这个PV仍在被使用,则应把数据传移到其它PV上。在确认它未被使用后,可用命令vgreduce把它从VG中删除,如:

# vgreduce mytestvg /dev/ram14

3.7 创建LV

在创建逻辑卷前,应决定LV使用哪些PV,这可用命令vgdisplay与pvdisplay查看当前卷组与PV的使用情况。在已有的卷组上创建逻辑卷使用命令lvcreate,如:

lvm>lvcreate -L 24M -n mylv mytestvg

在创建逻辑卷后,就可在其上创建文件系统并使用它。

命令lvcreate的常用方法:

lvcreate [options] -n 逻辑卷名 卷组名 [PV1 ... ]

其中的常用可选项有:

"-i Stripes :采用交错(striped)方式创建LV,其中Stripes指卷组中PV的数量。

"-I Stripe_size :采用交错方式时采用的块大小(单位为KB),Stripe_size必须为2的指数:2N ,N=2,3...9。

"-l LEs :指定LV的逻辑块数。

"-L size :指定LV的大小,其后可以用K、M、G表示KB、MB、GB。

"-s :创建一已存在LV的snapshot卷。

"-n name :为LV指定名称。

注:

1:

lvm> vgdisplay mytestvg | grep "Total PE"

Total PE 10230

lvm>lvcreate -l 10230 mytestvg -n mylv

将使用卷组mytestvg的全部空间创建逻辑卷mylv。

2:

lvm>lvdisplay 可以查看当前mylv的详细信息。

3.7.1创建文件系统

在LV mylv创建后,就可在其上建立文件系统,如果不创建文件系统,则本lv无法挂载。

如,ext2/ext3系统:

# mke2fs /dev/mytestvg/mylv

如,reiserfs:

# mkreiserfs /dev/mytestvg/mylv

3.7.2 测试文件系统

挂载LV:

# mount /dev/mytestvg/mylv /mnt

# df

则可以显示挂在信息。

还可以通过/mnt访问LV中的数据。

3.8 删除LV

为删除一个逻辑卷,必须首先从系统卸载其上的文件系统,然后可用lvremove删除,如:

# umount /dev/mytestvg/mylv

# lvremove /dev/mytestvg/mylv

lvremove -- do you really want to remove "/dev/mytestvg/mylv"? [y/n]: y

lvremove -- doing automatic backup of volume group "mytestvg"

lvremove -- logical volume "/dev/mytestvg/mylv" successfully removed

3.9 扩展LV

  可以指定扩展部分的位置(也就是,用哪些 PV 提供新的空间);只需将希望使用的 PV 附加在命令后面。

  即可以先将/dev/sda1加入vg,然后运用lvextend  /dev/mytestvg/mylv /dev/sda1.若指定后面的PV,则不需要提供-LXXM这个参数。

为逻辑卷增加容量可用使用lvextend,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如

# lvextend -L24M /dev/mytestvg/mylv

lvextend -- extending logical volume "/dev/mytestvg/mylv" to 24M

lvextend -- doing automatic backup of volume group "mytestvg"

lvextend -- logical volume "/dev/mytestvg/mylv" successfully extended

将扩大逻辑卷mylv的容量为24M。

# lvextend -L+8M /dev/myestvg/mylv

lvextend -- extending logical volume "/dev/mytestvg/mylv" to 32M

lvextend -- doing automatic backup of volume group "mytestvg"

lvextend -- logical volume "/dev/mytestvg/mylv" successfully extended

将为LV mylv再增大容量8M至32M。

为LV扩容的一个前提是:LV所在的VG有足够的空闲存储空间可用。

在为LV扩容之后,应同时为LV之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。

3.9.1 ext2/ext3

除非内核已有ext2online 补丁,否则在改变ext2/ext3文件系统的大小时应卸载它:

# umount /dev/mytestvg/mylv

# resize2fs /dev/mytestvg/mylv

# mount /dev/myestvg/mylv /home

这里假设mylv安装点为/home。在es2fsprogs-1.19或以上版本中包含resize2fs命令。

在LVM发行包中有一个称为e2fsadm的工具,它同时包含了lvextend与resize2fs的功能,如:

# e2fsadm -L+1G /dev/mytestvg/mylv

等价于下面两条命令:

# lvextend -L+1G /dev/mystvg/mylv

# resize2fs /dev/mytestvg/mylv

但用户仍需首先卸载文件系统。

3.9.2 reiserfs

与ext2不同,Reiserfs不必卸载文件系统,如:

# resize_reiserfs -f /dev/myestvg/mylv

3.10 缩小LV

逻辑卷可扩展同样也可缩小,但应在缩小LV之前首先减小文件系统,否则将可能导致数据丢失。

3.10.1 ext2/ext3

可以使用LVM的工具e2fsadm操作,如:

# umount /home

# e2fsadm -L-1G /dev/mytestvg/mylv

# mount /home

如果采用resize2fs,就必须知道缩少后卷的块数:

# umount /home

# resize2fs /dev/mytestvg/mylv 524288

# lvreduce -L-1G /dev/mytestvg/mylv

# mount /home

3.10.2 reiserfs

在缩小reiserfs时,应首先卸载它,如:

# umount /home

# resize_reiserfs -s-1G /dev/mytestvg/mylv

# lvreduce -L-1G /dev/mytestvg/mylv

# mount -treiserfs /dev/mytestvg/mylv /home

4 使用snapshot备份数据

4.1 使用snapshot 做备份

例如我们要对卷组"mytestvg"进行数据库备份,就要采用snapshot类型的卷组。这种卷组是其它卷组的一个只读拷贝,它含有在创建snapshot卷组时原卷组的所有数据,这意味你可以备份这个卷组而不用担心在备份过程中数据会改变,也不需要暂时关闭数据库卷以备份。

# lvcreate -L50M -s -p r -n lvmbackup /dev/mytestvg/mylv    ;此处lvmbackup为数据备份;

lvcreate -- WARNING: the snapshot must be disabled if it gets full

lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/mytestvg/lvmbackup"

lvcreate -- doing automatic backup of "tmytestvg"

lvcreate -- logical volume "/dev/mytestvg/lvmbackup" successfully created

注:-L 50M  是指定快照卷变化的大小

    -s  说明创建的是快照卷

    -p    r 创建的快照卷是只读的,防止用户在快照卷创建文件,快照可以卷仅仅是让我们获得一个备份路径

    -n   lvmsnap   给快照卷起的名字

        /dev/myvol/mylv1   对哪个逻辑卷创建快照卷,此处在卷组myvol下的逻辑卷mylv1创建

4.2 安装snapshot卷

现在可以安装该卷:

# mkdir /mnt/mytestvg/dbbackup

# mount /dev/mytestvg/lvmbackup /mnt/mytestvg/dbbackup

mount: block device /dev/mytestvg/lvmbackup is write-protected, mounting read-only

从上面可以看出,snapshot卷是只读的。

当使用XFS文件系统时,mount命令要使用nouuid与norecovery选项:

# mount /dev/mytestvg/lvmbackup /mnt/mytestvg/dbbackup -o nouuid,norecovery,ro

4.3 备份数据

如采用tar向磁带备份:

# tar -cf /dev/rmt0 /mnt/mytestvg/dbbackup

//tar -zcvfP /home/hs/Desktop/123 /mnt/dbback/lost+found/1.txt

4.4 删除snapshot 卷

在完成备份后,就可卸载并删除snapshot卷。

# umount /mnt/mytestvg/dbbackup

# lvremove /dev/test_vg/dbbackup

lvremove -- do you really want to remove "/dev/mttestvg/lvmbackup"? [y/n]: y

lvremove -- doing automatic backup of volume group "mytestvg"
lvremove -- logical volume "/dev/mttestvg/lvmbackup" successfully removed

注:1.不管是lv,还是快照,都是从现有的vg中分配空间,所以加入lvcreate出现空间不足时,只需将某一空闲磁盘块Pv一下,然后在加入vg就可以使用了

       2. 在lv扩展时,可以指定扩展到某一磁盘上。具体代码如下

             pvcreate /dev/sda1                               //   /dev/sda1为目标磁盘。

             vgextend   testvg  /dev/sda1

            lvextend -LxxxxM  /det/testvg/mylv  /dev/sda1   //   其中,xxxxM就是/dev/sda1的大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息