由于上一篇LVM使用之一是从实际需要引入了LVM,但是并没有做介绍,所以首先我们先看看LVM逻辑卷管理的简单结构。
上图中术语解释如下:
VG:卷组,PV的集合
PV:物理卷,一个一个的物理硬盘或者说物理硬盘分区,由若干个PE组成
LV:逻辑卷,可以格式化成文件系统并mount到某个目录的设备,由若干个LE组成
/mnt:新建LV的挂载点(系统的/boot分区不可以使用LV)
*关于PE和LE在本文最后,再做详细介绍,免得读晕了,就不好玩了。
为了方便理解,你可以这样看,VG就是集合了所有物理硬盘PV的一个大硬盘,LV就是从这个大硬盘VG里划分出来的一个一个的小分区,并挂载到我们需要的目录下。
把一块硬盘作为PV追加到VG里的过程简单如下:
插入硬盘->创建LVM分区->创建PV->把PV追加到VG里
接下来,我们就按这个步骤开始尝试:
1.插入硬盘,并用fdisk -l命令确认我们新插入的硬盘。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@
test
~]
# fdisk -l
Disk
/dev/cciss/c0d0
: 293.6 GB, 293617820160 bytes
255 heads, 63 sectors
/track
, 35697 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/cciss/c0d0p1
* 1 13 104391 83 Linux
/dev/cciss/c0d0p2
14 2563 20482875 83 Linux
/dev/cciss/c0d0p3
2564 35697 266148855 8e Linux LVM
Disk
/dev/cciss/c0d1
: 146.8 GB, 146807930880 bytes
255 heads, 32 sectors
/track
, 35139 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes
Disk
/dev/cciss/c0d1
doesn't contain a valid partition table
|
从上面的信息我们可以看到,我要追加的设备是/dev/cciss/c0d1
*说明,其实我的测试机里的/dev/cciss/c0d0是由4块物理硬盘组成的raid1+0,为了测试LVM,我又追加了2块硬盘,做成了raid1,就是你看到的/dev/cciss/c0d1
2.创建LVM分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
[root@
test
~]
# fdisk /dev/cciss/c0d1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain
in
memory only,
until
you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders
for
this disk is
set
to 35139.
There is nothing wrong with that, but this is larger than 1024,
and could
in
certain setups cause problems with:
1) software that runs at boot
time
(e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS
/2
FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m
for
help): n <-新建分区
Command action
e extended
p primary partition (1-4)
p <-作为分区
Partition number (1-4): 1 <-分区号码
First cylinder (1-35139, default 1):<-直接回车,从第一个cylinder开始
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-35139, default 35139):<-直接回车,到最后一个cylinder为止
Using default value 35139
Command (m
for
help): t <-设置分区的system
id
Selected partition 1
Hex code (
type
L to list codes): 8e <-设置分区system
id
为LVM
Changed system
type
of partition 1 to 8e (Linux LVM)
Command (m
for
help): p <-显示我们设置的分区情况
Disk
/dev/cciss/c0d1
: 146.8 GB, 146807930880 bytes
255 heads, 32 sectors
/track
, 35139 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes
Device Boot Start End Blocks Id System
/dev/cciss/c0d1p1
1 35139 143367104 8e Linux LVM
Command (m
for
help): w <-确认无误,保存退出
The partition table has been altered!
Calling ioctl() to re-
read
par
Syncing disks.
|
2.把/dev/cciss/c0d1p1创建为PV并确认
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@
test
~]
# pvcreate /dev/cciss/c0d1p1
Physical volume
"/dev/cciss/c0d1p1"
successfully created
[root@
test
~]
# pvdisplay
--- Physical volume ---
PV Name
/dev/cciss/c0d0p3
VG Name VolGroup00
PV Size 253.82 GB / not usable 6.99 MB
Allocatable
yes
PE Size (KByte) 32768
Total PE 8122
Free PE 7469
Allocated PE 653
PV UUID 6K7yBW-NuRf-3Quv-LU8U-6N1S-DmzG-ccCmbx
"/dev/cciss/c0d1p1"
is a new physical volume of
"136.73 GB"
--- NEW Physical volume ---
PV Name
/dev/cciss/c0d1p1
VG Name
PV Size 136.73 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID TWzjBK-0N5x-1A6c-wht3-n4l1-7gFp-m24iy3
|
从15到25行可以看出,我们的PV创建成功,名字还是/dev/cciss/c0d1p1
3.把新建的PV添加到我们已有的VG卷组VolGroup00里并确认
首先,确认一下追加新的PV前VG卷组VolGroup00的状况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@
test
~]
# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access
read
/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 253.81 GB <--现在的VG大小是253.81 GB
PE Size 32.00 MB
Total PE 8122
Alloc PE / Size 653 / 20.41 GB
Free PE / Size 7469 / 233.41 GB <--剩余233.41 G
VG UUID 0UvEJz-rfLm-MVDb-20uW-JMCa-T14K-wCmyLO
|
开始追加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@
test
~]
# vgextend VolGroup00 /dev/cciss/c0d1p1
Volume group
"VolGroup00"
successfully extended
[root@
test
~]
# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access
read
/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 390.53 GB <--现在的VG大小是390.53 G
PE Size 32.00 MB
Total PE 12497
Alloc PE / Size 653 / 20.41 GB
Free PE / Size 11844 / 370.12 GB <--剩余370.12 GB
VG UUID 0UvEJz-rfLm-MVDb-20uW-JMCa-T14K-wCmyLO
|
可以看到,我们的新PV追加成功了。
前面,我们是把新建的PV添加到已有的VG里,如果们想把一个或者多个新建的PV组成一个新的VG,比如把/dev/sda1和/dev/sdb1组成一个叫MyVG01的VG。
1
|
[root@
test
~]
# vgcreate MyVG01 /dev/sda1 /dev/sdb1
|
现在简单的介绍一下PE和LE:
PE:即物理区域,是物理卷PV中可用于分配的最小存储单元,PE的大小是在创建卷组VG的时候确定的(vgcreate -s参数指定),PE的大小必须是2的整倍数,一旦确定不能更改,新的物理卷PV加入到VG后,PE的大小自动更改为VG中定义的PE大小,一个PV最多只能有65535个PE,也就是说PV的大小等于(PE大小×65535)M,所以如果你的硬盘大,在创建VG的时候,就不要把PE的大小指定的太小。由于本文是在系统已有的VG上操作,所以我们使用的是默认的PE大小。
LE:即逻辑区域,是逻辑卷LV中可用于分配的最小存储单元,当LV创建时,LVM系统会自动创建LE并自动维护PE/LE对应关系,在同一个卷组VG中,LE的大小和PE是相同的,每个LV包含的LE都可以找到与之对应的PE。
为了便于理解,再举个不太恰当的例子
假设:
VG:仓库
PV:仓库里箱子
PE:仓库里箱子里的苹果
LV:篮子
LE:取出仓库里箱子里的苹果放到篮子里的苹果
那么:
增加硬盘:往仓库(VG)里运装满苹果的箱子(PV)
删除硬盘:从仓库(VG)里把装满苹果的箱子(PV)运走
新建LV:拿筐子(LV)到仓库(VG)里的箱子(PV)里取苹果(PE)变成自己的LE
删除LV:把筐子(LV)里的苹果(LE)放回仓库(VG)里的箱子(PV)里
增加LV大小:再从仓库(VG)里的箱子(PV)里取一些苹果(PE)放到自己的筐子(LV)里
缩小LV大小:从自己的筐子(LV)里把苹果(LE)放回仓库(VG)里的箱子(PV)里