LVM及其使用

LVM是什么?

LVM(Logical Volume Manager),即磁盘卷管理,是Linux环境下对磁盘分区进行管理的一种机制。通过LVM可以很方便的实现:

  • 在线扩容
  • 跨物理硬盘分区
  • 在线迁移
  • 快照

LVM原理

LVM是磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。
LVM架构如下:
LVM架构

  • 物理存储介质(PhysicalStorageMedia)
    指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
  • 物理卷(Physical Volume,PV)
    指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
  • 卷组(Volume Group,VG)
    类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
  • 逻辑卷(Logical Volume,LV)
    类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
    • 线性逻辑卷 (Linear Volumes)
      一个线性逻辑卷聚合多个物理卷成为一个逻辑卷.比如,如果你有两个60GB硬盘,你可以生成120GB的逻辑卷.
    • 条块化的逻辑卷(Striped Logical Volumes)
      当你写数据到此逻辑卷中时,文件系统可以将数据放置到多个物理卷中.对于大量连接读写操作,它能改善数据I/O效率.
    • 镜像的逻辑卷(Mirrored Logical Volumes)
      镜像在不同的设备上保存一致的数据.数据同时被写入原设备及镜像设备.它提供设备之间的容错。
    • 快照卷(Snapshot Volumes)
      快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,它复制一份对当前数据区域的改变,由于它优先执行这些改变,所以它可以重构当前设备的状态。
  • 物理块(Physical Extent,PE)
    每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。所以每一个逻辑卷大小都是物理块的整数倍。
  • 逻辑块(Logical Extent,LE)
    LVM抽象模型
    逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

创建LVM

以下操作前请确定保存好硬盘中的数据。。。。

  1. 首先安装LVM(以Debian为例)

    sudo apt-get install lvm2

  2. 将硬盘初始化为物理卷
    在创建卷组前,首先要将硬盘初始化成物理卷已供LVM使用。

    pvcreate /dev/sda /dev/sdb /dev/sdc2

可以通过pvdisplay或者pvs来查看已经创建的物理卷信息。

  1. 创建卷组
    将已经创建的物理卷整合成为一个卷组

    vgcreate mydisk /dev/sda /dev/sdb /dev/sdc2
    vgcreate可以通过-s选项来改变PE的默认大小,大小必须是2的阶乘,最小为1kb。
    同样可以通过vgdisplay和vgs来查看卷组信息。
    可以发现/dev/多了一个mydisk文件夹

  2. 创建逻辑卷

    lvcreate -n MyRoot -L +14G mydisk

这样就创建了名字为MyRoot的逻辑卷,块设备文件默认为/dev/mydisk/MyRoot(其是一个连接,指向/dev/mapper/的同名文件)。
同样可以使用lvs和lvdisplay来查看逻辑卷的情况。

PS 如果过需要条块化,请参阅7

  1. 在逻辑卷上创建分区
    逻辑卷创建完成后就可以当成普通的块文件来使用。

    mkfs.ext4 /dev/mydisk/MyRoot

  2. 挂载使用
    挂载到合适的位置。
    mount /dev/mydisk/MyRoot/ /mnt/MySecret

  3. 条块化I/O
    LVM条块化是LVM功能之一,该技术会跨多个磁盘写入数据,而不是对单一物理卷持续写入。条块化优点如下:

    • 它会改善磁盘性能。
    • 避免对单一硬盘的不断的大量写入。
    • 使用对多个硬盘的条块化写入,可以减少硬盘填满的几率。

创建lv的时候可以加上-i[number]选项就可以使用条块化方法,如果需要可以使用-I选项声明条块尺寸,同样必须是2的阶乘,但是不能超过PE的大小。

LVM的伸展

LVM可以实现在线扩大分区容量,也就是说,如果分区的空间不够用了,可以随时扩大而不用下线。
从下至上

  1. 初始化要添加的物理分区或硬盘,同上。

  2. 扩展卷组
    将一个硬盘或者物理分区添加到卷组之中。
    vgextend mydisk /dev/sdd

  3. 扩展逻辑卷
    扩大逻辑卷
    lvextend -L +1G /dev/mydisk/MyRoot
    注意扩大的单位可以使用一定不要超过VG的剩余空间。

  4. 更新文件系统
    resizefs /dev/mydisk/MyRoot #ext2、ext3、ext4
    xfs_growfs /dev/mydisk/MyRoot #XFS

简单而优雅。

LVM的缩小

