Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69366
  • 博文数量: 64
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-19 11:12
文章分类

全部博文(64)

文章存档

2013年(65)

我的朋友

分类: LINUX

2013-02-28 11:53:01

原文地址:Redhat 平台下 LVM 管理说明 作者:zzjlzx

Redhat 平台下 LVM 管理说明
分类: Linux 999人阅读 评论(0) 举报

       LVMLogical Volume Manager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力。LVM可以帮助系统管理员为应用与用户方便地分配存储空间。LVM管理下的逻辑卷可以按需改变大小或添加移除。另外,LVM可以为所管理的逻辑卷提供定制的命名标识。因此,使用LVM主要是方便了对存储系统的管理,增加了系统的扩展性。

       LinuxAIXHp-uinx平台下的LVM 命令是不一样的。下面以Redhat 下的命令来做一些说明。  

 

.  LVM 理论知识 1. 先来看一下LVM创建的流程: PV-->VG-->LV.

 

PV(Physical Volume) :物理卷,可以是单独磁盘,也可以是硬盘分区。

VG(Volume Group) :卷组,PV的组合,可以看成单独的逻辑磁盘。

LV(Logical Volume) :逻辑分区,当于物理分区的/dev/hdaX,只有逻辑卷才可以写数据。

PE(Physical Extent) :物理范围。VG单元,类似于RAID的条带大小。 当多个PV组成一个VG时,LVM会在所有PV上做类似格式化的动作,将每个PV切成一块块的空间,这一块块的空间就称为PE, 通常是4MB

LE(Logical Extent) :逻辑范围。LV的组成单位。大小为PE的倍数(通常为1:1)

 

 

2. 工作原理

 

     

 

       LVM 在每个物理卷头部都维护了一个 metadata,每个 metadata 中都包含了整个 VG 的信息,包括每个 VG 的布局配置、PV 的编号、LV 的编号,以及每个 PE LE 的映射关系。同一个 VG 中的每个 PV 头部的信息是相同的,这样有利于故障时进行数据恢复。

 

       LVM 对上层文件系统提供 LV 层,隐藏了操作细节。对文件系统而言,对 LV 的操作与原先对 Partition 的操作没有差别。当对 LV 进行写入操作时,LVM 定位相应的 LE,通过 PV 头部的映射表,将数据写入到相应的 PE 上。

 

       LVM 实现的关键在于在 PE LE 间建立映射关系,不同的映射规则决定了不同的 LVM 存储模型。LVM 支持多个 PV Stripe Mirror,这点和软 Raid 的实现十分相似。

 

使用 LVM 的优势:

 

•文件系统可以跨多个磁盘,因此大小不会受物理磁盘的限制。

•可以在系统运行状态下动态地扩展文件系统大小。

•可以增加新磁盘到 LVM 的存储池中。

•可以以镜像的方式冗余重要数据到多个物理磁盘上。

•可以很方便地导出整个卷组,并导入到另外一台机器上。

 

使用 LVM 的限制:

 

•在从卷组中移除一个磁盘时必须使用 reducevg,否则会出问题。

•当卷组中的一个磁盘损坏时,整个卷组都会受影响。

•不能减小文件系统大小(受文件系统类型限制)。

•因为加入了额外的操作,存储性能会受影响(使用 Stripe 的情况另当别论)。

 

 

 

 

. 创建相应的磁盘分区 1. 修改磁盘,创建相应的分区

[root@san iscsi]# fdisk -l

 

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1         255     2048256   83  Linux

/dev/sda2             256         382     1020127+  82  Linux swap / Solaris

/dev/sda3             383        5221    38869267+   5  Extended

/dev/sda5             383         395      104391   83  Linux

/dev/sda6             396         408      104391   83  Linux

/dev/sda7             409         421      104391   83  Linux

/dev/sda8             422         434      104391   83  Linux

 

这里创建了4个扩展分区,每个100M fdisk /dev/sda创建的。 分区没有格式化。

