Linux下的逻辑卷管理 — LVM

Linux

概述

No.1: 简介

  1. Logical Volume Manager(LVM)
    LVM就是逻辑卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。
  2. LV的名称构建为/dev/VG1/lv1(可以不是这个名字)是为了让用户直观的使用,实际LVM的设备放在/dev/mapper目录下。
  3. 8e:LVM文件系统标识符(system ID)

No.2: 名词

  1. Physical Storage Media(物理存储介质):如/dev/sda等,是存储系统最底层的存储单元。
  2. PhysicalVolume(PV):物理卷,磁盘上的物理分区打上PV的标识。LVM基本的存储逻辑块。
  3. Volume Group(VG):卷组,由一个或多个PV整合而成,是LVM组合起来的大磁盘(可以做到跨盘)。
  4. Logical Volume(LV):逻辑卷,类似磁盘分区的存在,由VG切割而来,在LV上可以创建文件系统。
  5. Physical Extend(PE):物理扩展块,是整个LVM中最小的存储单位,意味着我们的数据都是写入PE来处理的(类似文件系统中的block),LVM使用默认4M的PE块,而一个VG最多能有65534个PE。具有唯一编号的PE是可以被LVM寻址的最小单元。
  6. Logical Extent(LE):逻辑块,逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

No.3: 工作原理

  1. 物理磁盘被格式化为PV,空间被划分为一个个的PE
  2. 不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
  3. 从VG中划分的LV是基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
  4. LV现在就直接可以格式化后挂载使用了
    • LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

No.4: 数据的写入机制:

  • 线性模式(linear):用完一个PV在使用另一个PV
  • 交错模式(triped):类似RAID 0,将一个数据分开写到多个PV。

No.5: 常用命令

  1. PV
    • pvcreate:将物理分区创建成PV(物理卷)
    • pvscan:查看目前 系统中具有PV的磁盘
    • pvdisplay:显示目前系统中的PV详细状态
    • pvremove:移除PV属性,让该分区不具有PV属性
    • pvmove:迁移数据
  2. VG
    • vgcreate:创建VG
    • vgscan:查看目前 系统中的VG
    • vgdisplay:显示目前系统中的VG详细状态
    • vgextend:在该VG中扩展额外的PV
    • vgreduce:在该VG中删除PV
    • vgchange:设置VG是否启动(active)
    • vgremove:删除VG
  3. LV
    • lvcreate:在VG/PV中创建LV
    • lvscran:查看目前 系统中的LV
    • lvdisplay:显示目前系统中LV信息/状态
    • lvextend:扩展LV的容量
    • lvreduce:减少LV的容量
    • lvresize:调整LV的容量(常用)
    • lvremove:删除一个LV
    • lvdata:显示LV卷组上的LVDA信息
    • lvchange:改变LV卷组属性
  4. resize2fs 设备名:重新读取分区大小

创建LVM

所需软件:lvm2、fdisk或parted分区工具
流程:partition--->pv--->vg--->lv--->file system

No.1: 创建partition

  • 思路:创建分区并调整文件系统标识符(system id)为8e(LVM的标识符)
  • 操作

    [root@oracle_1 ~]# fdisk /dev/sdc
    ......(创建分区略)
    
    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): 8e
    Changed system type of partition 1 to 8e (Linux LVM)
    
    Command (m for help): p
    ......
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1        1044     8385898+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!

No.2: 创建pv

  • 语法:

    [root@oracle_1 ~]# pvscan
     No matching physical volumes found
    
     [root@oracle_1 ~]# pvcreate /dev/sd[bcd]1 //  /dve/sd[bcd]等同于/dev/sd{b,c,d},作用是一次性创建3个PV
     Physical volume "/dev/sdb1" successfully created
     Physical volume "/dev/sdc1" successfully created
     Physical volume "/dev/sdd1" successfully created
    
     [root@oracle_1 ~]# pvscan
       PV /dev/sdb1                      lvm2 [8.00 GiB]
       PV /dev/sdc1                      lvm2 [8.00 GiB]
       PV /dev/sdd1                      lvm2 [8.00 GiB]
       Total: 3 [23.99 GiB] / in use: 0 [0   ] / in no VG: 3 [23.99 GiB]

