Welcome to My_Study_Lvm’s documentation!

01 简介

LVM是Linux操作系统的逻辑卷管理器。 现在有两个Linux版本的LVM:

  • LVM 2 - Linux最新最好的LVM版本。
  • LVM 2几乎完全向后兼容使用LVM 1创建的卷。此例外是快照(在升级到LVM 2之前,必须删除快照卷)
  • LVM 2使用设备映射器内核驱动程序。 设备映射程序支持在2.6内核树中,并且有可用于当前2.4内核的补丁程序。
  • LVM 1 - 2.4系列内核中的版本,
  • LVM 1是一种已经被认为稳定了几年的成熟产品。 2.4系列内核中包含了LVM 1的内核驱动程序,但这并不意味着2.4.x内核与最新版本的LVM保持同步。 查看自述文件,了解哪些内核具有当前代码的最新信息。

02 02-什么是LVM

02 什么是LVM

逻辑卷管理提供了比传统的磁盘和分区视图更高级别的计算机系统上磁盘存储的视图。 这使得系统管理员可以更灵活地将存储分配给应用程序和用户。

在逻辑卷管理器的控制下创建的存储卷可以随意调整大小和移动,尽管这可能需要对文件系统工具进行一些升级。

03 LVM概念

3.1 预览

+-- Volume Group --------------------------------+
|                                                |
|    +----------------------------------------+      |
| PV | PE |  PE | PE | PE | PE | PE | PE | PE |      |
|    +----------------------------------------+      |
|      .              .          .        .          |
|      .          .              .        .          |
|    +----------------------------------------+      |
| LV | LE |  LE | LE | LE | LE | LE | LE | LE |      |
|    +----------------------------------------+      |
|            .          .        .             .     |
|            .              .        .         .     |
|    +----------------------------------------+      |
| PV | PE |  PE | PE | PE | PE | PE | PE | PE |      |
|    +----------------------------------------+      |
|                                                |
+------------------------------------------------+

3.1 卷组 (VG)

卷组是LVM中使用的最高级别的抽象。 它将逻辑卷和物理卷集合在一起成为一个管理单元。

3.2 物理卷 (PV)

一个物理卷通常是一个硬盘,虽然它可能只是一个看起来像一个硬盘(如软件RAID设备)的设备。

3.3 逻辑卷 (LV)

相当于非LVM系统中的磁盘分区。 LV作为标准块设备可见; 因此LV可以包含文件系统(例如/ home)

3.4 物理区块 (PE)

每个物理卷都被划分为数据块(称为物理扩展盘区),这些扩展盘区与卷组的逻辑盘区具有相同的大小。

3.5 逻辑区块 (LE)

每个逻辑卷都被分割成数据块,称为逻辑盘区。 卷组中的所有逻辑卷的区段大小都是相同的。

3.6 映射模式 (linear/striped)

线性映射 : 将分配一定范围的PE到LV的一个区域,例如LE 1 - 99映射到PV1,LE 100 - 347映射到PV2。

分条映射 : 将跨多个物理卷交织逻辑盘区的块,这个方式一定程度上提高了性能,具体如下


  1st chunk of LE[1] -> PV1[1], #第一个逻辑块在PV1设备上, 第二个在PV2设备上,等等。   2nd chunk of LE[1] -> PV2[1],   3rd chunk of LE[1] -> PV3[1],   4th chunk of LE[1] -> PV1[2],

3.7 快照

这是LVM提供的一个非常棒的功能就是快照了,他允许管理员创建一个新的块设备来呈现一个逻辑卷的的精确副本,在某个时间冻结,管理员可以及时备份指定一致状态下的数据,备份完毕就可以删除设备了。

快照最初包含有关快照的一些元数据,但没有来自源逻辑卷的实际数据。快照使用写时复制(copy on write)技术来检测数据在原始数据块中何时更改。它将拍摄快照时保存的值复制到快照卷中的块中,然后允许将新数据存储在源块中。

随着更多块从源逻辑卷上的原始值发生更改,快照大小也会增加。如果快照卷变满,它将被丢弃,所以分配足够的空间是非常重要的,具体取决于你数据的变换情况,如果快照大小和原始数据一样大,它将永远不会溢出的。

04 安装lvm

默认centos6,7都是安装了lvm了的。如果没有安装可以使用如下命令安装。

[root@centos7 ~]$ rpm -q lvm2                           # 查看lvm2是否安装了, 我使用的centos7,这是安装的了
lvm2-2.02.171-8.el7.x86_64
[root@centos7 ~]$ # yum -y install lvm2                 # 没有安装的话使用yum安装

05 LVM操作

5.1 初始化磁盘或者磁盘分区

运行pvcreate 在整个磁盘上

# pvcreate /dev/hdb

运行pvcreate 在分区上

# pvcreate /dev/hdb1

Attention

不建议在整个硬盘上创建lvm,没有分区信息容易被其他系统识别为干净的磁盘。