2. 使用磁盘分区生效

#partprobe      

 

 

. 创建PV 1.相关命令

pvcreate  创建PV

pvscan    扫描PV

pvdisplay 显示PV

pvremove  删除PV

partprobe

 

2.创建物理卷

[root@san iscsi]# pvcreate /dev/sda5 /dev/sda6

  Physical volume "/dev/sda5" successfully created

  Physical volume "/dev/sda6" successfully created

[root@san iscsi]# pvscan

  PV /dev/sda5                      lvm2 [101.94 MB]

  PV /dev/sda6                      lvm2 [101.94 MB]

  Total: 2 [203.89 MB] / in use: 0 [0   ] / in no VG: 2 [203.89 MB]

[root@san iscsi]# pvdisplay

  "/dev/sda5" is a new physical volume of "101.94 MB"

  --- NEW Physical volume ---

  PV Name               /dev/sda5

  VG Name              

  PV Size               101.94 MB

  Allocatable           NO

  PE Size (KByte)       0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               hDtAhK-adlx-5Ex0-ogc1-Alvm-H274-a8u7c2

  

  "/dev/sda6" is a new physical volume of "101.94 MB"

  --- NEW Physical volume ---

  PV Name               /dev/sda6

  VG Name              

  PV Size               101.94 MB

  Allocatable           NO

  PE Size (KByte)       0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               Sy1wPG-XnjQ-eYD5-91vj-Ug5b-EGgU-i30lCS

  

 

. 创建VG 1.相关命令

vgcreate   创建VG

vgscan     扫描VG

vgdispaly

vgextend

vgreduce  

vgchange

vgremove

 

2.创建逻辑卷VG

[root@san iscsi]# vgcreate vg0 /dev/sda5 /dev/sda6

  Volume group "vg0" successfully created

[root@san iscsi]# vgscan

  Reading all physical volumes.  This may take a while...

  Found volume group "vg0" using metadata type lvm2

  Device '/dev/sda6' has been left open.

  Device '/dev/sda5' has been left open.

[root@san iscsi]# vgdisplay

  --- Volume group ---

  VG Name               vg0

  System ID            

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                2

  Act PV                2

  VG Size               200.00 MB

  PE Size               4.00 MB  /*分配的块的大小默认为4M*/

  Total PE              50

  Alloc PE / Size       0 / 0  

  Free  PE / Size       50 / 200.00 MB

  VG UUID               iE7uoy-boR3-N6Cv-91Gf-G5vE-ftD6-gSGVlB

 

3.删除与添加逻辑卷

[root@san iscsi]# vgreduce vg0 /dev/sda5

  Removed "/dev/sda5" from volume group "vg0"

[root@san iscsi]# vgextend vg0 /dev/sda5

  Volume group "vg0" successfully extended

 

4. PE LV 大小的关系

In order to limit the Linux kernel memory usage, there is a limit of 65,536 physical extents (PE) per logical volume (LV). Hence, the LVM PE size will directly determine the maximum size of a logical volume (LV)! For example, 4MB PE size (the default PE size) will limit single logical volume (LV) to 256GB, 16MB PE size will limit single LV to grow beyond 1TB, etc.

Beside the PE size, the maximum size of single LV is also limited by CPU architecture and Linux kernel version:

Linux kernel version 2.4.x limit the maximum LV size to 2TB.
 

Some older Linux kernel prior to 2.4.x, the maximum LV size is limited to 1TB (caused by the integer signedness problems in the block layer).
 

The combination of 32-bit CPU and Linux kernel version 2.6.x, the limit of logical volume size is maximized at 16TB.
 

For Linux kernel 2.6.x running on 64-bit CPU, the maximum LV size is 8EB (extremely terrible big storage for this time being!)

 

from

 

这段问题里有如下2个重点信息:

1. PE 的大小决定LV 的容量,默认4M PE 最大支持的256G LV 16MPE 最大支持1TBLV

