zoukankan      html  css  js  c++  java
  • 🍖Linux磁盘管理之LVM介绍

    一.LVM概述

    1.为什么要用LVM

    • LVM是逻辑卷管理系统工具
    • 使用传统的分区方法, 分完后大小就固定死
    • 分区过大, 造成空间浪费; 分区过小, 导致空间不够用
    • 过小需要从新划分磁盘分区, 或者以软连接的方式将此分区的目录链接到另一个分区
    • 这样做可以临时解决问题, 但给管理带来了麻烦

    2.什么是LVM

    • 逻辑卷管理系统工具
    • LVM可以创建和管理逻辑卷, 不是直接使用磁盘
    • 可以让管理员弹性的管理逻辑卷的扩大缩小, 操作简单不损坏已有数据
    • 可以随意将新磁盘添加到LVM中, 让其扩展已存在的逻辑卷
    • LVM不需要重启就可以让内核知道分区的存在

    2.LVM名词含义

    • PV : 物理卷(physical volume) ,把常规的磁盘设备通过pvcreate命令对其进行初始化, 形成了物理卷 面粉
    • VG : 卷组(volume group), 把多个物理卷组成一个逻辑的整体, 这样卷组的大小就是多个硬盘之和 面团
    • LV : 逻辑卷(logical volume) , 从卷组中划分需要的空间大小出来, 用户仅需对其格式化然后即可挂载使用 切成馒头
    • PE : 基本单元(physical extend), 分配的逻辑大小的最小单元, 默认为4MB的基本块 (假设分配100MB逻辑空间,则需要创建25个PE) 小麦

    3.LVM的优缺点

    • 优点
    1. 可以在系统运行的状态下动态的扩展文件系统的大小
    2. 文件系统可以跨多个磁盘, 因此文件系统大小不会受物理磁盘的限制
    3. 可以增加新的磁盘到 "LVM" 的储存池中
    4. 可以以镜像的方式冗余重要的数据到多个物理磁盘
    5. 可以方便的导出整个卷组到另一态机器
    
    • 缺点
    1. 因为加入了额外的操作, 存取性能受到影响
    2. 当卷组中一个磁盘损坏时, 整个卷组都会受到影响
    解释: 因为一个"逻辑卷"可能是由多个不同"物理卷"里的"PE"组成的
    解决: 底层使用"RAID"做, 上层使用"LVM", 既有了冗余又有了动态扩容
    

    二.LVM的使用

    1.LVM基本使用命令

    • 先安装LVM : yum install lvm2 -y

    • 制作PV : pvcreate [设备名称]

    • 查看PV : pvs

    • 制作VG : vgcreate [vg名] [多个pv路径]

    • 查看VG : vgs

    • 制作LV : lvcreate -L [指定大小] -n [指定lv名字] [指定从哪个vg里分]

    • 查看LV : lvs

    • 扩容VG : vgextend [指定要扩容的vg] [指定要增加的新pv]

    • 扩容LV : lvextend -L [+"指定大小"] -n [指定要增加的那个pv路径]

    • 扩展后更新xfs文件系统 : xfs_growfs [扩容了哪个lv就更新哪个lv]

    • 删除PV : pvremove [要删除的pv]

    • 删除VG : vgremove [要删除的vg名]

    • 删除LV : lvremove [要删除的lv路径]

    • 创建LV快照 : lvcreate -L [指定快照大小] -s -n [快照名字] [需要做快照的那个lv路径]

    • 快照合并 : lvconvert --mergesnapshot [快照名字]

    2.制作 PV, VG, LV 演示

    • 制作PV
    我们可以对一个分区做, 也可以对整个磁盘做, 我这先准备"sdc3, sde"两个设备
    [root@shawn ~]#pvcreate /dev/sdc3 
    [root@shawn ~]#pvcreate /dev/sde
    
    使用"pvs"查看一下制作好的"pv"
    [root@shawn ~]#pvs
    PV         VG Fmt  Attr PSize   PFree  
    /dev/sdc3     lvm2 ---  100.00m 100.00m
    /dev/sde      lvm2 ---    5.00g   5.00g
    
    • 制作VG
    将两个"pv"合成一个"vg"
    [root@shawn ~]#vgcreate vg1 /dev/sdc3 /dev/sde
    Volume group "vg1" successfully created  # success代表成功
    
    查看 "vg"
    [root@shawn ~]#vgs
    VG  #PV #LV #SN Attr   VSize  VFree 
    vg1   2   0   0 wz--n- <5.09g <5.09g
    
    • 制作LV
    制作一个"1G"的"lv", 一个"2G"的"lv"
    [root@shawn ~]#lvcreate -L 1G -n lv1_from_vg1 vg1
    [root@shawn ~]#lvcreate -L 2G -n lv2_from_vg1 vg1
    
    查看 "lv"
    [root@shawn ~]#lvs
    LV   VG  Attr LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    lv1_from_vg1 vg1 -wi-a----- 1.00g                  
    lv2_from_vg1 vg1 -wi-a----- 2.00g   
    
    • 将其制作文件系统并挂载
    先创建两个文件
    [root@shawn ~]#mkdir /test3
    [root@shawn ~]#mkdir /test4
    
    将两个"lv"制作文件系统
    [root@shawn ~]#mkfs.xfs /dev/vg1/lv1_from_vg1 
    [root@shawn ~]#mkfs.xfs /dev/vg1/lv2_from_vg1 
    
    将其挂载
    [root@shawn ~]#mount /dev/vg1/lv1_from_vg1  /test3
    [root@shawn ~]#mount /dev/vg1/lv2_from_vg1  /test4
    
    • df -h命令查看一下

    3.动态扩容演示

    • 演示场景
    假设我们的"lv1"也就是"/test3"不够用了
    我们可以从"vg1"里面动态的获取空间
    那么假设"vg1"能提供的空间也不够了
    那我们就只能加入新的"pv"
    
    • 新增 PV
    我们准备了一个新的分区"/dev/sdd1"
    [root@shawn ~]#pvcreate /dev/sdd1
    
    查看一下
    [root@shawn ~]#pvs
    PV         VG  Fmt  Attr PSize  PFree 
    /dev/sdc3  vg1 lvm2 a--  96.00m 96.00m
    /dev/sdd1      lvm2 ---   5.00g  5.00g   #新增了这一块
    /dev/sde   vg1 lvm2 a--  <5.00g <2.00g
    
    • 将 PV 加入到 vg1 中
    使用"vgcreate"
    [root@shawn ~]#vgextend vg1 /dev/sdd1
    
    查看一下"vg1"的空间
    [root@shawn ~]#vgs
    VG  #PV #LV #SN Attr   VSize   VFree 
    vg1   3   2   0 wz--n- <10.09g <7.09g  #对比之前可以发现增加了"5G"
    
    • 将 lv1 扩充 4G的空间
    使用"lvextend"命令
    [root@shawn ~]#lvextend -L +4G -n /dev/vg1/lv1_from_vg1 
    
    更新"xfs"系统文件
    [root@shawn ~]#xfs_growfs /dev/vg1/lv1_from_vg1 
    
    查看一下"lv1"空间
    [root@shawn ~]#lvs
    LV VG  Attr LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    lv1_from_vg1 vg1 -wi-ao---- 5.00g   #发现大了4G           
    lv2_from_vg1 vg1 -wi-ao---- 2.00g 
    

    4.动态缩容和删除

    • 缩容
    提示: 企业一般不会缩容,而是直接删除,并且"xfs"文件系统不支持缩容
    
    命令: lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME
    
    • 删除 LV
    删除之前需要先卸载挂载点
    [root@shawn ~]#umount /test4
    [root@shawn ~]#lvremove /dev/vg1/lv2_from_vg1 
    后面有提示输入"y"
    
    • 删除 VG
    [root@shawn ~]#vgremove vg1
    
    • 删除 PV
    能删除的只能是不属于任何 "vg" 的 "pv"
    [root@shawn ~]#pvremove /dev/sde
    

    5.快照演示

    • LVM提供了快照功能, 也就是给文件系统做一个备份

    • 采用的是写时复制, 就是创建时仅创建实际数据的inode的硬链接

    • 一旦改变了快照对应的原文件, 这时原始卷上将要改变的数据会在改变之前拷贝到快照里去

    • 快照实际上也是创建了一个逻辑卷, 只是该卷与普通逻辑卷属性有些不一样

    • LVM快照底层原理图

    • 强调点
    1. "VG"中需要存放快照本身的空间,不能被占满,快照一般设置与源"lv"大小相等
    2. 因为快照与源"LV"共享许多"PE",所以快照所在的 "VG" 必须与备份的 "LV"相同, 否则快照会失效
    
    • 制作快照并回复单个(少量)文件演示
    我们清理一下之前的环境,然后制作新的"PV,VG,LV",让实验看起来更明显
    [root@shawn ~]#pvs
    PV         VG Fmt  Attr PSize   PFree  
    /dev/sdc3     lvm2 ---  100.00m 100.00m
    /dev/sdd1     lvm2 ---    5.00g   5.00g
    /dev/sde      lvm2 ---    5.00g   5.00g
    
    选"sdd1,sde"做"vg"
    [root@shawn ~]#vgcreate vg1 /dev/sde /dev/sdd1
    [root@shawn ~]#vgs
    VG  #PV #LV #SN Attr   VSize VFree
    vg1   2   0   0 wz--n- 9.99g 9.99g
    
    制作一个"lv1",并格式化与挂载,查看
    [root@shawn ~]#lvcreate -L 1G -n lv1_from_vg1 vg1
    [root@shawn ~]#mkfs.xfs /dev/vg1/lv1_from_vg1
    [root@shawn ~]#mount /dev/vg1/lv1_from_vg1 /test3
    [root@shawn ~]#df -h
    /dev/mapper/vg1-lv1_from_vg1 1014M   33M  982M    4% /test3
    
    在里面写一些文件,并查看
    [root@shawn ~]#echo 333 > /test3/1.txt
    [root@shawn ~]#echo 222 > /test3/2.txt
    [root@shawn ~]#echo 111 > /test3/3.txt
    [root@shawn ~]#cat /test3/1.txt /test3/2.txt /test3/3.txt 
    333
    222
    111
    
    开始制作这时的一个快照(快照需要在同一个"vg"里面),并查看
    [root@shawn ~]#lvcreate -L 1G -s -n lv1_from_vg1_bak /dev/vg1/lv1_from_vg1 
    [root@shawn ~]#lvs
    LV   VG  Attr   LSize Pool Origin  Data%  Meta%  Move Log Cpy%Sync Convert
    lv1_from_vg1     vg1 owi-aos--- 1.00g                            
    lv1_from_vg1_bak vg1 swi-a-s--- 1.00g   lv1_from_vg1 0.00  #发现快照创建成功
    
    修改文件来模拟数据被篡改,并查看
    [root@shawn ~]#echo "This is change file" >> /test3/3.txt 
    [root@shawn ~]#cat /test3/3.txt 
    111
    This is change file
    
    恢复数据
    ⛅挂载快照: 快照在挂载的时候由于和原来的"LVM"是同一个"UUID"
    ⛅而"XFS"是不允许相同"UUID"的文件系统挂载,所以需要加选项"-0 nouuid"不使用uuid做识别
    [root@shawn ~]#mount -o nouuid /dev/vg1/lv1_from_vg1_bak /test4
    [root@shawn ~]#ls /test4
    1.txt  2.txt  3.txt
    [root@shawn ~]#cat /test4/3.txt 
    111           #确认是最初的那个亚子
    
    将其拷贝覆盖回去
    [root@shawn ~]#cp -rf /test4/3.txt /test3/3.txt 
    cp:是否覆盖"/test3/3.txt"? y
    [root@shawn ~]#cat /test3/3.txt 
    111           #回到了最初的亚子
    
    • 恢复文件的个数过多可以直接进行合并
    先查看原数据
    [root@shawn ~]#cat /test3/1.txt /test3/2.txt /test3/3.txt 
    333
    222
    111
    
    创建快照"bak2",并查看
    [root@shawn ~]#lvcreate -L 1G -s -n lv1_from_vg1_bak2 /dev/vg1/lv1_from_vg1
    [root@shawn ~]#lvs
    LV   VG  Attr  LSize Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
    lv1_from_vg1      vg1 owi-aos--- 1.00g                         
    lv1_from_vg1_bak  vg1 swi-aos--- 1.00g      lv1_from_vg1 0.20 
    lv1_from_vg1_bak2 vg1 swi-a-s--- 1.00g      lv1_from_vg1 0.00
    
    修改原文件,并查看
    [root@shawn ~]#echo aaaaa >> /test3/1.txt 
    [root@shawn ~]#echo aaaaa >> /test3/2.txt 
    [root@shawn ~]#echo aaaaa >> /test3/3.txt
    [root@shawn ~]#cat /test3/1.txt /test3/2.txt /test3/3.txt 
    333
    aaaaa
    222
    aaaaa
    111
    aaaaa
    
    先卸载原数据设备和快照,然后进行合并,快照会自动删除(一次性的合并)
    [root@shawn ~]#umount /test3
    [root@shawn ~]#umount /test4
    [root@shawn ~]#lvconvert --mergesnapshot /dev/vg1/lv1_from_vg1_bak2 
    [root@shawn ~]#mount /dev/vg1/lv1_from_vg1 /test3
    [root@shawn ~]#ls /test3
    1.txt  2.txt  3.txt
    [root@shawn ~]#cat /test3/1.txt /test3/2.txt /test3/3.txt 
    333
    222
    111           #发现回到了最初的亚子
    
    在看看"bak2"文件
    [root@shawn ~]#lvs
    LV  VG  Att LSize Pool Origin  Data%  Meta%  Move Log Cpy%Sync Convert
    lv1_from_vg1     vg1 owi-aos--- 1.00g    
    lv1_from_vg1_bak vg1 swi-a-s--- 1.00g      lv1_from_vg1 0.20   #惊奇的发现2消失了
    
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13951227.html
Copyright © 2011-2022 走看看