前言:根据前面的学习我们知道,一个磁盘一旦分完区并且格式化后,其空间大小是没有办法进行调整了。因此推出了LVM(Logical Volume Manager)逻辑卷管理机制,LVM重点在于可以弹性的调整文件系统的容量!并非在于性能和数据保全方面,需要文件的读写性能或者数据的可靠性,需要用到RAID。而LVM可以整合多个物理分区在一起,让这些分区看起来像是一个磁盘一样,而且还可以将其他的物理分区或将从这个LVM管理的磁盘中删除。实现磁盘的扩大和缩小容量,LVM最精华的部分是可以实现快照功能,快照就是将当前的系统信息记录下来,将来有任何数据改动了,就会将原始数据移动到快照,没有改动的区域则由快照区域和文件系统共享。并且LVM在我们实际的生产环境中运用广泛,因此我们必须要非常熟悉其基本原理和使用方法,下面我们通过一个实验来演示其各个阶段,让我们一睹为快吧!
一、PV,PE,VG,LV的含义
1、PV(Physical Volume)物理卷
我们实际的分区需要调整系统标示符(system id)成为8e(LVM的标示符)然后经过pvcreate的命令将它转为LVM最底层的物理卷PV,之后才能将这些PV加以利用,调整system id的方法是使用fdisk命令。
2、VG(Volume Group)卷用户组
所谓的LVM大磁盘就是将许多PV整合成这个VG,因此VG就是PV组合起来的大磁盘。那么这个大磁盘的容量为多少呢?这是与有多少个PE有关,我们默认VG最多可以有65534个PE,后续我们介绍PE,在这里我们先知道一个VG最大可达256G的容量。
3、PE(Physical Extend)物理扩展块
LVM默认使用4M的PE块,而LVM的VG最多仅能含有65534个PE,因此两者相乘就得到上述所说的256G。PE是整个LVM最小的存储块,也就是说,其实我们的文件数据都是有写入PE来处理的,简单地说,这个PE就有点像文件系统的block大小,又有点像RAID中的chunk,因此调整PE的大小,会影响到VG的最大容量。
4、LV(Logical Volume)逻辑卷
最终的VG还会被切割成LV,这个LV就可以最后被格式化使用的类似分区。LV的容量也是和LV中的PE的数量有关的,其大小是不可以调整的,当然我们可以通过VG里面的没有使用的PE加入到LV里面,就可以实现LV的扩容。为了方便LVM管理其系统,它的设备名通常指定为“/dev/vgname/lvname”的样式,而VG的名字是可以随意指定的。这一点必须的注意!
二、VG、LV、PE的相互关系
如上图所示,我们知道LVM里面最小的储存块就是PE,但是它可以属于不同阶段的PE,上图表示的VG内的PE会分给虚线部分的LV作为LV的PE,如果将来这个VG需要扩充的话,我们增加其他的PV即可。而重要的LV扩充的话,可以通过加入VG内没有使用的PE来扩充,当然如果LV需要降低容量,可以将其内的PE扔回VG即可。
三、LVM各组件实现的流程
通过PV、VG、LV的规划之后,再利用mkfs就可以将你得LV格式化成可以利用的文件系统了,而且这个文件系统的容量将来还可以能够进行扩充或减少,里面的数据不会受到影响。下面我们来了解下到底有哪些阶段,如下图所示:
四、LVM实际操作流程
实验目的:了解LVM的命令使用方法
实验规划流程:
·分出4个分区,每个分区的容量为2G,且system id需要更改为8e
·全部的分区需要整合到一个VG内,VG的名称我们设置为andyvg,且我们设置PE的大小为16M
·全部的VG容量都丢给LV,LV的名称设置为/dev/andyvg/andylv(实际我们也需要演示丢6G的VG容量给LV)
·最终我们将LV格式化ext4的文件系统,并且实现开机挂载到/mnt/lvm中
根据上述实验规划流程,我们赶紧进入实际操作中来。
1、先规划自己系统的环境,前提就是删除之前实验操作的分区全部删除,具体我们可以按照下面几步操作来还原系统:
(1)利用umount先卸载之前挂载的文件系统
(2)修改/etc/fstab里面的数据,让开机不会自动挂载
(3)利用fdisk将对应的分区删除
(4)注意一点如果机器之前做过RAID的实验,需要卸载,修改/etc/fstab文件,然后再关闭服务,并且要得删除RAID的配置文件,具体操作请查阅软RAID的模拟实验。
(5)如果已经挂载了LVM,我们也需要删除,具体操作后续也会介绍。
我开始实验前的系统环境:
[root@centos7 ~ #1]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 100G 0 part / ├─sda3 8:3 0 4G 0 part [SWAP] ├─sda4 8:4 0 1K 0 part ├─sda5 8:5 0 20G 0 part /testdir └─sda6 8:6 0 10G 0 part /mnt/home sdb 8:16 0 200G 0 disk ├─sdb1 8:17 0 10G 0 part ├─sdb2 8:18 0 10G 0 part /mnt/sdb2 ├─sdb3 8:19 0 10G 0 part └─sdb4 8:20 0 1K 0 part sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 2G 0 part /test └─sdc2 8:34 0 10G 0 part sdd 8:48 0 20G 0 disk └─sdd2 8:50 0 19.8G 0 part sde 8:64 0 20G 0 disk ├─sde1 8:65 0 10G 0 part │ └─vg0-lv0 253:0 0 17G 0 lvm /mnt/lvm ├─sde2 8:66 0 5G 0 part │ └─vg0-lv0 253:0 0 17G 0 lvm /mnt/lvm └─sde3 8:67 0 2G 0 part └─vg0-lv0 253:0 0 17G 0 lvm /mnt/lvm sdf 8:80 0 20G 0 disk sr0 11:0 1 7.2G 0 rom
按照上面的还原系统的流程,达到下面环境即可
[root@centos7 ~ #5]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 100G 0 part / ├─sda3 8:3 0 4G 0 part [SWAP] ├─sda4 8:4 0 1K 0 part ├─sda5 8:5 0 20G 0 part /testdir └─sda6 8:6 0 10G 0 part sdb 8:16 0 200G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sdf 8:80 0 20G 0 disk sr0 11:0 1 7.2G 0 rom /run/media/root/CentOS 7 x86_64 [root@centos7 ~ #6]# blkid /dev/block/8:2: UUID="bd6898a4-e81d-484f-a98c-bf0db692a30b" TYPE="xfs" /dev/block/8:1: UUID="cfa0ba95-faf2-41ed-a849-70c59f56e00a" TYPE="xfs" /dev/block/8:3: UUID="4c2a179a-61d4-4a7f-91f0-15979fc699f2" TYPE="swap" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/sda5: UUID="b1c4ae19-2384-4e09-bea7-2f1cffaa3dcb" TYPE="xfs" /dev/sda6: LABEL="/home" UUID="2cf5ce7d-46d7-443a-bb1d-3b782bb65200" TYPE="ext4" /dev/sdb: PTTYPE="dos" /dev/sde: PTTYPE="dos" /dev/sdd: PTTYPE="dos" /dev/sdc: PTTYPE="dos"
实验第一步:我们在/dev/sdc上分出4个分区,每个分区的容量为2G,且system id需要更改为8e,具体使用fdisk完成操作,其具体创建细节我们就不再多介绍,最终结果如下:
[root@centos7 ~ #11]# fdisk -l #...................省略................ Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xef657dc4 Device Boot Start End Blocks Id System /dev/sdc1 2048 4196351 2097152 83 Linux /dev/sdc2 4196352 39847935 17825792 5 Extended /dev/sdc5 4198400 8392703 2097152 8e Linux LVM /dev/sdc6 8394752 12589055 2097152 8e Linux LVM /dev/sdc7 12591104 16785407 2097152 8e Linux LVM /dev/sdc8 16787456 20981759 2097152 8e Linux LVM
上面的/dev/sdc{5,6,7,8}这四个分区就是我们的物理分区。
实验第二步:PV阶段
要创建PV其实很简单,只要pvcreate即可,我们先看看有关PV的相关命令。
·pvcreate:将物理分区新建成为PV
·pvscan:查询目前系统里面任何具有PV的磁盘
·pvdisplay:显示目前系统上面的PV状态
·pvs:PV的报表
·pvremove:将PV属性删除,让该分区不具有PV的属性
[root@centos7 ~ #19]# pvscan No matching physical volumes found [root@centos7 ~ #20]# pvcreate /dev/sdc{5,6,7,8} Physical volume "/dev/sdc5" successfully created Physical volume "/dev/sdc6" successfully created Physical volume "/dev/sdc7" successfully created Physical volume "/dev/sdc8" successfully created [root@centos7 ~ #21]# pvscan PV /dev/sdc6 lvm2 [2.00 GiB] PV /dev/sdc8 lvm2 [2.00 GiB] PV /dev/sdc5 lvm2 [2.00 GiB] PV /dev/sdc7 lvm2 [2.00 GiB] Total: 4 [8.00 GiB] / in use: 0 [0 ] / in no VG: 4 [8.00 GiB] [root@centos7 ~ #22]# pvs PV VG Fmt Attr PSize PFree /dev/sdc5 lvm2 --- 2.00g 2.00g /dev/sdc6 lvm2 --- 2.00g 2.00g /dev/sdc7 lvm2 --- 2.00g 2.00g /dev/sdc8 lvm2 --- 2.00g 2.00g [root@centos7 ~ #23]# pvdisplay "/dev/sdc6" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc6 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 7dOEay-UWx3-4jYw-5LyD-av1c-VFPE-Sc65GM "/dev/sdc8" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc8 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID KDQjbZ-wqGi-cxBB-mttK-X0ZE-KvDd-KheRR4 "/dev/sdc5" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc5 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 7QGfnu-5tFo-bYAj-g3vi-V0Sq-df8S-e3wwja "/dev/sdc7" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc7 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID rrE1dF-QoEs-d4na-l6Or-gtDu-Jyrf-OjHEJX
实验第三步:VG阶段
我们仍然先看下新建VG和VG相关的命令
·vgcreate:新建VG的命令,记住实验要求PE的大小是16M,这里需要加上-s选项,指定PE的大小,后面需要跟上VG名称和PV名称
具体:vgcreate -s 16M andyvg /dev/sdc{5,6,7}
·vgscan:查找系统上面是否存在VG
·vgs:VG的报表
·vgdisplay:显示系统上面VG的状态
·vgextend:在VG内增加额外的PV
具体:vgextend andyvg /dev/sdc8
·vgreduce:在VG内删除PV
·vgchange:设置VG是否被启动(active)
·vgremove:删除一个VG
在这里我们需要注意的是,VG的名称是我们自己定义的,我们知道PV的名称实际就是设备文件名,根据实验要求我们将VG取名为andyvg,下面是我们的创建过程:
[root@centos7 ~ #25]# vgscan Reading all physical volumes. This may take a while... [root@centos7 ~ #26]# vgcreate -s 16M andyvg /dev/sdc{5,6,7} Volume group "andyvg" successfully created [root@centos7 ~ #27]# pvscan PV /dev/sdc5 VG andyvg lvm2 [1.98 GiB / 1.98 GiB free] PV /dev/sdc6 VG andyvg lvm2 [1.98 GiB / 1.98 GiB free] PV /dev/sdc7 VG andyvg lvm2 [1.98 GiB / 1.98 GiB free] PV /dev/sdc8 lvm2 [2.00 GiB] Total: 4 [7.95 GiB] / in use: 3 [5.95 GiB] / in no VG: 1 [2.00 GiB] [root@centos7 ~ #30]# vgs VG #PV #LV #SN Attr VSize VFree andyvg 3 0 0 wz--n- 5.95g 5.95g [root@centos7 ~ #31]# vgdisplay --- Volume group --- VG Name andyvg System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 5.95 GiB PE Size 16.00 MiB Total PE 381 Alloc PE / Size 0 / 0 Free PE / Size 381 / 5.95 GiB VG UUID Mq13Pt-okme-YhVy-yW2M-7TFJ-mefj-lfCWIQ
我们再利用vgextend再额外添加一个PV
[root@centos7 ~ #32]# vgextend andyvg /dev/sdc8 Volume group "andyvg" successfully extended [root@centos7 ~ #34]# vgdisplay --- Volume group --- VG Name andyvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 7.94 GiB PE Size 16.00 MiB Total PE 508 Alloc PE / Size 0 / 0 Free PE / Size 508 / 7.94 GiB VG UUID Mq13Pt-okme-YhVy-yW2M-7TFJ-mefj-lfCWIQ
我们发现VG的大小又增加了2G,正是我们额外增加的PV的效果。
实验第四步:LV阶段
创造了VG这个大磁盘后,再来的我们就是需要分区,这个所谓的分区指的就是LV,我们先演示将6G的VG容量丢给LV,然后观察其效果后,我们再将所有的VG容量全部丢给LV。下面我们先了解下新建LV和其相关的命令:
·lvcreate:新建LV
·lvscan:查阅系统上面的LV
·lvdisplay:显示系统上面的LV状态
·lvs:LV的报表
·lvextend:在LV里面增加容量
·lvreduce:在LV里面减少容量
·lvremove:删除一个LV
·lvresize:对LV进行容量的大小调整
[root@centos7 ~ #35]# lvscan [root@centos7 ~ #36]# lvcreate -n andylv -L 6G andyvg Logical volume "andylv" created. [root@centos7 ~ #37]# ll /dev/andyvg/andylv lrwxrwxrwx. 1 root root 7 Aug 30 03:24 /dev/andyvg/andylv -> ../dm-0 [root@centos7 ~ #38]# lvdisplay --- Logical volume --- LV Path /dev/andyvg/andylv LV Name andylv VG Name andyvg LV UUID fQhokh-cHJJ-uLeL-jFju-XclH-fsTG-Khaflz LV Write Access read/write LV Creation host, time centos7, 2016-08-30 03:24:34 -0400 LV Status available # open 0 LV Size 6.00 GiB Current LE 384 Segments 4 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 [root@centos7 ~ #39]# lvextend -l +100%FREE /dev/andyvg/andylv Size of logical volume andyvg/andylv changed from 6.00 GiB (384 extents) to 7.94 GiB (508 extents). Logical volume andylv successfully resized. [root@centos7 ~ #40]# lvdisplay --- Logical volume --- LV Path /dev/andyvg/andylv LV Name andylv VG Name andyvg LV UUID fQhokh-cHJJ-uLeL-jFju-XclH-fsTG-Khaflz LV Write Access read/write LV Creation host, time centos7, 2016-08-30 03:24:34 -0400 LV Status available # open 0 LV Size 7.94 GiB Current LE 508 Segments 4 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
我们可以看到先创建了一个6G的LV名称为/dev/andyvg/andy/lv,后来我们使用逻辑卷扩展命令lvextend将VG里面所有的容量全部耗尽丢给了LV,增加指8G。
实验第五步:文件系统阶段
这个部分非常简单了,我们直接看操作吧,我们要将LV格式化ext4的文件系统,并且实现开机挂载到/mnt/lvm中。
[root@centos7 ~ #41]# mkfs.ext4 /dev/andyvg/andylv mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 520192 inodes, 2080768 blocks 104038 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2130706432 64 block groups 32768 blocks per group, 32768 fragments per group 8128 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@centos7 ~ #42]# mkdir /mnt/lvm mkdir: cannot create directory ‘/mnt/lvm’: File exists [root@centos7 ~ #43]# rm -fr /mnt/lvm/ [root@centos7 ~ #44]# mkdir /mnt/lvm [root@centos7 ~ #45]# mount /dev/andyvg/andylv /mnt/lvm [root@centos7 ~ #46]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 104806400 7553512 97252888 8% / devtmpfs 919820 0 919820 0% /dev tmpfs 934344 88 934256 1% /dev/shm tmpfs 934344 9280 925064 1% /run tmpfs 934344 0 934344 0% /sys/fs/cgroup /dev/sda5 20961280 140744 20820536 1% /testdir /dev/sda1 201388 143048 58340 72% /boot tmpfs 186872 4 186868 1% /run/user/42 tmpfs 186872 16 186856 1% /run/user/0 /dev/sr0 7587292 7587292 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/andyvg-andylv 8061368 36564 7592268 1% /mnt/lvm [root@centos7 ~ #47]# cp -a /etc/* /mnt/lvm
我们发现/etc/目录的下面的文件会全部拷到/mnt/lvm目录下,下面我们需要将其写到/etc/fstab文件里面即可。
[root@centos7 /mnt/lvm #5]# blkid /dev/block/8:2: UUID="bd6898a4-e81d-484f-a98c-bf0db692a30b" TYPE="xfs" /dev/block/8:1: UUID="cfa0ba95-faf2-41ed-a849-70c59f56e00a" TYPE="xfs" /dev/block/8:3: UUID="4c2a179a-61d4-4a7f-91f0-15979fc699f2" TYPE="swap" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/sda5: UUID="b1c4ae19-2384-4e09-bea7-2f1cffaa3dcb" TYPE="xfs" /dev/sda6: LABEL="/home" UUID="2cf5ce7d-46d7-443a-bb1d-3b782bb65200" TYPE="ext4" /dev/sdc1: LABEL="TEST" UUID="1272e17b-eaac-4e68-a57e-96cdee34bb76" TYPE="ext4" /dev/sdb: PTTYPE="dos" /dev/sde: PTTYPE="dos" /dev/sdd: PTTYPE="dos" /dev/sdc5: UUID="7QGfnu-5tFo-bYAj-g3vi-V0Sq-df8S-e3wwja" TYPE="LVM2_member" /dev/sdc6: UUID="7dOEay-UWx3-4jYw-5LyD-av1c-VFPE-Sc65GM" TYPE="LVM2_member" /dev/sdc7: UUID="rrE1dF-QoEs-d4na-l6Or-gtDu-Jyrf-OjHEJX" TYPE="LVM2_member" /dev/sdc8: UUID="KDQjbZ-wqGi-cxBB-mttK-X0ZE-KvDd-KheRR4" TYPE="LVM2_member" /dev/mapper/andyvg-andylv: UUID="23f51195-fabd-4ac2-b1a8-80121283c23b" TYPE="ext4"
[root@centos7 /mnt #63]# umount /mnt/lvm [root@centos7 /mnt #64]# mount -a [root@centos7 /mnt #65]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 104806400 7553104 97253296 8% / devtmpfs 919820 0 919820 0% /dev tmpfs 934344 88 934256 1% /dev/shm tmpfs 934344 9280 925064 1% /run tmpfs 934344 0 934344 0% /sys/fs/cgroup /dev/sda5 20961280 140744 20820536 1% /testdir /dev/sda1 201388 143048 58340 72% /boot tmpfs 186872 4 186868 1% /run/user/42 tmpfs 186872 16 186856 1% /run/user/0 /dev/sr0 7587292 7587292 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/andyvg-andylv 8061368 72464 7556368 1% /mnt/lvm
本文仅介绍了LVM的创建流程和基本原理,后续我们还会介绍LVM的扩充和减小容量以及其精华部分的LVM快照的原理,和实现过程。
原创文章,作者:AndyIvanXue,如若转载,请注明出处:http://www.178linux.com/42191
评论列表(1条)
总结的很不错,作者很用心,通过自己的语言组织了文字,通读整篇能学到很多东西,继续保持。