目录
  1. 1. LVM
    1. 1.1. 定义
    2. 1.2. 优缺点
    3. 1.3. 术语
    4. 1.4. 架构图
    5. 1.5. 操作指令
    6. 1.6. 操作过程
      1. 1.6.1. 新建
      2. 1.6.2. 扩容
      3. 1.6.3. 缩容
      4. 1.6.4. 转移数据
      5. 1.6.5. 删除整个逻辑卷
    7. 1.7. 写入模式
    8. 1.8. snapshot(快照)
      1. 1.8.1. 创建
      2. 1.8.2. 还原
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

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

    1
    vgcreate vg名 pv名
  3. 创建lv

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

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

    1
    mount 卷名 挂载点

扩容

  • lv扩容

    1. 增加空间

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

      1
      resize2fs
  • vg扩容

    1. 添加分区/磁盘到vg

      1
      vgextend vg名 分区/磁盘名

缩容

  • lv缩容

    1. 卸载逻辑卷

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

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

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

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

  • vg缩容

    直接移出pv

转移数据

  1. 转移空间数据

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

  3. 清除该pv

    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的生命周期里,做完你需要做得事情。

创建

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

还原

  1. 部分还原

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

  2. 全部还原

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

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

评论