No.3: 创建vg

  • 语法:vgcreate [-s number[M/G/T]] VG_name PV_name

    • -s:PE的大小,单位可为M、G、T(大小写均可),默认4M。

    • VG_name:卷组的名称

    • PV_name:逻辑卷PV

  • 例子:将/dev/sdb,/dev/sdc,/dev/sdf(sdf不存在)创建成名为VG1的VG。
    [root@oracle_1 ~]# vgscan 
    Reading all physical volumes.  This may take a while...
    No volume groups found
    [root@oracle_1 ~]# vgcreate -s 16M VG1 /dev/sd[bcf]1    
    Volume group "VG1" successfully created
    [root@oracle_1 ~]# vgscan
    Reading all physical volumes.  This may take a while...
     Found volume group "VG1" using metadata type lvm2
    [root@oracle_1 ~]# pvscan
     PV /dev/sdb1   VG VG1             lvm2 [7.98 GiB / 7.98 GiB free]
     PV /dev/sdc1   VG VG1             lvm2 [7.98 GiB / 7.98 GiB free]
     PV /dev/sdd1                      lvm2 [8.00 GiB]
     Total: 3 [23.97 GiB] / in use: 2 [15.97 GiB] / in no VG: 1 [8.00 GiB]

No.4: 创建lv

  • 语法:lvcreate [-L number[M/G/T]] [-n LV_name] VG_name 或 lvcreate [-l number] [-n LV_name] VG_name
    • -L:容量,最小为一个PE大小,故而该数为PE的倍数(可以输入的不是倍数,系统可以自行调整为最相近的容量。
    • -l:PE的个数,容量自行计算,不跟单位。
    • -n后接LV名称
  • 例子:
    [root@oracle_1 ~]# lvscan
    [root@oracle_1 ~]# lvcreate -L 2G -n lv1 VG1
     Logical volume "lv1" created

No.5: 创建file system

mkfs.ext4 /dev/VG1/lv1

维护LVM

No.1: 扩展逻辑卷

VG有足够剩余空间时,1、2步省略不做

  1. 扩展PV
    就是新创建PV,略......
  2. 扩展VG — 向VG中添加PV
    • 命令:vgextend VG_name PV_name
    • 例子:
      # vgextend VG1 /dev/sdd1
      Volume group "VG1" successfully extended
  3. 扩展LV
    • 扩展LV容量
      lvresize -L/-l +number[M/G/T] LV_name
      例如:lvresize -l +30 /dev/mapper/vg01-lv_root
    • 调整LV容量——重新设定容量
      lvresize -L/-l number[M/G/T] LV_name
      例如:lvresize -L 300M /dev/mapper/vg01-lv_root
  1. 操作后LV的容量改变了,但文件系统的容量没变,无需umount,使用resize2fs或xfs_growfs处理下即可
    # resize2fs [-f] [device] [size]

    • 参数:-f:强制进行resize操作;device:设备文件名;size:加上时必须写单位,不加则默认整个分区的容量。
    • 对于xfs文件系统的使用下面命令使文件系统容量变化
      # xfs_growfs lv_path

No.2: 缩小逻辑卷

减小是个有风险的操作,需谨慎;文件系统的减小后大小一定要和lv卷最终大小相等;且注意操作顺序

  1. 首先进行卸载
    # umount
  2. 检查文件系统:
    # e2fsck -f lv_path
  3. 减少文件系统:
    # resize2fs lv_path 减少到的大小
  4. 减少lv卷大小:
    # lvreduce -L 减少到的大小 lv_path
  5. mount使用

No.3: 迁移PV中的数据

[root@oracle_1 ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb                  8:16   0    8G  0 disk
└─sdb1               8:17   0    8G  0 part
sdd                  8:48   0    8G  0 disk
└─sdd1               8:49   0    8G  0 part
sdc                  8:32   0    8G  0 disk
└─sdc1               8:33   0    8G  0 part
  └─VG1-lv1 (dm-0) 253:0    0    3G  0 lvm  
[root@oracle_1 ~]# pvmove /dev/sdc1 /dev/sdb1
  /dev/sdc1: Moved: 2.1%
  /dev/sdc1: Moved: 100.0%
[root@oracle_1 ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb                        8:16   0    8G  0 disk
└─sdb1              8:17   0    8G  0 part
  └─VG1-lv1 (dm-0) 253:0    0    3G  0 lvm  
sdd                       8:48   0    8G  0 disk
└─sdd1             8:49   0    8G  0 part
sdc                       8:32   0    8G  0 disk
└─sdc1             8:33   0    8G  0 part

微信扫一扫,分享到朋友圈

Linux下的逻辑卷管理 — LVM
0
别把想做的事情,留给遥不可及的未来!
下一篇

LSI RAID卡更换硬盘实践操作

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部