分享

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

 Harrison.Ding 2013-03-18

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

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

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

1、建立和查询 PV

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

1Disk /dev/sdb: 2147 MB, 2147483648 bytes
2255 heads, 63 sectors/track, 261 cylinders
3Units = cylinders of 16065 * 512 = 8225280 bytes
4 
5   Device Boot      Start         End      Blocks   Id  System

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

01[root@localhost ~]# fdisk -l
02 
03Disk /dev/sda: 8589 MB, 8589934592 bytes
04255 heads, 63 sectors/track, 1044 cylinders
05Units = cylinders of 16065 * 512 = 8225280 bytes
06 
07   Device Boot      Start         End      Blocks   Id  System
08/dev/sda1   *           1          13      104391   83  Linux
09/dev/sda2              14         914     7237282+  83  Linux
10/dev/sda3             915        1044     1044225   82  Linux swap / Solaris
11 
12Disk /dev/sdb: 2147 MB, 2147483648 bytes
13255 heads, 63 sectors/track, 261 cylinders
14Units = cylinders of 16065 * 512 = 8225280 bytes
15 
16   Device Boot      Start         End      Blocks   Id  System
17[root@localhost ~]# fdisk /dev/sdb
18 
19Command (m for help): n
20Command action
21   e   extended
22   p   primary partition (1-4)
23p
24Partition number (1-4): 1
25First cylinder (1-261, default 1):
26Using default value 1
27Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): +300M
28 
29Command (m for help): n
30Command action
31   e   extended
32   p   primary partition (1-4)
33p
34Partition number (1-4): 2
35First cylinder (38-261, default 38):
36Using default value 38
37Last cylinder or +size or +sizeM or +sizeK (38-261, default 261): +400M
38 
39Command (m for help): p
40 
41Disk /dev/sdb: 2147 MB, 2147483648 bytes
42255 heads, 63 sectors/track, 261 cylinders
43Units = cylinders of 16065 * 512 = 8225280 bytes
44 
45   Device Boot      Start         End      Blocks   Id  System
46/dev/sdb1               1          37      297171   83  Linux
47/dev/sdb2              38          87      401625   83  Linux 

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

01Command (m for help): t
02Partition number (1-4): 1
03Hex code (type L to list codes): 8e
04Changed system type of partition 1 to 8e (Linux LVM)
05 
06Command (m for help): t
07Partition number (1-4): 2
08Hex code (type L to list codes): 8e
09Changed system type of partition 2 to 8e (Linux LVM)
10 
11Command (m for help): p
12 
13Disk /dev/sdb: 2147 MB, 2147483648 bytes
14255 heads, 63 sectors/track, 261 cylinders
15Units = cylinders of 16065 * 512 = 8225280 bytes
16 
17   Device Boot      Start         End      Blocks   Id  System
18/dev/sdb1               1          37      297171   8e  Linux LVM
19/dev/sdb2              38          87      401625   8e  Linux LVM
20 
21Command (m for help): w
22The partition table has been altered!
23 
24Calling ioctl() to re-read partition table.
25 
26WARNING: Re-reading the partition table failed with error 16: Device orresource busy.
27The kernel still uses the old table.
28The new table will be used at the next reboot.
29Syncing disks.
30[root@localhost ~]# partprobe
31[root@localhost ~]# fdisk -l
32 
33Disk /dev/sda: 8589 MB, 8589934592 bytes
34255 heads, 63 sectors/track, 1044 cylinders
35Units = cylinders of 16065 * 512 = 8225280 bytes
36 
37   Device Boot      Start         End      Blocks   Id  System
38/dev/sda1   *           1          13      104391   83  Linux
39/dev/sda2              14         914     7237282+  83  Linux
40/dev/sda3             915        1044     1044225   82  Linux swap / Solaris
41 
42Disk /dev/sdb: 2147 MB, 2147483648 bytes
43255 heads, 63 sectors/track, 261 cylinders
44Units = cylinders of 16065 * 512 = 8225280 bytes
45 
46   Device Boot      Start         End      Blocks   Id  System
47/dev/sdb1               1          37      297171   8e  Linux LVM
48/dev/sdb2              38          87      401625   8e  Linux LVM

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

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

01[root@localhost ~]# pvscan
02  No matching physical volumes found
03[root@localhost ~]# pvcreate /dev/sdb1
04  Physical volume "/dev/sdb1" successfully created
05[root@localhost ~]# pvcreate /dev/sdb2
06  Physical volume "/dev/sdb2" successfully created
07[root@localhost ~]# pvscan
08  PV /dev/sdb1                      lvm2 [290.21 MB]
09  PV /dev/sdb2                      lvm2 [392.21 MB]
10  Total: 2 [682.42 MB] / in use: 0 [0   ] / in no VG: 2 [682.42 MB]

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

