ps: 红字字体为重要部分, 仔细看
一、什么是LVM.?
LVM是Logical Volume Manager(逻辑卷管理)的简写, 它是Linux环境下磁盘分区继续管理的一种机制, 它由Heinz Mauelshagen在Linux2.4内核上实现;
二、为什么要用LVM.?
文件系统建立在逻辑卷上, 而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足需求;
使用LVM主要是方便管理、增加了系统的扩展性, 可以随时按要求增大,或根据使用情况对各逻辑进行调整,当系统空间不足而加入新的磁盘时,不必把用户的数据从原硬盘迁移到新硬盘, 而只需把新硬盘加入到卷组并扩充逻辑卷即可;
三、配置与管理
1. 测试环境;
[root@Centos1 ~]# cat /etc/redhat-release && uname -r CentOS release 6.6 (Final) 2.6.32-504.12.2.el6.x86_64
2. 创建分区;
[root@Centos1 ~]# fdisk /dev/sdc ================================================================= Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xb4007a2c. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n #新建一个分区; Command action e extended p primary partition (1-4) p #创建主分区 Partition number (1-4): 1 #分区编号 First cylinder (1-2610, default 1): #起始柱面 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +8G #分区大小为8G Command (m for help): n #新建一个分区; Command action e extended p primary partition (1-4) p #创建主分区 Partition number (1-4): 2 #分区编号 First cylinder (1046-2610, default 1046): #起始柱面 Using default value 1046 Last cylinder, +cylinders or +size{K,M,G} (1046-2610, default 2610): +8G #分区大小为8G Command (m for help): n #新建一个分区; Command action e extended p primary partition (1-4) p #创建主分区 Partition number (1-4): 3 #分区编号 First cylinder (2091-2610, default 2091): #起始柱面 Using default value 2091 Last cylinder, +cylinders or +size{K,M,G} (2091-2610, default 2610): +8G #分区大小为8G Value out of range. #提示硬盘所剩容量没有8G. Last cylinder, +cylinders or +size{K,M,G} (2091-2610, default 2610): #结束柱面为默认. 大概还剩4G. Using default value 2610 Command (m for help): p #查看分区 Disk /dev/sdc: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb4007a2c Device Boot Start End Blocks Id System /dev/sdc1 1 1045 8393931 83 Linux /dev/sdc2 1046 2090 8393962+ 83 Linux /dev/sdc3 2091 2610 4176900 83 Linux Command (m for help): t #更改分区id Partition number (1-4): 1 #分区编号 Hex code (type L to list codes): 8e #LVM的分区id为8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): t #更改分区id Partition number (1-4): 2 #分区编号 Hex code (type L to list codes): 8e #LVM的分区id为8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): t #更改分区id Partition number (1-4): 3 #分区编号 Hex code (type L to list codes): 8e #LVM的分区id为8e Changed system type of partition 3 to 8e (Linux LVM) Command (m for help): p #查看分区 Disk /dev/sdc: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb4007a2c Device Boot Start End Blocks Id System /dev/sdc1 1 1045 8393931 8e Linux LVM /dev/sdc2 1046 2090 8393962+ 8e Linux LVM /dev/sdc3 2091 2610 4176900 8e Linux LVM Command (m for help): w #写入分区表 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
=================================================================
3. 创建物理卷(PV);
[root@Centos1 ~]# pvcreate /dev/sdc{1,2,3} Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created Physical volume "/dev/sdc3" successfully created [root@Centos1 ~]# pvdisplay #列出已经创建的物理卷;
4. 创建卷组VG01(VG);
[root@Centos1 ~]# vgcreate VG01 /dev/sdc{1,2,3} Volume group "VG01" successfully created [root@Centos1 ~]# vgremove VG01 #将卷组VG01移除; Volume group "VG01" successfully removed [root@Centos1 ~]# vgdisplay #列出已经创建的卷组; #默认PE大小为4MB, PE是卷组的最小存储的单元, 可以通过-s参数修改大小;
5. 分割500M给新的逻辑卷LV01(LV);
[root@Centos1 ~]# lvcreate -L 500M -n LV01 VG01 Logical volume "LV01" created [root@Centos1 ~]# lvdisplay #列出已经创建的逻辑卷;
6. 格式化逻辑卷;
[root@Centos1 ~]# mkfs.ext4 /dev/VG01/LV01
7. 挂载逻辑卷;
[root@Centos1 ~]# mount /dev/VG01/LV01 /data [root@Centos1 ~]# df -h
四、扩展逻辑卷、卷组和减少逻辑卷大小
1. 逻辑卷LV01不够用了, 我们如何给它增加空间呢?
[root@Centos1 ~]# lvextend -L +500M /dev/VG01/LV01 [root@Centos1 ~]# resize2fs /dev/VG01/LV01 #同步文件系统 [root@Centos1 ~]# df -h
2. 扩展卷组;
[root@Centos1 ~]# vgextend VG01 /dev/sdd1 #注: 对sdd硬盘分区后一定要将分区id改为'8e' [root@Centos1 ~]# vgdisplay
3. 减少逻辑卷大小;
卸载 --> e2fsck检测剩余空间 --> resize2fs 同步文件系统 --> 使用lvreduce命令将逻辑卷减少.
注意: 文件系统大小和逻辑卷大小一定要保护一致才行. 如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费.如果逻辑卷小于文件系统,那数据就出问题了.
[root@Centos1 ~]# umount /data/ #卸载/data目录; [root@Centos1 ~]# e2fsck -f /dev/VG01/LV01 #检测剩余空间;
[root@Centos1 ~]# resize2fs /dev/VG01/LV01 600M #将文件系统系统减少到700M; [root@Centos1 ~]# lvreduce -L 600 /dev/VG01/LV01 #将逻辑卷减少到700M; [root@Centos1 ~]# mount /dev/VG01/LV01 /data ps: 笔者练习时, 逻辑卷小于系统,
4. 当磁盘或分区损坏时, 如何转移数据;
pvmove 转移空间数据 --> vgreduce命令将即将坏的磁盘或者分区从卷组VG01里面移除 --> pvremove命令将即将坏的磁盘或者分区从系统中删除掉 --> 拆除或修复磁盘.
[root@Centos1 ~]# pvmove /dev/sdc1 /dev/sdc1: Moved: 2.0% /dev/sdc1: Moved: 100.0% [root@Centos1 ~]# vgreduce VG01 /dev/sdc1 Removed "/dev/sdc1" from volume group "VG01" [root@Centos1 ~]# pvremove /dev/sdc1 Labels on physical volume "/dev/sdc1" successfully wiped
5. 删除整个逻辑卷;
umount卸载逻辑卷 --> 修改配置文件/etc/fstab(若是之前更改过) --> lvremove 删除逻辑卷LV01 --> vgremove 删除卷组VG01 --> pvremove 将物理卷转换成普通卷
[root@Centos1 ~]# umount /dev/VG01/LV01 [root@Centos1 ~]# lvremove /dev/VG01/LV01 Do you really want to remove active logical volume LV01? [y/n]: y Logical volume "LV01" successfully removed [root@Centos1 ~]# vgremove VG01 volume "VG01" successfully removed [root@Centos1 ~]# pvremove /dev/sdc1 No PV label found on /dev/sdc1. #之前已卸载 [root@Centos1 ~]# pvremove /dev/sdc2 Labels on physical volume "/dev/sdc2" successfully wiped [root@Centos1 ~]# pvremove /dev/sdc3 Labels on physical volume "/dev/sdc3" successfully wiped
PS: 删除完了, 别忘记修改分区ID标识, 将'8e(LVM)'改为'83(Linux分区)';