在上一篇博文LVM---基本创建和使用中介绍了,LVM的基本配置和使用,这篇博文中我将断续介绍LVM的其它一些操作.

1.VG的扩展

2.VG的缩小

3.LV的扩展

4.LV的缩小


-------------------VG的扩展,VG的扩展相对简单三步操作就可以完成-----------------

步骤:

  1. 准备分区,设置新分区的System ID为8e    

  2. 使用pvcreate构建PV

  3. 使用vgextend将新的PV加入到原有VG中

查看当前系统中原有的PV:

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb1  testVG lvm2 a--  10.00g     0
  /dev/sdc1  testVG lvm2 a--  10.00g 10.00g

准备分区结果:

[root@localhost ~]# fdisk /dev/sdd
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1306    10490413+  8e  Linux LVM

使用pvcreate 命令创建pv:

[root@localhost ~]# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created

查看当前系统中的所有PV:

[root@localhost ~]# pvscan
  PV /dev/sdb1   VG testVG          lvm2 [10.00 GiB / 0    free]
  PV /dev/sdc1   VG testVG          lvm2 [10.00 GiB / 10.00 GiB free]
  PV /dev/sdd1                      lvm2 [10.00 GiB]
  Total: 3 [30.00 GiB] / in use: 2 [20.00 GiB] / in no VG: 1 [10.00 GiB]

可见sdb1和sdc1已经加入到了名为testVG的VG中,

将名为/dev/sdd1的PV加入到名为testVG中:

[root@localhost ~]# vgextend testVG /dev/sdd1
  Volume group "testVG" successfully extended

查看VG扩展结果:

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb1  testVG lvm2 a--  10.00g     0
  /dev/sdc1  testVG lvm2 a--  10.00g 10.00g
  /dev/sdd1  testVG lvm2 a--  10.00g 10.00g


------------VG的缩减--------------:

步骤:

  1. 确定要移除的PV

  2. 使用pvmove将此PV上的数据转移到其它PV

  3. 使用vgreduce:从卷组中将此PV移除

  4. 使用pvremove删除物理卷,真正删除pv的物理卷

移除名为/dev/sdb1的pv

pvmove /path/to/pv  将PV上的数据转移到其它PV,如果不指定目标PV则转移到同卷组的其它PV上:

[root@localhost ~]# pvmove  /dev/sdb1
  /dev/sdb1: Moved: 0.2%
  /dev/sdb1: Moved: 61.5%
  /dev/sdb1: Moved: 100.0%

卷组testVG的当前情况:

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb1  testVG lvm2 a--  10.00g 10.00g
  /dev/sdc1  testVG lvm2 a--  10.00g     0
  /dev/sdd1  testVG lvm2 a--  10.00g 10.00g

从卷组testVG中移除名为/dev/sdv1的PV:

[root@localhost ~]# vgreduce  testVG /dev/sdb1
  Removed "/dev/sdb1" from volume group "testVG"

再次查看卷组testVG的情况:

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb1         lvm2 a--  10.00g 10.00g
  /dev/sdc1  testVG lvm2 a--  10.00g     0
  /dev/sdd1  testVG lvm2 a--  10.00g 10.00g

可以看到vgreduce命令只是把/dev/sdb1从卷组testVG中移除,但并没有删除名为/dev/sdb1的PV

使用pvremove真正删除名为/dev/sdb1的PV:

[root@localhost ~]# pvremove  /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped

查看pvremove的操作结果,可以看到名为/dev/sdb1的pv被删除了

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdc1  testVG lvm2 a--  10.00g     0
  /dev/sdd1  testVG lvm2 a--  10.00g 10.00g

注意:pvmove 和 pvremove操作的不同,pvmove是移动数据,而pvremove是删除PV.

VG上的操作并不会影响lv中的数据

----------------LV的扩展----------------------

步骤:

  1. 确定当前逻辑卷所在的卷组有足够的空闲空间:

  2. 扩展物理边界,即分区的大小

  3. 扩展逻辑边界,即文件系统的大小

  4. 完成文件系统检测

使用命令pvs查看名为testVG的信息:

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testVG   2   1   0 wz--n- 20.00g 10.00g

可以看到在testVG的卷组中PV数为2 LV数为1 ,VG总大小为20G ,空闲10G

查看lv的大小:


[root@localhost ~]# lvs
  LV     VG     Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  testLV testVG -wi-ao--- 10.00g