01[root@localhost ~]# pvdisplay
02  "/dev/sdb1" is a new physical volume of "290.21 MB"
03  --- NEW Physical volume ---
04  PV Name               /dev/sdb1
05  VG Name
06  PV Size               290.21 MB
07  Allocatable           NO
08  PE Size (KByte)       0
09  Total PE              0
10  Free PE               0
11  Allocated PE          0
12  PV UUID               4F633B-c57H-DQ0D-FppL-Ujv0-eDCH-mnBRko
13 
14  "/dev/sdb2" is a new physical volume of "392.21 MB"
15  --- NEW Physical volume ---
16  PV Name               /dev/sdb2
17  VG Name
18  PV Size               392.21 MB
19  Allocatable           NO
20  PE Size (KByte)       0
21  Total PE              0
22  Free PE               0
23  Allocated PE          0
24  PV UUID               Axqcih-c0VU-peX7-SL22-q4QM-rQg2-zrluIj

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

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

2、建立和查询 VG

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

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

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

01[root@localhost ~]# vgdisplay
02  --- Volume group ---
03  VG Name               vg1
04  System ID
05  Format                lvm2
06  Metadata Areas        2
07  Metadata Sequence No  1
08  VG Access             read/write
09  VG Status             resizable
10  MAX LV                0
11  Cur LV                0
12  Open LV               0
13  Max PV                0
14  Cur PV                2
15  Act PV                2
16  VG Size               680.00 MB
17  PE Size               4.00 MB
18  Total PE              170
19  Alloc PE / Size       0 / 0
20  Free  PE / Size       170 / 680.00 MB
21  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 参数即可。

1[root@localhost ~]#  vgcreate  -s  16M  vg1  /dev/sdb1   /dev/sdb2
2   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

01[root@localhost ~]# vgdisplay
02  --- Volume group ---
03  VG Name               vg1
04  System ID
05  Format                lvm2
06  Metadata Areas        2
07  Metadata Sequence No  1
08  VG Access             read/write
09  VG Status             resizable
10  MAX LV                0
11  Cur LV                0
12  Open LV               0
13  Max PV                0
14  Cur PV                2
15  Act PV                2
16  VG Size               672.00 MB
17  PE Size               16.00 MB
18  Total PE              42
19  Alloc PE / Size       0 / 0
20  Free  PE / Size       42 / 672.00 MB
21  VG UUID               EzIPfa-DVvM-itX0-y1nd-MxsJ-ZUdZ-8eqsxB
22 
23[root@localhost ~]# vgreduce   vg1   /dev/sdb2
24  Removed "/dev/sdb2" from volume group "vg1"
25[root@localhost ~]# vgdisplay
26  --- Volume group ---
27  VG Name               vg1
28  System ID
29  Format                lvm2
30  Metadata Areas        1
31  Metadata Sequence No  2
32  VG Access             read/write
33  VG Status             resizable
34  MAX LV                0
35  Cur LV                0
36  Open LV               0
37  Max PV                0
38  Cur PV                1
39  Act PV                1
40  VG Size               288.00 MB
41  PE Size               16.00 MB
42  Total PE              18
43  Alloc PE / Size       0 / 0
44  Free  PE / Size       18 / 288.00 MB
45  VG UUID               EzIPfa-DVvM-itX0-y1nd-MxsJ-ZUdZ-8eqsxB
46 
47[root@localhost ~]# vgextend   vg1   /dev/sdb2
48  Volume group "vg1" successfully extended
49[root@localhost ~]# vgdisplay
50  --- Volume group ---
51  VG Name               vg1
52  System ID
53  Format                lvm2
54  Metadata Areas        2
55  Metadata Sequence No  3
56  VG Access             read/write
57  VG Status             resizable
58  MAX LV                0
59  Cur LV                0
60  Open LV               0
61  Max PV                0
62  Cur PV                2
63  Act PV                2
64  VG Size               672.00 MB
65  PE Size               16.00 MB
66  Total PE              42
67  Alloc PE / Size       0 / 0
68  Free  PE / Size       42 / 672.00 MB
69  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时,可以使用

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

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

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

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

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

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

1vgremove    vgname    #删除名为vgname的vg

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

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

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

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

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

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

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

01[root@localhost ~]# lvscan
02  ACTIVE            '/dev/vg1/lv1' [96.00 MB] inherit
03  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
04[root@localhost ~]# lvdisplay
05  --- Logical volume ---
06  LV Name                /dev/vg1/lv1
07  VG Name                vg1
08  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
09  LV Write Access        read/write
10  LV Status              available
11  # open                 0
12  LV Size                96.00 MB
13  Current LE             6
14  Segments               1
15  Allocation             inherit
16  Read ahead sectors     auto
17  - currently set to     256
18  Block device           253:0
19 
20  --- Logical volume ---
21  LV Name                /dev/vg1/lv2
22  VG Name                vg1
23  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
24  LV Write Access        read/write
25  LV Status              available
26  # open                 0
27  LV Size                160.00 MB
28  Current LE             10
29  Segments               1
30  Allocation             inherit
31  Read ahead sectors     auto
32  - currently set to     256
33  Block device           253:1

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