LVM缩小操作必须离线,而且一定要备份数据
相比伸展,LVM的缩小操作就有一定的风险了,一定要小心。
自上而下

  1. 卸载LV
    umount /mnt/MySecret
  2. 缩小文件系统
    resize2fs /dev/mydisk/MyRoot 1G #将文件系统改变为1G,请确定已存在的文件体积小于1G
  3. 检查文件系统
    e2fsck -f /dev/mydisk/MyRoot
  4. 缩小LV
    lvreduce -L -1G /dev/mydisk/MyRoot #将MyRoot缩小成1G
  5. 重新挂载
    mount /dev/mydisk/MyRoot /mnt/MySecret
    一定要小心谨慎。。

缩小卷组

缩小卷组其实就是将物理硬盘移出卷组,移出前一定要保证移出的物理硬盘是空的。如果使用了条块化I/O的化,备份数据吧(求大神指教)。

`vgreduce mydisk /dev/sda`
`vgreduck -a mydisk #自动移除空的卷`

删除LVM

由上至下。。

1.删除LV

`lvremove /dev/mydisk/MyRoot`

2.删除VG

`vgremove mydisk

3.删除PV

`pvremove /dev/sda`

LVM快照

LVM快照是以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小的修改。如果快照将存储空间消耗殆尽,我们可以使用lvextend来扩容。而如果我们需要缩减快照所占用卷的大小,可以使用lvreduce。

说白了快照就是保存变化前的文件,所以快照不能用于备份,它并不是完整的副本,所以当遇到硬盘物理损坏等非正常状况是无法恢复的。

步骤:

  1. 查看卷组中是否有足够剩余空间(vgdisplay信息里的Free PE/Size项)来创建快照,没有的话请参考上面扩容部分扩容。

2.创建快照

lvcreate --size 1G --snapshot --name my_snap /dev/mydisk/MyRoot
  1. 验证快照
    使用lvs查看,会发现多了一个my_snap,而它的origin栏对应着MyRoot,这就是存放快照的卷,可以通过df -Th来查看占用的空间。

  2. 扩充快照
    在使用过程中可能发生空间不够用的情况,这时候请一定在空间占慢前扩充快照的空间,也就是其逻辑卷的空间(参考上文)。

  3. 快照恢复
    恢复操作是无法在线的。
    首先要卸载要回复的物理卷,然后在进行合并操作。

    umount /mnt/MyRoot
    lvconvert –merge /dev/mydisk/my_snap

在合并完成后,快照卷将被自动移除。

LVM迁移

LVM迁移是LVM众多优秀特性之一,通过它,我们可以迁移逻辑卷到一个新的磁盘而不会丢失数据,也不用关机操作。该特性的功能是将数据从旧磁盘移动到新磁盘。通常,我们只是在一些磁盘发生错误时,才将数据从一个磁盘迁移到另外一个磁盘存储。
特点:

  • 将逻辑卷从一个磁盘移动到另一个磁盘。
  • 我们可以使用任何类型的磁盘,如SATA、SSD、SAS、SAN storage iSCSI或者FC。
  • 在线迁移磁盘,而且数据不会丢失。

方法一:

  1. 确认磁盘状况,确定要将数据从那个硬盘迁移,迁移到那个硬盘。
    通过`df -h`和`lvdisplay`和`vgdisplay`查看磁盘和LVM状态
    

2.在要迁移到的硬盘/分区上创建物理卷

    `pvcreate /dev/sdc1`
  1. 添加到已有卷组

    vgextend mydisk /dev/sdc1

    `vgs`
    
  2. 创建镜像到新物理卷

    `lvconvert -m 1 /dev/mydisk/MyRoot /dev/sdc1`
    

    -m为–mirror的缩写,数字是表示镜像份数,过程时间稍长。。

  3. 验证镜像

    lvs -o+devices
    
  4. 删除原镜像
    这时候MyRoot对应者/dev/sdc1的镜像和对应原来的多个物理卷组成的镜像。要将原来的移除,要先删除原来的镜像

    lvconvert -m 0 /dev/mydisk/MyRoot
    

0即移除。

  1. 将MyRoot从vg中移除,参考上面的删除lv

方法2

方法一第三步往后:直接使用`pvmove /dev/mydisk/MyRoot /dev/sdc1
方法一的意义在于,服务器环境LVM一般会有很多镜像,类似raid 1,直接创建镜像要快的多。(听人说的,待确定)

你可能感兴趣的:(LVM及其使用)