一、感性认识LVM
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgdata-lvdata
953M 819M 87M 91% /mnt/lvdir
如上所示,/mnt/lvdir目录已经使用了91%的容量,怎么才能在不转移/mnt/lvdir存储数据的情况,安全扩展/mnt/lvdir目录的容量呢?那么接下来就需要了解和掌握LVM的相关知识。
二、理解LVM
1、LVM位于磁盘分区和文件系统之间的逻辑层
2、如何将物理磁盘加入到LVM中呢?如下所示。
第一步:挂载两块新盘sdb和sdc
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
第二步:分别从sdb和sdc取500M容量,其磁盘格式为LVM,操作方式如下
[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-1305, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): +500M
# 改变分区系统的ID号,其8e代表LVM分区
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e #8e为LVM的分区格式
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 62 497983+ 8e Linux LVM
Command (m for help): w
[root@localhost ~]partprobe /dev/sdb #使分区表生效,无需重启
sdc与sdb的操作方式一致。
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 62 497983+ 8e Linux LVM
第三步:创建物理卷,即PV
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
第四步:创建卷组,即VG
[root@localhost ~]# vgcreate vgdata /dev/sdb1 /dev/sdc1 #vgdata是VG的名称
[root@localhost ~]# vgdisplay #查看VG信息
--- Volume group ---
VG Name vgdata
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 968.00 MB #容量为sdb1和sdc1之和
PE Size 4.00 MB
Total PE 242
Alloc PE / Size 0 / 0
Free PE / Size 242 / 968.00 MB
VG UUID dlZka4-aBJY-4MWE-2Rbq-Djl7-xj3M-qVq8gd
第5步:创建逻辑卷,即lv
[root@localhost ~]# lvcreate -L 968M -n lvdata vgdata # -L:表示容量大小,-n表示逻辑卷的名称,vgdata是VG的名称
[root@localhost ~]# lvdisplay #查看lv的信息
--- Logical volume ---
LV Name /dev/vgdata/lvdata #lv的路径
VG Name vgdata
LV UUID NtagXp-InFT-41fV-fXb9-JTD1-zHQ5-m3vUeP
LV Write Access read/write
LV Status available
# open 0
LV Size 968.00 MB #lv的大小
Current LE 242
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
第6步:格式化lv,挂载到目录/mnt/lvdir
[root@localhost ~]# mkfs.ext3 /dev/vgdata/lvdata
[root@localhost ~]# mount /dev/vgdata/lvdata /mnt/lvdir
[root@localhost mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgdata-lvdata
953M 18M 888M 2% /mnt/lvdir
第7步:写入测试数据
[root@localhost lvdir]# cat /mnt/lvdir/testlv
test lv file
三、解决第一部分提到的扩容问题(这里提到的扩容只能针对lvm分区)。
1、按照如上第二步的操作,添加容量为500M的lvm分区/dev/sdc2;(注意:partprobe)
Device Boot Start End Blocks Id System
/dev/sdc2 63 124 498015 8e Linux LVM
2、创建PV
[root@localhost lvdir]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created
3、VG操作
[root@localhost lvdir]# vgextend vgdata /dev/sdc2 #说明:为什么vgextend的容量需要添加到vgdata中呢?其原因在于,/mnt/lvdir挂载的分区目录为/dev/vgdata/lvdata,其中的vgdata就是创建的VG。
[root@localhost lvdir]# vgdisplay
--- Volume group ---
VG Name vgdata
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 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 1.42 GB #此时vgdata的容量就变为了1.42G,就是sdb1,sdc1和sdc2的容量之和。
第三步:扩容/mnt/lvdir的容量(比如扩展300M),通过lvextend命令
[root@localhost lvdir]# lvextend -L +300M /dev/vgdata/lvdata #-L +300M 表示添加300M
[root@localhost lvdir]# resize2fs /dev/vgdata/lvdata #重新设置其大小
第四步:df -h 发现其容量变成了1.3G,且以前存储的内容完好
[root@localhost lvdir]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgdata-lvdata
1.3G 819M 371M 69% /mnt/lvdir
[root@localhost lvdir]# cat /mnt/lvdir/testlv
test lv file
其他参考资料:
http://www.aminglinux.com/bbs/thread-7621-1-1.html
http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/22/3093405.html