01[root@localhost ~]# lvextend -L +32M /dev/vg1/lv1
02  Extending logical volume lv1 to 128.00 MB
03[root@localhost ~]# lvscan
04  ACTIVE            '/dev/vg1/lv1' [128.00 MB] inherit
05  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
06[root@localhost ~]# lvdisplay
07  --- Logical volume ---
08  LV Name                /dev/vg1/lv1
09  VG Name                vg1
10  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
11  LV Write Access        read/write
12  LV Status              available
13  # open                 0
14  LV Size                128.00 MB
15  Current LE             8
16  Segments               1
17  Allocation             inherit
18  Read ahead sectors     auto
19  - currently set to     256
20  Block device           253:0
21 
22  --- Logical volume ---
23  LV Name                /dev/vg1/lv2
24  VG Name                vg1
25  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
26  LV Write Access        read/write
27  LV Status              available
28  # open                 0
29  LV Size                160.00 MB
30  Current LE             10
31  Segments               1
32  Allocation             inherit
33  Read ahead sectors     auto
34  - currently set to     256
35  Block device           253:1
01[root@localhost ~]# lvreduce -L -16M /dev/vg1/lv1
02  WARNING: Reducing active logical volume to 112.00 MB
03  THIS MAY DESTROY YOUR DATA (filesystem etc.)
04Do you really want to reduce lv1? [y/n]: y
05  Reducing logical volume lv1 to 112.00 MB
06  Logical volume lv1 successfully resized
07[root@localhost ~]# lvscan
08  ACTIVE            '/dev/vg1/lv1' [112.00 MB] inherit
09  ACTIVE            '/dev/vg1/lv2' [160.00 MB] inherit
10[root@localhost ~]# lvdisplay
11  --- Logical volume ---
12  LV Name                /dev/vg1/lv1
13  VG Name                vg1
14  LV UUID                9KNWK8-RGlB-VTiT-rn1R-IbGP-juoz-Froeco
15  LV Write Access        read/write
16  LV Status              available
17  # open                 0
18  LV Size                112.00 MB
19  Current LE             7
20  Segments               1
21  Allocation             inherit
22  Read ahead sectors     auto
23  - currently set to     256
24  Block device           253:0
25 
26  --- Logical volume ---
27  LV Name                /dev/vg1/lv2
28  VG Name                vg1
29  LV UUID                vHKb4j-MlSO-ppLG-Srk0-ofF4-silb-oT7Lel
30  LV Write Access        read/write
31  LV Status              available
32  # open                 0
33  LV Size                160.00 MB
34  Current LE             10
35  Segments               1
36  Allocation             inherit
37  Read ahead sectors     auto
38  - currently set to     256
39  Block device           253:1

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

01[root@localhost ~]# mkfs.ext3 /dev/vg1/lv1
02mke2fs 1.39 (29-May-2006)
03Filesystem label=
04OS type: Linux
05Block size=1024 (log=0)
06Fragment size=1024 (log=0)
0728672 inodes, 114688 blocks
085734 blocks (5.00%) reserved for the super user
09First data block=1
10Maximum filesystem blocks=67371008
1114 block groups
128192 blocks per group, 8192 fragments per group
132048 inodes per group
14Superblock backups stored on blocks:
15        8193, 24577, 40961, 57345, 73729
16 
17Writing inode tables: done
18Creating journal (4096 blocks): done
19Writing superblocks and filesystem accounting information: done
20 
21This filesystem will be automatically checked every 26 mounts or
22180 days, whichever comes first.  Use tune2fs -c or -i to override.
23[root@localhost ~]#

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

01[root@localhost ~]#cd   /mnt
02[root@localhost mnt]# mkdir   sdb1
03[root@localhost mnt]# mount   /dev/vg1/lv1    /mnt/sdb1
04[root@localhost mnt]# cd   sdb1/
05[root@localhost sdb1]# ll
06total 12
07drwx------ 2 root root 12288 10-28 14:50 lost+found
08 
09[root@localhost sdb1]# df -h
10Filesystem                     Size    Used  Avail  Use%   Mounted on
11/dev/sda2                      6.7G    4.9G  1.6G  76%          /
12/dev/sda1                      99M     12M    82M  13%        /boot
13tmpfs                           187M     0   187M   0%        /dev/shm
14/dev/mapper/vg1-lv1           109M    5.6M   98M   6%        /mnt/sdb1

至此,LVM 制作步骤结束

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多