最近对于服务器的磁盘管理搞的很懵,幸得大神指点,对pv、vg、lv之间的关系有了一些了解,现总结如下。如有错误之处,还请不吝赐教。
Linux磁盘、pv、vg、lv、挂载点之间的关系用一张图来说:
一、基本概念及关系梳理:
磁盘:最基础的存在,物理磁盘
PV:physical volume 物理卷,同一磁盘可划分为多个物理卷
VG:volume group 卷组,一个到多个PV可组成一个卷组
LV:logical volue 逻辑卷,卷组可划分为多个逻辑卷
挂载点:lv与挂载点是1:1的关系
综上:Linux的磁盘管理其实就是把物理磁盘先进行划分,分成一块块pv,然后对pv进行分组形成vg,再将vg分配给lv,最后将lv挂载到挂载点上进行使用。之所以进行这么多层次的划分,就是为了能灵活的对磁盘进行逻辑上的区分使用。
二、常用命令
1、磁盘相关操作
- 使用命令:
fdisk -l
可看到磁盘空间划分
上图表示机器有/dev/sdb、/dev/sda 两块磁盘,其中 /dev/sda下有 /dev/sda1、/dev/sda2 两个分区
- 使用命令:fdisk 具体磁盘
fdisk /dev/sda
查看详细的磁盘分区
2、pv相关操作
- 使用命令:
pvdisplay
查看所有的物理卷(PV)。pvdisplay显示pv信息的同时,显示了pv与vg之间的关系
- 可使用命令:pvcreate 进行未初始化磁盘 pv的创建
3、vg相关命令
- 使用命令:
vgdisplay
可查看目前已创建的vg,注意Free PE/Size 字段,表示空余空间。vg卷组的空余空间=组成卷组的pv空余空间之和。
卷组的空余空间可随时分配给卷组下的 lv,进行 lv 空间的扩展
4、lv相关命令
- 使用命令:
lvdisplay
可以看到所有的 lv,以及 lv 与 vg之间的关系。
根据第3步看到的 vg free pe,可将vg中可用空间给 lv扩容
- 使用命令 lvextend -L +10G lv路径 即可给 lv进行扩容
5、挂载点
- 使用命令
df -h
可查看所有的 lv 路径及挂载点之间的关联。挂载点即我们日常访问操作的路径。
但是这里有个问题,如何查看创建好但还没挂载的 lv 呢?
- 使用命令
lvdispaly | grep "LV Name"
查看所有的lv名,也可以 grep “LV Path”,然后与df -h列出的文件系统对比,即可查看到已创建未挂载的lv
- 使用命令:
mount /dev/rootvg/lvnbu /home/log
进行 lv 与目录之间的关联,但是这里需注意:目录必须是新创建的空目录,否则无法挂载成功
PS:当我们删除某个路径,报错 “设备或资源忙” 而无法删除时,可使用以下命令:
fuser -km mysqldata // 强制删除访问mysqldata路径的所有进程
umount mysqldata // 删除mysqldata的挂载lv
rm -rf mysqldata // 删除mysqldata路径
但是该操作也会带来问题:删除目录后,挂载的 lv 会变成游离的 lv,没有使用且没有回收,造成资源浪费,所以删除路径后,记得将挂载的 lv 重新挂载。
至此,常用的磁盘相关命令均总结完成,后续如有新学习的命令再持续补充,以此为记。