LVM是什么
LVM全称是逻辑盘卷管理 (Logical Volume Manager),是Linux系统对磁盘分区管理一种机制。相对于一般的磁盘分区而言LVM是建立在硬盘和分区物理层 之上的一个逻辑层,通过逻辑分区来提高磁盘的利用率。
简单来说,就是将多个物理卷(PV)组成一个逻辑卷组(VG),然后在它上面划分一些逻辑卷(LV),用来安装系统文件。下面这个图十分清晰的描述了它们的对应关系。
LVM的优势
普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,就没有好的解决方案了。但是如果是用的LVM逻辑卷,这时我们只需要添加新的硬盘,然后把新的硬盘分区加入逻辑卷组,就可以动态扩容逻辑卷了,都不需要停机,十分方便。
添加硬盘和分区
-
查看硬盘详情,可以看到/dev/sdb就是新加的一块100G硬盘,原来的系统盘只有30G
[root@zabbix-server ~]# fdisk -l 磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节 磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节 磁盘标签类型:dos 磁盘标识符:0x000af8d1 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 62914559 30407680 8e Linux LVM 磁盘 /dev/mapper/cl-root:27.9 GB, 27913093120 字节,54517760 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节 磁盘 /dev/mapper/cl-swap:3221 MB, 3221225472 字节,6291456 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节
-
给新加硬盘分区,fdisk /dev/sdb
[root@zabbix-server ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xc1e124db 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-209715199,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199): 将使用默认值 209715199 分区 1 已设置为 Linux 类型,大小设为 100 GiB
-
将新建分区类型更改为8e,LVM
命令(输入 m 获取帮助):t 已选择分区 1 Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM”
-
查看分区结果并同步磁盘
命令(输入 m 获取帮助):p 磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节 磁盘标签类型:dos 磁盘标识符:0xc1e124db 设备 Boot Start End Blocks Id System /dev/sdb1 2048 209715199 104856576 8e Linux LVM 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
扩容根目录
-
查看本机原有PV,pvdisplay
[root@zabbix-server ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name cl PV Size 29.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 7423 Free PE 0 Allocated PE 7423 PV UUID 5N60ck-vfDK-akra-iySw-gEqw-Pewj-ZCqXCl ```
-
将新的硬盘分区创建为物理卷,pvcreate /dev/sdb1
[root@zabbix-server ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [root@zabbix-server ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name cl PV Size 29.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 7423 Free PE 0 Allocated PE 7423 PV UUID 5N60ck-vfDK-akra-iySw-gEqw-Pewj-ZCqXCl "/dev/sdb1" is a new physical volume of "100.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 100.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID gCcdZP-Bbfp-oe8F-gK0I-NOYH-Frf8-UdjT1r
-
将新建物理卷加入逻辑卷组,vgextend cl /dev/sdb1
[root@zabbix-server ~]# vgextend cl /dev/sdb1 Volume group "cl" successfully extended [root@zabbix-server ~]# vgdisplay --- Volume group --- VG Name cl System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 128.99 GiB PE Size 4.00 MiB Total PE 33022 Alloc PE / Size 7423 / 29.00 GiB Free PE / Size 25599 / 100.00 GiB VG UUID vZqaWW-Lf6Y-7cXH-dLhM-QB0g-KFE3-tEjAxP
-
查看本机所有逻辑卷,lvdisplay
[root@zabbix-server ~]# lvdisplay --- Logical volume --- LV Path /dev/cl/swap LV Name swap VG Name cl LV UUID mIFpVU-1VnR-6I1v-6pMj-BQVO-z7Fv-kK6ubj LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-06-06 11:59:26 +0800 LV Status available # open 2 LV Size 3.00 GiB Current LE 768 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/cl/root LV Name root VG Name cl LV UUID YI9Mw7-NGwC-am50-IR0K-C8Pp-oozQ-EwhIiS LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-06-06 11:59:27 +0800 LV Status available # open 1 LV Size 26.00 GiB Current LE 6655 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 ```
-
给根目录逻辑卷增加99G,注意增加100G会失败,lvextend -L +99G /dev/cl/root
[root@zabbix-server ~]# lvextend -L +99G /dev/cl/root Size of logical volume cl/root changed from 26.00 GiB (6655 extents) to 125.00 GiB (32000 extents). Logical volume cl/root successfully resized. [root@zabbix-server ~]# lvdisplay --- Logical volume --- LV Path /dev/cl/swap LV Name swap VG Name cl LV UUID mIFpVU-1VnR-6I1v-6pMj-BQVO-z7Fv-kK6ubj LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-06-06 11:59:26 +0800 LV Status available # open 2 LV Size 3.00 GiB Current LE 768 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/cl/root LV Name root VG Name cl LV UUID YI9Mw7-NGwC-am50-IR0K-C8Pp-oozQ-EwhIiS LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-06-06 11:59:27 +0800 LV Status available # open 1 LV Size 125.00 GiB Current LE 32000 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
-
扩展文件系统的尺寸,其实就是应用修改,xfs_growfs /dev/cl/root
[root@zabbix-server ~]# xfs_growfs /dev/cl/root meta-data=/dev/mapper/cl-root isize=512 agcount=16, agsize=425920 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=6814720, imaxpct=25 = sunit=1 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=3327, version=2 = sectsz=512 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 6814720 to 32768000 [root@zabbix-server ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/cl-root 125G 4.6G 121G 4% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.4M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1022M 183M 840M 18% /boot tmpfs 783M 0 783M 0% /run/user/0
可以看到**/目录已经从25G扩容到了125G**了,实现了动态扩容。