2. 影响LV 容量的还有CPU 架构。 对于32bit 下,Linux 内核为2.6.X的支持16TB64bit 下,Linux 内核为2.6.x的支持8EB

 

所以如果要想支持大量的LV 那么对在创建LV 的时候,还需要指定PE 的大小。 这个我们在vgcreate命令中加一个-s 参数即可:

 

[root@san iscsi]# vgremove vg0

  Volume group "vg0" successfully removed

[root@san iscsi]# vgcreate -s 16MB vg0 /dev/sda5 /dev/sda6

  Volume group "vg0" successfully created

[root@san iscsi]# vgscan

  Reading all physical volumes.  This may take a while...

  Found volume group "vg0" using metadata type lvm2

  Device '/dev/sda6' has been left open.

  Device '/dev/sda5' has been left open.

[root@san iscsi]# vgdisplay

  --- Volume group ---

  VG Name               vg0

  System ID            

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                2

  Act PV                2

  VG Size               192.00 MB

  PE Size               16.00 MB  - 这里我们看到PE 改成16MB了。

  Total PE              12

  Alloc PE / Size       0 / 0  

  Free  PE / Size       12 / 192.00 MB

  VG UUID               A9w4ho-3Fdo-ELYl-VRqY-yhaZ-61rt-68sXsi

 

 

 

五、创建逻辑卷LV 1.相关命令

lvcreate

lvscan

lvdisplay

lvextend

lvreduce

lvremove

lvresize

 

2.创建逻辑卷LV

[root@san iscsi]# lvcreate -L 184M -n date vg0

  Rounding up size to full physical extent 192.00 MB

  Logical volume "date" created

[root@san iscsi]# lvscan

  ACTIVE            '/dev/vg0/date' [192.00 MB] inherit

[root@san iscsi]# lvdisplay

  --- Logical volume ---

  LV Name                /dev/vg0/date

  VG Name                vg0

  LV UUID                PAyJph-B9K2-P15u-Zkl3-pBxs-e0TG-DCuRzq

  LV Write Access        read/write

  LV Status              available

  # open                 0

  LV Size                192.00 MB

  Current LE             12  -- 12*16MB=192MB,和之前的PE 1:1

  Segments               2

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:0

 

 

六、挂载逻辑卷LV 1. lv的格式化

[root@san vg0]# mkfs.ext3 /dev/vg0/date

mke2fs 1.40.8 (13-Mar-2008)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

49152 inodes, 196608 blocks

9830 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67371008

24 block groups

8192 blocks per group, 8192 fragments per group

2048 inodes per group

Superblock backups stored on blocks:

        8193, 24577, 40961, 57345, 73729

 

Writing inode tables: done                           

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 23 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@san vg0]# mkdir -p /u01/backup

[root@san vg0]# mount /dev/vg0/date /u01/backup

[root@san vg0]# df -T

Filesystem    Type   1K-blocks      Used Available Use% Mounted on

/dev/sda1     ext3     1984016    651076   1230528  35% /

tmpfs        tmpfs      349016         0    349016   0% /dev/shm

/dev/mapper/vg0-date

              ext3      190403      5664    174909   4% /u01/backup

 

挂载成功之后,就可以使用了。

 

 

七、LVM的容量调整

       LVM的容量调整可以在多个环节进行调整,比如:可以在物理卷上,VG上,以及LV上,都可以进行容量的扩展,这也是LVM它的一个优势所在。

 

1.添加物理卷(PV)

       首先应卸载在使用过程中的LV,然后必须保证该磁盘的类型是lvm类型,才能添加进来。

[root@san vg0]# umount /dev/mapper/vg0-date

[root@san vg0]# pvcreate /dev/sda7

  Physical volume "/dev/sda7" successfully created

[root@san vg0]# pvscan

  PV /dev/sda5   VG vg0             lvm2 [96.00 MB / 0    free]

  PV /dev/sda6   VG vg0             lvm2 [96.00 MB / 0    free]

  PV /dev/sda7                      lvm2 [101.94 MB]

  Total: 3 [293.94 MB] / in use: 2 [192.00 MB] / in no VG: 1 [101.94 MB]

 

 