使用命令lvextend [-L|-l] [+] SIZE /path/to/lv扩展物理边界的大小:

size前边有+号和没有加号的区别:

有+号:表示扩展了

无+号: 表示扩展到

-L:SIZE 以B ,M ,G 为单位表示扩展的量

-l:以物理扩展为单位,表示扩展了多少个pe

[root@localhost ~]# lvextend -L +5G /dev/testVG/testLV
  Extending logical volume testLV to 15.00 GiB
  Logical volume testLV successfully resized

使用lvs查看扩展后的lv的前况:

[root@localhost ~]# lvs
  LV     VG     Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  testLV testVG -wi-ao--- 15.00g

可以看到扩展成功,但是为什么我们把lv挂载之后使用df -lh查看,却只是看得到10G而不是15G呢?

[root@localhost ~]# df -lh /backup/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testVG-testLV
                      9.9G  151M  9.2G   2% /backup
[root@localhost ~]#j ld

是因为我们只扩展了分区的大小,并没有扩展文件系统的大小:

使用命令resize2fs  /path/to/device扩展文件系统:

[root@localhost ~]# resize2fs  /dev/testVG/testLV
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testVG/testLV is mounted on /backup; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testVG/testLV to 3932160 (4k) blocks.
The filesystem on /dev/testVG/testLV is now 3932160 blocks long.

再次使用df -lh 查看文区大小,可以看到结果也是15G了

[root@localhost ~]# df -lh /backup/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testVG-testLV
                       15G  153M   14G   2% /backup

文件系统检测:

fsck :可以检测所有的支持的文件系统

e2fsck [-t  fs_type][-f][-p]  /path/to/device 只支持ext系列文件系统  

-f :强制检测

-p:检测过程中如果有问题就修复

注意不能检测当前正处于挂载中的设备

[root@localhost ~]# umount /dev/testVG/testLV
[root@localhost ~]# e2fsck -f /dev/testVG/testLV
e2fsck 1.41.12 (17-May-2010)
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/testVG/testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 blocks


--------------------缩减逻辑卷------------------------------(有风险)

步骤:

  1. 确定要缩减为多大? 前提是:至少能容纳原有的所有数据

  2. 卸载当前正在挂载中的LV并检测文件系统

  3. 缩减逻辑边界 resize2fs /path/to/device SIZE

  4. 缩减物理边界 lvreduce [-L | -l ] SIZE /path/to/lv

  5. 检测文件系统

  6. 挂载使用

查看当前处于挂载中的设备:

[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/mapper/testVG-testLV on /backup type ext4 (rw)

卸载当前正在挂载中的LV并检测文件系统

[root@localhost ~]# umount /dev/mapper/testVG-testLV
[root@localhost ~]# e2fsck -f /dev/mapper/testVG-testLV
e2fsck 1.41.12 (17-May-2010)
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/mapper/testVG-testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 block

使用resize2fs使用缩减逻辑边界:

[root@localhost ~]# resize2fs /dev/testVG/testLV  5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testVG/testLV to 1310720 (4k) blocks.
The filesystem on /dev/testVG/testLV is now 1310720 blocks long.

使用lvs查看LV,发现LV并没有变化,因为我们只缩减了逻辑边界,并没有缩减物理边界

[root@localhost ~]# lvs
  LV     VG     Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  testLV testVG -wi-a---- 15.00g

使用lvreduce缩减物理边界:

[root@localhost ~]# lvchange  -a n /dev/testVG/testLV
[root@localhost ~]# lvreduce -L 5G /dev/testVG/testLV
  Reducing logical volume testLV to 5.00 GiB
  Logical volume testLV successfully resized
[root@localhost ~]# lvchange  -a y /dev/testVG/testLV

再次使用lvs发现lv减小了:

[root@localhost ~]# lvs
  LV     VG     Attr      LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  testLV testVG -wi-a---- 5.00g

检测文件系统:

[root@localhost ~]# e2fsck  -f /dev/testVG/testLV
e2fsck 1.41.12 (17-May-2010)
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/testVG/testLV: 12/327680 files (0.0% non-contiguous), 58463/1310720 blocks

挂载设备并查看大小:

[root@localhost ~]# mount /dev/testVG/testLV  /backup/
[root@localhost ~]# df -lh /backup/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testVG-testLV
                      5.0G  148M  4.6G   4% /backu

-------------------------完-------------------------------------------------