avatar

目录
LVM

LVM

定义

LVM(Logical Volume Manager),逻辑卷管理。

LVM通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。将原为直接对文件系统的操作转变为逻辑卷操作。

优缺点

优点:

  • 可以在系统运行的状态下动态的扩展文件系统的大小。
  • 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
  • 可以增加新的磁盘到LVM的存储池中。
  • 可以以镜像的方式冗余重要的数据到多个物理磁盘。
  • 可以方便的导出整个卷组到另外一台机器。

缺点:

  • 在从卷组中移除一个磁盘的时候必须使用reducevg命令。缩减很危险,要离线
  • 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
  • 因为加入了额外的操作,存贮性能受到影响。

术语

PV(Physical Volume): 物理卷,处于LVM最底层,可以是物理硬盘或者分区。创建PV时自动划分为PE。

PE(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,只能创建VG的时候指定(默认为4MB)。同一VG中所有的PV的PE应该相等。4 MB(默认) 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE

VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。

LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。快照卷也属于一种逻辑卷。

LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元。和PE对应。

架构图

架构图

操作指令

fdisk:查看磁盘使用情况及分区

pvcreate:将物理硬盘分区初始化为物理卷

pvscan:扫描系统中所有硬盘的物理卷列表

pvs/pvdisplay:输出物理卷信息报表

vgcreate:用于创建LVM卷组

vgs/vgdisplay:显示LVM卷组的信息

lvcreate:用于创建LVM的逻辑卷或者

lvs/lvdisplay:显示逻辑卷属性

mkfs:用于在设备上创建Linux文件系统

mount:挂载分区

lvextend:用于对逻辑卷扩容。扩容后需要手动同步文件系统,使用-r参数可自动拓展文件系统大小。

resize2fs:同步文件系统

vgextend:用于对卷组扩容。添加新盘后需要重启设备,可以使用echo “- - -“ > /sys/class/scsi_host/host0/scan扫描SCSI总线添加设备。添加的设备需要格式化成PV后再添加到VG。

lvreduce:用于对逻辑卷缩容,缩容必须离线进行。需要先用resize2fs对文件系统缩容才可对逻辑卷缩容。文件系统缩容前需要执行e2fsck对文件系统做检测。文件系统大小需要和逻辑卷保持一致,以免造成浪费。

vgreduce:用于对卷组缩容。实际是移除PV,移除前需要确定没有数据,防止丢失数据。

pvremove:用于移除pv。移除后的pv重新变成普通分区。

vgexport:用于卷组的导出

vgimport:用于卷组的导入

当逻辑卷有快照时是不能扩展和缩减的,除非先将快照删除.

操作过程

新建

  1. 创建pv

    shell
    1
    pvcreate /dev/{盘/分区}
  2. 创建vg

    shell
    1
    vgcreate vg名 pv名
  3. 创建lv

    shell
    1
    lvcreate -L 卷大小 -n 卷名 vg名
  4. 格式化

    shell
    1
    mkfs.ext4 /卷名  # 格式化成ext4文件系统
  5. 挂载

    shell
    1
    mount 卷名 挂载点

扩容

  • lv扩容

    1. 增加空间

      shell
      1
      2
      3
      4
      # 增加指定容量
      lvextend -L +xxM 卷名
      # 增加到指定容量
      lvextend -l xxM 卷名
    2. 同步文件系统

      shell
      1
      resize2fs
  • vg扩容

    1. 添加分区/磁盘到vg

      shell
      1
      vgextend vg名 分区/磁盘名

缩容

  • lv缩容

    1. 卸载逻辑卷

      shell
      1
      umount 卷名
    2. 检查剩余空间

      shell
      1
      e2fsck 卷名
    3. 减少空间到指定容量

      shell
      1
      resize2fs 逻辑卷名 指定大小
    4. 缩容

      shell
      1
      lvreduce -L 前一步指定的大小 卷名  # 需要确认
    5. 重新挂载使用

  • vg缩容

    直接移出pv

转移数据

  1. 转移空间数据

    shell
    1
    pvmove 源分区 目标分区
  2. 移出vg里的需要移出的分区

  3. 清除该pv

    shell
    1
    pvremove 分区

删除整个逻辑卷

  1. 卸载逻辑卷
  2. 修改etc/fstab里的挂载信息
  3. 删除逻辑卷
  4. 删除卷组
  5. 移出pv,转变成普通分区

写入模式

  • 线性模式–默认模式

    写完一个设备再写另一个设备

  • 条带模式

    类似于RAID0,即数据是被分散写入到LVM各成员设备上的。性能较好,但是数据不具有安全性。

snapshot(快照)

snapshot是像照相一样将当前的系统信息保存下来。
当创建一个snapshot的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,原始数据被移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是没有修改过的块,那么会将读操作直接重定向到原始卷上,如果是已经修改过的块,那么就读取拷贝到snapshot中的块。

  • 快照卷是只读的
  • 创建快照前需将针对的逻辑卷临时改为只读,创建完毕后再改为读写
  • 快照卷必须和原卷在同一卷组内

一定要在snapshot的生命周期里,做完你需要做得事情。

创建

shell
1
lvcreate -L 卷大小 -s -n 指定卷名 需要创建快照的逻辑卷

还原

  1. 部分还原

    可以将镜像挂载好,然后直接复制需要的文件到源卷上

  2. 全部还原

    shell
    1
    2
    3
    dd if=快照卷的地址 of=/data/recover.img
    dd if=/data/recover.img of=源卷
    rm /data/recover.img
  3. 合并卷

    shell
    1
    lvconvert --merger 快照名
文章作者: ZyTomorrow
文章链接: https://zytomorrow.top/2019/10/22/cun-chu/lvm/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tomorrow
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论