本来打算将 LVM 的一些事情整理出来,以免遗忘,可是只写了一个大概的创建篇,就被种种”借口“,拖延至今没有再写,实在是自己太懒了,今儿又碰到了一个LVM的问题,所以,准备把扩容和删盘的问题写写。
之前创建篇的地址 http://www.edward-han.com/104.html
==============================================================================================

测试环境:2.6.18-128.7 & 2.6.18-194.1 & LVM2
如有不明白之处,可以先看上面提到的文章。

一、增加硬盘到 VG 中
1、先看下目前lvm的情况:
[php]
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 2.00G
/dev/sdd vg1 lvm2 a- 10.00G 10.00G
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 1 0 wz–n- 19.99G 11.99G
[root@localhost ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv1 vg1 -wi-a- 8.00G
[root@localhost ~]#
[/php]

2、识别到新的硬件 /dev/sde ;

3、把 /dev/sde 设为 pv
[php]
[root@localhost ~]# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created
[root@localhost ~]#
[/php]

4、把 PV /dev/sde 加入到 vg1 中
[php]
[root@localhost ~]# vgextend vg1 /dev/sde
Volume group "vg1" successfully extended
[root@localhost ~]#
[/php]

5、再看下各个状态:
[php]
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 2.00G
/dev/sdd vg1 lvm2 a- 10.00G 10.00G
/dev/sde vg1 lvm2 a- 10.00G 10.00G
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 3 1 0 wz–n- 29.99G 21.99G
[root@localhost ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv1 vg1 -wi-a- 8.00G
[root@localhost ~]#
[/php]
加盘的操作已经完成,很简单,没什么复杂过程。

二、扩大 LV 容量
接着上面的环境,以下类同。
1、备份数据,养成好习惯;

2、卸载 lv1 ;
[php]
[root@localhost ~]# umount /dev/vg1/lv1
[/php]

3、加大 lv1 容量,增加1G容量;
[php]
[root@localhost ~]# lvextend -L +1G /dev/vg1/lv1
Extending logical volume lv1 to 9.00 GB
Logical volume lv1 successfully resized
[root@localhost ~]#
[/php]

4、做下 e2fsck 检测
[php]
[root@localhost ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lv1: 517/1048576 files (13.3% non-contiguous), 200111/2097152 blocks
[root@localhost ~]#
[/php]

5、resize2fs 操作:
(1) ext2、ext3 文件系统
[php]
[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/vg1/lv1 to 2359296 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 2359296 blocks long.
[root@localhost ~]#
[/php]

(2)reiserfs 文件系统
[php]
resize_reiserfs -f /dev/vg1/lv1
[/php]

6、重新挂载,查看效果:
[php]
[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 6.7G 4.9G 1.6G 77% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 187M 0 187M 0% /dev/shm
/dev/mapper/vg1-lv1 8.9G 654M 7.9G 8% /mnt
[root@localhost ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv1 vg1 -wi-ao 9.00G
[root@localhost ~]#
[/php]

三、缩小 LV 容量
1、备份数据;

2、卸载 lv1

3、从 lv1 中缩小1G空间;
[php]
[root@localhost /]# lvreduce -L -1G -r /dev/vg1/lv1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/mapper/vg1-lv1: clean, 3106/1179648 files, 869683/2359296 blocks
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/mapper/vg1-lv1 to 2097152 (4k) blocks.
The filesystem on /dev/mapper/vg1-lv1 is now 2097152 blocks long.

Reducing logical volume lv1 to 8.00 GB
Logical volume lv1 successfully resized
[/php]
其中 -r 参数比较关键,如果直接缩小lv容量的话,容易把数据弄坏!

4、挂载上来,看看效果:
[php]
[root@localhost /]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv1 vg1 -wi-a- 8.00G
[root@localhost /]# mount /dev/vg1/lv1 /mnt
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 6.7G 4.9G 1.6G 77% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 187M 0 187M 0% /dev/shm
/dev/mapper/vg1-lv1 7.9G 3.2G 4.6G 42% /mnt
[/php]

没什么问题,还可以测试下读写,应该也没什么问题。

四、从 VG 中删除某个硬盘

1、从 VG 中删除某个硬盘,得看该硬盘是否被使用,需要具体问题具体分析:

(1)、如果是下面情况,删除 /dev/sdd 和 /dev/sde ,自然没有问题,因为它们虽然在vg1组里,但根本没有使用,所以可以直接删除:
[php]
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 2.00G
/dev/sdd vg1 lvm2 a- 10.00G 10.00G
/dev/sde vg1 lvm2 a- 10.00G 10.00G
[root@localhost /]# vgreduce vg1 /dev/sde
Removed "/dev/sde" from volume group "vg1"
[root@localhost /]# vgreduce vg1 /dev/sdd
Removed "/dev/sdd" from volume group "vg1"
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 2.00G
/dev/sdd lvm2 — 10.00G 10.00G
/dev/sde lvm2 — 10.00G 10.00G
[root@localhost /]#
[/php]

(2)、如果是下面情况
[php]
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 0
/dev/sdd vg1 lvm2 a- 10.00G 7.99G
/dev/sde vg1 lvm2 a- 10.00G 10.00G
[/php]

想删除 /dev/sdc 或者 /dev/sdd 的话,需要将 PV上的LE 移到其他空闲 PV 上:

[php]
[root@localhost ~]# pvmove /dev/sdc
/dev/sdc: Moved: 8.7%
/dev/sdc: Moved: 15.9%
/dev/sdc: Moved: 23.0%
/dev/sdc: Moved: 29.5%
/dev/sdc: Moved: 37.5%
/dev/sdc: Moved: 45.4%
/dev/sdc: Moved: 53.5%
/dev/sdc: Moved: 61.6%
/dev/sdc: Moved: 69.6%
/dev/sdc: Moved: 77.5%
/dev/sdc: Moved: 85.5%
/dev/sdc: Moved: 93.0%
/dev/sdc: Moved: 100.0%
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc vg1 lvm2 a- 10.00G 10.00G
/dev/sdd vg1 lvm2 a- 10.00G 7.99G
/dev/sde vg1 lvm2 a- 10.00G 0
[/php]

pvmove时,可以手动指定目标地址(pvmove /dev/sdc /dev/sde),也可以象上面一样,不用手动指定,系统会自动转移到剩余可用的PV上。
如果当剩余可用空间小于要移动的硬盘时,转移将无法进行。

2、将数据 move 到其他 PV 上后,就可以将该 PV 从 VG 组里删除了:
[php]
[root@localhost /]# vgreduce vg1 /dev/sdc
Removed "/dev/sdc" from volume group "vg1"
[root@localhost /]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdd vg1 lvm2 a- 10.00G 6.99G
/dev/sde vg1 lvm2 a- 10.00G 0
[/php]

以上都是基于 线性 模式操作的,先写到这里,如有错误,请指正~我也会随时更新的。
后面有时间再写下基于 交错 模式的操作方法,希望不会拖的太久。