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

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的大小。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值