经常搞后台开发的人员,总是会涉及到系统磁盘的管理,例如创建裸设备,自定义磁盘分区,使用了一阵子后为某个分区扩展逻辑卷等等。那么,Linux系统中,有这么三个的系列命令可以完成这些事情:
PV(Physical volume):pvdisplay,pvcreate…
VG(Volume group):vgdisplay,vgcreate…
LV(Logical volume):lvdisplay,lvcreate…

这些命令属于Linux的逻辑盘卷管理(LVM,Logical Volume Manager)功能,想要使用这些命令,首先需要安装LVM,用下面这个命令查看是否已安装LVM

  1. rpm -qa | grep lvm

如果还没有安装LVM,用rpm -ivh安装,配有yum源的话可以用yum install

创建和管理LVM

  1. 基于分区的方式
    基于分区的方式,需要事先通过fdisk或者其他方式对磁盘分区,分区之后不格式化文件系统,然后再用pvcreate来创建物理卷
  2. 基于磁盘的方式
    基于磁盘的方式,直接对磁盘创建物理卷(PV),然后分配卷组(VG),再在卷组里面添加逻辑卷(LV)

本次着重描述第二种方式,一般适用于专属服务器,比如数据库服务器,整个磁盘都是为数据库服务而设的,可以根据数据库服务的需求,直接划分出数据盘,备份盘,归档盘等等,相对简单易行

查看物理盘


查看机器上挂在的磁盘,一般是/dev/sda或者/dev/vda这种名字,这些就是实际的物理磁盘目录,也是之后pv命令操作的对象

  1. [root@sndsdevdb01 ~]# fdisk -l
  2. Disk /dev/vda: 53.7 GB, 53687091200 bytes
  3. 16 heads, 63 sectors/track, 104025 cylinders
  4. Units = cylinders of 1008 * 512 = 516096 bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disk identifier: 0x0001eed7
  8. ...

创建物理卷

  1. # 格式:pvcreate 物理磁盘目录
  2. [root@sndsdevdb01 ~]#pvcreate /dev/vda
  3. # 查看已创建的物理卷
  4. [root@sndsdevdb01 ~]#pvdisplay
  5. --- Physical volume ---
  6. PV Name /dev/vda # 物理卷名
  7. VG Name datavg # 这个是之后创建的卷组名
  8. PV Size 500.00 GiB / not usable 4.00 MiB # 物理卷大小
  9. Allocatable yes
  10. PE Size 4.00 MiB # 单个extend的大小,默认4M
  11. Total PE 127999
  12. Free PE 2559
  13. Allocated PE 125440
  14. PV UUID TAFUmM-bn0x-nMmu-WSYc-sRW2-gXFd-AdByK5

创建卷组

  1. # 格式:vgcreate 卷组名 物理磁盘目录
  2. [root@sndsdevdb01 ~]#vgcreate datavg /dev/vda
  3. # 查看已经创建的卷组
  4. [root@sndsdevdb01 ~]#vgdisplay
  5. --- Volume group ---
  6. VG Name datavg # 卷组名
  7. System ID
  8. Format lvm2
  9. Metadata Areas 1
  10. Metadata Sequence No 9
  11. VG Access read/write
  12. VG Status resizable
  13. MAX LV 0
  14. Cur LV 2
  15. Open LV 2
  16. Max PV 0
  17. Cur PV 1
  18. Act PV 1
  19. VG Size 500.00 GiB # 卷组的总大小
  20. PE Size 4.00 MiB
  21. Total PE 127999
  22. Alloc PE / Size 125440 / 490.00 GiB # 已分配的大小(已创建有LV)
  23. Free PE / Size 2559 / 10.00 GiB # 未分配的大小
  24. VG UUID twmovy-yiJ3-F6vq-SxCK-sIg9-oreK-psnpb9
  25. ...

创建逻辑卷

  1. # 格式: lvcreate -n 逻辑卷名 -L 逻辑卷大小 卷组名
  2. [root@sndsdevdb01 ~]#lvcreate -n data_lv_name -L data_size datavg
  3. # 查看已经创建的逻辑卷
  4. [root@sndsdevdb01 ~]#lvdisplay
  5. --- Logical volume ---
  6. LV Path /dev/datavg/datalv
  7. LV Name datalv
  8. VG Name datavg
  9. LV UUID x7xW4c-QahO-Mapv-hu5h-6hXw-c6K9-1zZrWA
  10. LV Write Access read/write
  11. LV Creation host, time sndsdevdb01, 2017-07-14 15:32:14 +0800
  12. LV Status available
  13. # open 1
  14. LV Size 450.00 GiB
  15. Current LE 115200
  16. Segments 1
  17. Allocation inherit
  18. Read ahead sectors auto
  19. - currently set to 256
  20. Block device 253:7
  21. ...

至此,LVM的创建就完成了
此时,上述LV还没有被格式化文件系统,属于裸设备
如需要存储数据,还需要对LV进行mkfs操作

格式化文件系统

以ext3类型为例

  1. # 格式: mkfs.ext3 LV名
  2. # 也可以使用mkfs -t ext3 的方式
  3. [root@sndsdevdb01 ~]# mkfs.ext3 device

扩展LV的大小


系统使用一段时间后,可能LV的空间已经满了,或者一开始操作有误,空间给小了,需要扩展大小,可以使用lvextend命令
首先先确认卷组中是否有剩余空间

  1. [root@sndsdevdb01 ~]#vgdisplay
  2. --- Volume group ---
  3. VG Name datavg
  4. System ID
  5. Format lvm2
  6. Metadata Areas 1
  7. Metadata Sequence No 9
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV 0
  11. Cur LV 2
  12. Open LV 2
  13. Max PV 0
  14. Cur PV 1
  15. Act PV 1
  16. VG Size 500.00 GiB
  17. PE Size 4.00 MiB
  18. Total PE 127999
  19. Alloc PE / Size 125440 / 490.00 GiB # 已分配的大小(已创建有LV)
  20. Free PE / Size 2559 / 10.00 GiB # 未分配的大小
  21. VG UUID twmovy-yiJ3-F6vq-SxCK-sIg9-oreK-psnpb9

如果上面的“Free PE / Size”还有空间,并且剩余的空间能满足扩展需求,那么可以直接用lvextend命令

  1. # 格式: lvextend -L +10G lv绝对路径
  2. # 注意要有加号,否则就表示将该lv扩展至10G
  3. [root@sndsdevdb01 ~]#lvextend -L +10G lv_path

扩展完成后,还需补充格式化新扩展的卷的文件系统,否则df -hl是看不到扩展的大小的

  1. [root@sndsdevdb01 ~]#resize2fs lv_path

那么,如果VG中已经没有剩余空间了,那么就需要追加挂载磁盘,然后重新创建新的PV,然后加到当前的VG中(vgextend),然后才是LV的扩展