首页 > Linux, 基础知识 > (一) LVM系列之创建篇—制作LVM操作实例(完整步骤)含线性模式linear和条带模式striped

(一) LVM系列之创建篇—制作LVM操作实例(完整步骤)含线性模式linear和条带模式striped


——————————————————————————————————————————————————
很久没有写文章了,距上次更新,已有十来天的光景了,最近事儿挺多,忙来忙去,到头来也是瞎忙一场,没有多大收成,哎,该反省总结了。

好了,废话不多说了,开始正题,这次准备写一些关于LVM逻辑卷的文章,理论部分可能不会太多,重点是实际操作部分,结合遇到的问题加以阐述。有需要用到LVM的朋友,可以拿去借鉴,如果文章中有什么错误信息,烦请各位指正。谢谢!
——————————————————————————————————————————————————

测试环境:
操作系统:Asianux3.0 sp3 x86-64 (kernel 2.6.18-194.1AXS3)
LVM2 :lvm2-2.02.56-8.1.0.1.AXS3

一、创建篇
本节主要是讲LVM逻辑卷的创建,如果有对LVM理论不太熟悉的朋友,可以先去看看LVM的原理,我在这儿暂且不表,直接讲下LVM创建实例。

要在Linux系统上使用LVM的功能,除了核心必须支持以外,还必须得安装LVM2套件。现在的Linux系统,核心都能支持,并且系统也自带了LVM2套件,如果没有装的话,就得自己动手装装了。

整个LVM制作流程可以简单分成三个部分,制作PV、创建VG、划分LV,下面来依次介绍。

1、建立和查询 PV

1.1、我准备了一个2G的盘来做测试,设备为/dev/sdb,

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

然后对这个设备划分两个分区,来制作PV之用。当然,也可以直接把 /dev/sdb 作为一个pv。

[root@localhost ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         914     7237282+  83  Linux
/dev/sda3             915        1044     1044225   82  Linux swap / Solaris

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
[root@localhost ~]# fdisk /dev/sdb

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): +300M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (38-261, default 38):
Using default value 38
Last cylinder or +size or +sizeM or +sizeK (38-261, default 261): +400M

Command (m for help): p

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          37      297171   83  Linux
/dev/sdb2              38          87      401625   83  Linux  