2.添加VG的容量

把上面新添加的LVM磁盘加入到vg0卷组中。

 

[root@san vg0]# vgextend vg0 /dev/sda7

  Volume group "vg0" successfully extended

[root@san vg0]# vgdisplay

  --- Volume group ---

  VG Name               vg0

  System ID            

  Format                lvm2

  Metadata Areas        3

  Metadata Sequence No  3

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                1

  Open LV               0

  Max PV                0

  Cur PV                3

  Act PV                3

  VG Size               288.00 MB

  PE Size               16.00 MB

  Total PE              18

  Alloc PE / Size       12 / 192.00 MB

  Free  PE / Size       6 / 96.00 MB

  VG UUID               A9w4ho-3Fdo-ELYl-VRqY-yhaZ-61rt-68sXsi

 

3.添加LV的容量

把新加入LVM磁盘的容量加入LV中。

 

[root@san vg0]# lvextend -L +90M /dev/vg0/date

  Rounding up size to full physical extent 96.00 MB

  Extending logical volume date to 288.00 MB

  Logical volume date successfully resized

 

这里要注意,如果是lvextend -L 90MB /dev/vg0/date 则表示增加到90m 如果有加号,就表示增加90M

 

[root@san vg0]# lvscan

  ACTIVE            '/dev/vg0/date' [288.00 MB] inherit

[root@san vg0]# resize2fs -f /dev/vg0/date

resize2fs 1.40.8 (13-Mar-2008)

Resizing the filesystem on /dev/vg0/date to 294912 (1k) blocks.

The filesystem on /dev/vg0/date is now 294912 blocks long.

 

如果不做这一步, LV的容量没有真正的加入进LV卷中,因为相关信息写入到了磁盘超级块中。

 

4.挂载使用

[root@san vg0]# mount /dev/vg0/date /u01/backup

[root@san vg0]# df -T

Filesystem    Type   1K-blocks      Used Available Use% Mounted on

/dev/sda1     ext3     1984016    651128   1230476  35% /

tmpfs        tmpfs      349016         0    349016   0% /dev/shm

/dev/mapper/vg0-date

              ext3      285599      6168    267635   3% /u01/backup

 

 

八、LVM的卸载方法

LVM卸载的方法与分区的删除方法类似,就是最后创建的最先删除。顺序如下:

先删除LV

再删除VG

最后PV

 

以前的LVM的分区应用fdisk转换成其它类型的文件系统,当普通分区使用。

 

 

九、LVM的卸载过程 1umount取消挂载

[root@san vg0]# umount /dev/vg0/date

[root@san vg0]# df -T

Filesystem    Type   1K-blocks      Used Available Use% Mounted on

/dev/sda1     ext3     1984016    651148   1230456  35% /

tmpfs        tmpfs      349016         0    349016   0% /dev/shm

 

 

2.删除LV逻辑卷

[root@san vg0]# lvremove /dev/vg0/date

Do you really want to remove active logical volume "date"? [y/n]: y

  Logical volume "date" successfully removed

 

3.删除VG卷组

[root@san vg0]# vgchange -a n vg0

  0 logical volume(s) in volume group "vg0" now active

[root@san vg0]# vgremove vg0

  Volume group "vg0" successfully removed

 

vgchange 命令的说明,先看帮助:

[root@san vg0]# vgchange --help

  vgchange: Change volume group attributes

 

vgchange

        [-A|--autobackup {y|n}]

        [--alloc AllocationPolicy]

        [-P|--partial]

        [-d|--debug]

        [-h|--help]

        [--ignorelockingfailure]

        [--ignoremonitoring]

        [--monitor {y|n}]

        [-t|--test]

        [-u|--uuid]

        [-v|--verbose]

        [--version]

        {-a|--available [e|l]{y|n}  |  - 这个是我们使用的参数,表示状态可用不可用,有两个值:yn

         -c|--clustered {y|n} |

         -x|--resizeable {y|n} |

         -l|--logicalvolume MaxLogicalVolumes |

         -p|--maxphysicalvolumes MaxPhysicalVolumes |

         -s|--physicalextentsize PhysicalExtentSize[kKmMgGtTpPeE] |

         --addtag Tag |

         --deltag Tag}

        [VolumeGroupName...]

 