5.2 创建卷组

创建卷组需要在指定的物理卷上面的。

# vgcreate my_volume_group /dev/hda1 /dev/hdb1

创建卷组是可以指定卷大小的,默认是32M。

5.3 激活一个卷组

如果我们重启系统或者关闭了卷组就需要激活它。

# vgchange -a y my_volume_group

5.4 移除一个卷组

移除卷组需要先停掉卷组的。

# vgchange -a n my_volume_group
# vgremove my_volume_group

5.5 添加物理卷到卷组中

# vgextend my_volume_group /dev/hdc1

5.6 从一个卷组中移除一个物理卷

移除物理卷前必须确保空间是足够的,使用pvdisplay查看

# pvdisplay /dev/hda1

--- Physical volume ---
PV Name               /dev/hda1
VG Name               myvg
PV Size               1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV#                   1
PV Status             available
Allocatable           yes (but full)
Cur LV                1
PE Size (KByte)       4096
Total PE              499
Free PE               0
Allocated PE          499
PV UUID               Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7

如果没啥问题了,可以执行vgreduce去移出物理卷。

# vgreduce my_volume_group /dev/hda1

5.7 创建一个逻辑卷

创建一个1500M的名字为testlv的lv

# lvcreate -L 1500M -n testlv testvg

5.8 移除一个逻辑卷

逻辑卷的移除需要先取消挂载的。

# umount /dev/myvg/homevol
# lvremove /dev/myvg/homevol

5.9 扩展一个逻辑卷

扩展主要有2种方式,一种是直接指定扩展到多大,一种是在原有基础上扩展多少。

方案1:

# lvextend -L12G /dev/myvg/homevol

方案2:

# lvextend -L+1G /dev/myvg/homevol

默认情况下,我们使用lvextend是扩展了逻辑卷的大小,但是文件系统的大小还是原来的值。 需要同步下,不同文件系统命令有所不同。

Note

lvextend有个-r的选项,如果指定可以完成自动同步。

ext2/ext3

# umount /dev/myvg/homevol/dev/myvg/homevol
# resize2fs /dev/myvg/homevol
# mount /dev/myvg/homevol /home

reiserfs

# resize_reiserfs -f /dev/myvg/homevol

xfs

# xfs_growfs /home

jfs

# mount -o remount,resize /home

Attention

扩展xfs和jfs文件系统的时候,不能指定挂载设备,必须指定挂载点。

5.10 缩减一个逻辑卷

缩减逻辑卷是有风险的,如果处理不当容易丢掉数据的。

ext2/ext3

# umount /home
# resize2fs /dev/myvg/homevol 524288
# lvreduce -L-1G /dev/myvg/homevol
# mount /home

reiserfs

# umount /home
# resize_reiserfs -s-1G /dev/myvg/homevol
# lvreduce -L-1G /dev/myvg/homevol
# mount -treiserfs /dev/myvg/homevol /home

xfs

没办法缩减

jfs

没办法缩减

5.11 迁移一个老化的的磁盘。

如果有一个磁盘已经老化了,但是有大量数据在上面。那就需要迁移了,迁移前确保卷组的空间够使用。

# pvmove /dev/hdb
# vgreduce dev /dev/hdb

Note

pvmore是迁移数据,很慢的,如果你想获取迁移的详细信息,使用-v选项即可。

5.12 迁移一个老化的的磁盘到新的替代磁盘上。

如果有一个磁盘已经老化了,但是有大量数据在上面。新买了一个同样大小的盘用作替换的。

# pvcreate /dev/sdf
# vgextend dev /dev/sdf
# pvmove /dev/hdb /dev/sdf
# vgreduce dev /dev/hdb

5.13 使用快照备份

# lvcreate -L592M -s -n dbbackup /dev/ops/databases
# mkdir /mnt/ops/dbbackup
# mount /dev/ops/dbbackup /mnt/ops/dbbackup
# tar -cf /dev/rmt0 /mnt/ops/dbbackup
# umount /mnt/ops/dbbackup
# lvremove /dev/ops/dbbackup

Attention

xfs文件系统在挂载的时候需要指定–nouuid ro 选项才可以。

5.14 迁移卷组到另外一个系统上

# unmount /mnt/design/users                     # 卸载设备
# vgchange -an design                           # 关闭卷组
# vgexport design                               # 导出逻辑卷
# 去除磁盘插入新的系统上面去
# pvscan                                        # 扫描pv
# vgimport design                               # 导入卷组
# vgchange -ay design                           # 激活卷组
# mkdir -p /mnt/design/users                    # 创建挂载点目录
# mount /dev/design/users /mnt/design/users     # 挂载

Warning

迁移到其他系统之前请确保名字和目标的不同,使用rename去重命名,且使用sync同步几次,确保数据完全写入到迁移的盘上面。

06 转化根文件系统到LVM

有个文章写的不错,直接给大家推荐了吧。

系统盘转LVM