现在可以看到 ID 为83,这是LINUX格式,我们需要做PV,则需要将 ID 更改为 8e ,成为 LINUX LVM 格式。继续上面的操作:

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 (Linux LVM)

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 (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          37      297171   8e  Linux LVM
/dev/sdb2              38          87      401625   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@localhost ~]# partprobe
[root@localhost ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         914     7237282+  83  Linux
/dev/sda3             915        1044     1044225   82  Linux swap / Solaris

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          37      297171   8e  Linux LVM
/dev/sdb2              38          87      401625   8e  Linux LVM

通过上面的操作,我们可以看出,已经将ID更改为8e,并且使用 partprobe 命令,让核心立刻读取最新的分区表,而不需要重新启动系统。

1.2、现在开始使用刚才建立的两个分区,来创建我们的PV设备。

[root@localhost ~]# pvscan
  No matching physical volumes found
[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvscan
  PV /dev/sdb1                      lvm2 [290.21 MB]
  PV /dev/sdb2                      lvm2 [392.21 MB]
  Total: 2 [682.42 MB] / in use: 0 [0   ] / in no VG: 2 [682.42 MB]

使用 pvcreate 命令将分区改为pv格式后,可以使用 pvscan 命令搜索当前系统里任何具有PV格式的磁盘,如果想要查看详细的信息,可以执行 pvdisplay 命令。

[root@localhost ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "290.21 MB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               290.21 MB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               4F633B-c57H-DQ0D-FppL-Ujv0-eDCH-mnBRko

  "/dev/sdb2" is a new physical volume of "392.21 MB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name
  PV Size               392.21 MB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Axqcih-c0VU-peX7-SL22-q4QM-rQg2-zrluIj

当然,也可以删除任何一个pv设备,使用 pvremove 命令即可。

[root@localhost ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped
[root@localhost ~]# pvscan
  PV /dev/sdb1                      lvm2 [290.21 MB]
  Total: 1 [290.21 MB] / in use: 0 [0   ] / in no VG: 1 [290.21 MB]

2、建立和查询 VG

2.1、创建VG时要使用 vgcreate 命令,格式和具体操作如下:

[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
  Volume group "vg1" successfully created
[root@localhost ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg1" using metadata type lvm2

2.2、查询VG详细信息可以使用 vgdisplay 命令,如

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  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               680.00 MB
  PE Size               4.00 MB
  Total PE              170
  Alloc PE / Size       0 / 0
  Free  PE / Size       170 / 680.00 MB
  VG UUID               DMO8p5-OZoJ-QM0v-ewcW-KU0E-HZ0T-DUrO2l

2.3、在这里罗嗦几句关于PE的概念,所谓 PE,就是 Physical Extend 物理扩展,在建立VG的时候,需要指定PE的数值,如果不指定,则默认为 4MB 。那么当PE为4MB 时,VG最大的容量就是256GB,不难看到,PE有点像VG的块,PE的大小决定了VG的容量。如果想让VG大于默认的256GB,那么就要改变PE这个数值。需要注意的是,一个VG最大可以允许65534个PE。

更改PE的值,要在创建VG时就要指定,使用 -s 参数即可。

[root@localhost ~]#  vgcreate  -s  16M  vg1  /dev/sdb1   /dev/sdb2
   Volume group "vg1" successfully created

这样,名为vg1的VG容量从256GB增加到了 1TB 。不同的版本的核心对于PE的限制也不同,具体情况可以参看下man vgcreate中-s参数的解释。

但是,只有LVM1需要指定PE大小,来达到控制VG容量的效果,而现在的linux大部分都使用了 LVM 2 ,LVM2的PE数量已经没有限制了,所以,设置PE的大小,只会影响速率,而不会影响VG容量大小。

2.4、在VG内删除PV和增加PV设备
在VG内,可以随意删除某个PV设备,也可以随意添加某个PV设备进入到VG内,使用的命令为 vgreduce 和 vgextend

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  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               672.00 MB
  PE Size               16.00 MB
  Total PE              42
  Alloc PE / Size       0 / 0
  Free  PE / Size       42 / 672.00 MB
  VG UUID               EzIPfa-DVvM-itX0-y1nd-MxsJ-ZUdZ-8eqsxB

[root@localhost ~]# vgreduce   vg1   /dev/sdb2
  Removed "/dev/sdb2" from volume group "vg1"
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               288.00 MB
  PE Size               16.00 MB
  Total PE              18
  Alloc PE / Size       0 / 0
  Free  PE / Size       18 / 288.00 MB
  VG UUID               EzIPfa-DVvM-itX0-y1nd-MxsJ-ZUdZ-8eqsxB

[root@localhost ~]# vgextend   vg1   /dev/sdb2
  Volume group "vg1" successfully extended
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  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               672.00 MB
  PE Size               16.00 MB
  Total PE              42
  Alloc PE / Size       0 / 0
  Free  PE / Size       42 / 672.00 MB
  VG UUID               EzIPfa-DVvM-itX0-y1nd-MxsJ-ZUdZ-8eqsxB

2.5、激活VG
当操作系统出现问题而无法开机时,备份数据显的由为重要。进入 rescue 模式或其他有 LVM 命令的环境,执行 pvscan 进行pv的扫描,此时可以查看到 pv和vg 的名字,再执行 vgchange -ay vg名字 命令,激活这个vg,就可以将里面的lv设备里的数据备份出来。
(1)单机使用LVM时,可以使用

vgchange  -a  y  vgname      #来激活vg
vgchange  -a n   vgname      #来非激活vg 

(2)Cluster模式下,有多台主机,当一台主机激活了VG,其他主机则无法激活VG,保证了数据的完整性,可以这样操作:

vgchange  -c y  vgname   #设置exclusive 属性;
vgchange  -a e  vgname   #以 exclusive 模式激活vg ,上一步操作是前提条件;
vgchange  -a n  vgname   #仍然使用这个命令来 非激活 vg ;
vgchange  -c n  vgname   #去掉 exclusive 属性;

(3)共享模式。允许VG被多台主机同时激活使用,如Oracle OPS等,但卷组里都必须是些裸设备才行,这样操作系统和文件系统不会对该设备进行操作,而完全交给应用程序来处理,数据的完整性也靠应用程序管理。

vgchange  -c y -S y   vgname   #设置VG为共享模式;
vgchange  -a -s  vgname         #共享方式激活VG;
vgchange  -a n  vgname   #仍然使用这个命令来 非激活 vg ;

2.6、删除VG
删除一个VG很简单,执行

vgremove    vgname    #删除名为vgname的vg 

3、创建LV
3.1、当vg创建好后,可以创建lv设备了,使用lvcreate命令即可:
在创建之前,需要介绍下两种模式,线性(linear)和交错(striped),默认情况下都是线性模式,如果有需要,可以选择交错模式。

线性(linear)
简单来说,就是按顺序分配,例如,LV 的 LE 1–100 映射到 pv1 上, LE 101—200 映射到 pv2 上。

格式:
lvcreate  -L  [sizeMG]  -n  [lvname]    vgname
例如:
[root@localhost ~]# lvcreate -L 96M -n lv1 vg1
  Logical volume "lv1" created
[root@localhost ~]# lvcreate -L 160M -n lv2 vg1
  Logical volume "lv2" created

条带(striped)
简单来说,就是交错分配,例如,LV的 LE1 映射到 pv1 的 PE1 上,LV的 LE2 映射到 pv2 的 PE1 上,LV的 LE3 映射到 pv1 的 PE2 上,LV的 LE4 映射到 pv2 的 PE2 上等等。

格式:
lvcreate  -i [Stripes] -I [StripeSize] -L [sizeMG] -n [lvname]  vgname
例如:
[root@localhost ~]# lvcreate -i 3 -I 4k -L 7G -n lv1 vg1
  Rounding size (1792 extents) up to stripe boundary size (1794 extents)
  Logical volume "lv1" created

-i 参数是在几个PV上建立交错模式,
-I 参数是采用交错模式时使用的块大小,默认是4K,也可以设大些,但必须是2的N此方,N最大为9。

3.2、查看lv信息
可以先扫描下lv设备 (lvscan),再查看下lv的详细信息 (lvdisplay)

[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg1/lv1' [96.00 MB] inherit
  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg1/lv1
  VG Name                vg1
  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                96.00 MB
  Current LE             6
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/vg1/lv2
  VG Name                vg1
  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                160.00 MB
  Current LE             10
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

3.3、扩大或减小lv的容量
可以使用 lvextend 和 lvreduce 命令来扩大或减少 lv 的大小,具体的扩容问题后面会有专门的小节讲到,在这儿先简单的介绍下这两个命令。

[root@localhost ~]# lvextend -L +32M /dev/vg1/lv1
  Extending logical volume lv1 to 128.00 MB
[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg1/lv1' [128.00 MB] inherit
  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg1/lv1
  VG Name                vg1
  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                128.00 MB
  Current LE             8
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/vg1/lv2
  VG Name                vg1
  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                160.00 MB
  Current LE             10
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
[root@localhost ~]# lvreduce -L -16M /dev/vg1/lv1
  WARNING: Reducing active logical volume to 112.00 MB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
  Reducing logical volume lv1 to 112.00 MB
  Logical volume lv1 successfully resized
[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg1/lv1' [112.00 MB] inherit
  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg1/lv1
  VG Name                vg1
  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                112.00 MB
  Current LE             7
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/vg1/lv2
  VG Name                vg1
  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                160.00 MB
  Current LE             10
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

4、格式化lv,正式使用lv

[root@localhost ~]# mkfs.ext3 /dev/vg1/lv1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
28672 inodes, 114688 blocks
5734 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
14 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 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]#

格式化为ext3格式后,挂载上来即可使用。

[root@localhost ~]#cd   /mnt
[root@localhost mnt]# mkdir   sdb1
[root@localhost mnt]# mount   /dev/vg1/lv1    /mnt/sdb1
[root@localhost mnt]# cd   sdb1/
[root@localhost sdb1]# ll
total 12
drwx------ 2 root root 12288 10-28 14:50 lost+found

[root@localhost sdb1]# df -h
Filesystem                     Size    Used  Avail  Use%   Mounted on
/dev/sda2                      6.7G    4.9G  1.6G  76%          /
/dev/sda1                      99M     12M    82M  13%        /boot
tmpfs                           187M     0   187M   0%        /dev/shm
/dev/mapper/vg1-lv1           109M    5.6M   98M   6%        /mnt/sdb1

至此,LVM 制作步骤结束,明天再写点关于扩容方面的介绍。如果大家喜欢,欢迎多多留言啊~~~ ^0^…



转载本站文章请注明,来自: Edward's Blog

本文链接: http://www.edward-han.com/104.html

分类: Linux, 基础知识 标签: , , , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须启用 javascript 才能在这儿看到验证码!

无觅相关文章插件,快速提升流量

加载中……