4.删除PV

[root@san vg0]# pvscan

  PV /dev/sda5                      lvm2 [101.94 MB]

  PV /dev/sda6                      lvm2 [101.94 MB]

  PV /dev/sda7                      lvm2 [101.94 MB]

  Total: 3 [305.83 MB] / in use: 0 [0   ] / in no VG: 3 [305.83 MB]

[root@san vg0]# pvremove /dev/sda5 /dev/sda6 /dev/sda7

  Labels on physical volume "/dev/sda5" successfully wiped

  Labels on physical volume "/dev/sda6" successfully wiped

  Labels on physical volume "/dev/sda7" successfully wiped 

 

 

. 命令说明

pvcreate (创建物理卷)

pvdisplay (显示物理卷信息)

pvscan (扫描物理卷)

pvmove (转移物理卷资料) 

pvmove /dev/hda1 /dev/hda2 (转移/dev/hda1资料到/dev/hda2)

pvmove /dev/hda1 (转到/dev/hda1资料到别的物理卷)

pvremove (删除物理卷)

 

vgcreate (创建卷组)

vgdisplay (显示卷组信息)

vgscan (扫描卷组)

vgextend (扩展卷组)   vgextend vg0 /dev/hda2  (把物理卷/dev/hda2加到vg0卷组中)

vgreduce (删除卷组中的物理卷) vgreduce vg0 /dev/hda2 (把物理卷/dev/hda2从卷组vg0中删除)

vgchange (激活卷组) vgchange -a y vg0 (激活卷组vg0) vgchange -a n vg0 (相反)

vgremove (删除卷组)   vgremove vg0 (删除卷组vg0)

 

lvcreate (创建逻辑卷)

lvdisplay (显示逻辑卷信息)

lvscan (扫描逻辑卷)

lvextend (扩展逻辑卷) lvextend -l +5G /dev/vg0/data  (扩展逻辑卷/dev/vg0/data 5G

 

mke2fs(查看LVblock),如:mke2fs -n /dev/vg0/date.  注意,这里一定要加-n 这里只是查看block数,如果不加,就把分区格式化了。 从这个命令可以得出Block sizeblocks,这两个数的乘积就是分区大小。

 

resize2fs(调整文件系统大小) resize2fs -f /dev/vg0/date 剩余的block

 

lvreduce (介绍LV大小)  lvreduce -L-50M /dev/vg0/date,调整lv分区大小,减小50M

 

lvremove (删除逻辑卷)

 

 

十一.  RHEL5LVM修复方法

       现在很多人对逻辑卷不是很细心,在做逻辑卷时可能会导致系统崩溃。在此我向各位提供自己修复逻辑卷的一点心得。

       首先说下因为逻辑卷而造成系统瘫痪的的原因。在做逻辑卷的时候造成文件系统和逻辑卷的大小不统一而造成的系统瘫痪。

      

       其实修复很简单,但你的系统瘫痪后会进入Linux的修复系统。由于进入修复模式后所有的文件和目录都为只读,需要从新挂载成可读可写。

       #mount -o remount,rw /
进入/etc/fstab这个文件将需要修复的逻辑卷注释掉。进入系统进行修改。

或者直接进行修改:

#lvm lvexdent -L 200M /dev/vgname/lvname

#resize2fs /dev/vgname/lvname 200M

在增大或缩小LVM时要注意顺序,这样可以避免在对逻辑卷进行修复。增大时先增大LV,后增大文件系统,缩小时先缩小文件系统,后缩小LV大小。

 

 

 

 

阅读(302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~