在线扩容 online
      数据迁移 online
      ====================================================================================
      创建LVM LVM叫逻辑卷管理
      VG扩展/缩小
      LV扩容
      文件系统扩容 在线扩容及在生产中 300G+900G硬盘 做单盘RAID0

    1.   基本分区(MBR|GPT) ----> Filesystem ----> mount // 大小固定+<br />   逻辑卷LVM ----> Filesystem ----> mount<br />   VG叫做卷组<br />   extents 叫做扩展块<br />   PE: Physical extent 物理扩展 4M 8M 16M 32M 64M 创建VG时指定 -s 8M<br />   LE: Logical extent 逻辑扩展

    PE  (Physical Extend)  物理拓展
    PV  (Physical Volume)  物理卷
    VG  (Volume Group)  卷组
    LV  (Logical Volume)  逻辑卷

    什么是LVM?
    LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以实现一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。
    LVM管理 - 图1
    LVM基本术语
    前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
    「物理卷—PV(Physical Volume)」
    物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
    「卷组—VG(Volume Group)」
    卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
    「逻辑卷—LV(Logical Volume)」
    逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷属于同一个卷组,也可以属于不同的多个卷组。
    「物理区域—PE(Physical Extent)」
    物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
    「逻辑区域—LE(Logical Extent)」
    逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
    「卷组描述区域—VGDA(Volume Group Descriptor Area)」
    卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。
    下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
    LVM管理 - 图2
    系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。

      新浪实际工作中<br />      启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份。<br />      3.1 【fdisk -l】 最大分区为/dev/sda3,说明新创建的分区将会是sda4<br />      3.2 输入【fdisk /dev/sda】<br />      3.2.1命令行提示下输入【m】<br />      3.2.2输入命令【n】添加新分区。<br />      3.2.3输入命令【p】创建主分区。<br />      3.2.4输入【回车】,选择默认大小,这样不浪费空间<br />      3.2.5输入【回车】,选择默认的start cylinder。<br />      3.2.6输入【w】,保持修改<br />      3.3 输入【reboot】 重启linux,必须reboot,否则/dev/sda4无法格式化。<br />      3.4 这时在/dev/目录下,才能看到了新的分区比如/dev/sda4<br />      3.5 【mkfs.ext2 /dev/sda4】格式化<br />      3.6 在根目录下创建disk4目录<br />      3.7 【mount /dev/sda4 /disk4/】将分区mount到/disk4/上<br />      3.8 在vim修改/etc/fstab文件,加入【/dev/sda4 /disk4 ext2 defaults 0  0】一行,并保存,实现开机自动mount。<br />      注意 带有快照虚拟机需要安装软件后添加硬盘<br />    **  一、创建LVM**<br />    **  0. 准备物理磁盘**<br />      可以是: /dev/sdb /dev/sdc1<br />      [root@server0 ~]# ll /dev/vd{c,d,e}<br />      brw-rw----. 1 root disk 253, 32 Jun 6 17:38 /dev/vdc<br />      brw-rw----. 1 root disk 253, 48 Jun 6 17:38 /dev/vdd<br />      brw-rw----. 1 root disk 253, 64 Jun 6 17:38 /dev/vde<br />    **  1. pv**<br />      [root@server0 ~]# pvcreate /dev/vdd<br />      Physical volume "/dev/vdd" successfully created<br />      [root@server0 ~]# pvscan<br />      PV /dev/vdd lvm2 [2.00 GiB]<br />      Total: 1 [2.00 GiB] / in use: 0 [0 ] / in no VG: 1 [2.00 GiB]<br />      [root@server0 ~]# pvs<br />      PV VG Fmt Attr PSize PFree<br />      /dev/vdd lvm2 a-- 2.00g 2.00g<br />    **  2. vg**<br />      [root@server0 ~]# vgcreate vg1 /dev/vdd<br />      Volume group "vg1" successfully created<br />      [root@server0 ~]# vgs<br />      VG #PV #LV #SN Attr VSize VFree<br />      vg1 1 0 0 wz--n- 2.00g 2.00g<br />      [root@server0 ~]# vgscan<br />      Reading all physical volumes. This may take a while...<br />      Found volume group "vg1" using metadata type lvm2<br />      [root@server0 ~]# vgdisplay vgdisplay datevg<br />      --- Volume group ---<br />      VG Name vg1<br />      System ID<br />      Format lvm2<br />      Metadata Areas 1<br />      Metadata Sequence No 1<br />      VG Access read/write<br />      VG Status resizable<br />      MAX LV 0<br />      Cur LV 0<br />      Open LV 0<br />      Max PV 0<br />      Cur PV 1<br />      Act PV 1<br />      VG Size 2.00 GiB<br />      PE Size 4.00 MiB<br />      Total PE 511<br />      Alloc PE / Size 0 / 0<br />      Free PE / Size 511 / 2.00 GiB<br />      VG UUID 7E4tlj-l0a2-ph52-OytH-eaq7-58K6-2S4n8V<br />    **  3. lv**<br />      [root@server0 ~]# lvcreate -l 10 -n lv1 vg1<br />      [root@server0 ~]# lvcreate -L 200M -n lv2 vg1<br />      [root@server0 ~]# lvscan<br />      ACTIVE '/dev/vg1/lv1' [640.00 MiB] inherit<br />      ACTIVE '/dev/vg1/lv2' [256.00 MiB] inherit<br />    **  4. 创建文件系统并挂载**<br />      [root@server0 ~]# mkfs.xfs /dev/vg1/lv1<br />      [root@server0 ~]# mkfs.ext4 /dev/vg1/lv2<br />      [root@server0 ~]# mkdir /mnt/lv1 /mnt/lv2<br />      [root@server0 ~]# vim /etc/fstab<br />      /dev/vg1/lv1 /mnt/lv1 xfs defaults 0 0<br />      /dev/vg1/lv2 /mnt/lv2 ext4 defaults 0 0<br />      [root@server0 ~]# mount -a<br />      [root@server0 ~]# df<br />      Filesystem 1K-blocks Used Available Use% Mounted on<br />      /dev/mapper/vg1-lv1 651948 32928 619020 6% /mnt/lv1<br />      /dev/mapper/vg1-lv2 245671 2062 226406 1% /mnt/lv2
    
    **  二、VG管理**<br />      ==扩大VG vgextend==<br />    **  1. pv**<br />      [root@server0 ~]# pvcreate /dev/vde<br />    **  2. vgextend**<br />      [root@server0 ~]# vgextend vg1 /dev/vde<br />      Volume group "vg1" successfully extended<br />      [root@server0 ~]# vgs<br />      VG #PV #LV #SN Attr VSize VFree<br />      vg1 2 2 0 wz--n- 3.99g 3.76g<br />      ==减小VG vgreduce==<br />    **  通常先做数据的迁移**<br />**<br />    **  1.查看当前的VG中PV的使用情况**<br />      [root@server0 ~]# pvs<br />      PV VG Fmt Attr PSize PFree<br />      /dev/vdd vg1 lvm2 a-- 2.00g 1.76g<br />      /dev/vde vg1 lvm2 a-- 2.00g 2.00g<br />    **  2. pvmove数据到其它PV**<br />      [root@server0 ~]# pvmove /dev/vdd<br />      /dev/vdd: Moved: 16.7%<br />      /dev/vdd: Moved: 100.0%<br />      [root@server0 ~]# pvs<br />      PV VG Fmt Attr PSize PFree<br />      /dev/vdd vg1 lvm2 a-- 2.00g 2.00g<br />      /dev/vde vg1 lvm2 a-- 2.00g 1.76g<br />    **  3.vgreduce VG**<br />      [root@server0 ~]# vgreduce vg1 /dev/vdd<br />      Removed "/dev/vdd" from volume group "vg1"<br />      [root@server0 ~]# vgs<br />      VG #PV #LV #SN Attr VSize VFree<br />      vg1 1 2 0 wz--n- 2.00g 1.76g
    
    **  三、LV扩容**<br />    **  1. lv扩容**<br />      [root@server0 ~]# vgs<br />      VG #PV #LV #SN Attr VSize VFree<br />      vg1 2 2 0 wz--n- 1.88g 1.00g<br />      [root@server0 ~]# lvextend -L 800M /dev/vg1/lv1<br />      [root@server0 ~]# lvextend -L +800M /dev/vg1/lv1<br />      [root@server0 ~]# lvextend -l 15 /dev/vg1/lv1<br />      [root@server0 ~]# lvextend -l +15 /dev/vg1/lv1<br />      =======================================<br />      +50%FREE<br /> lvcreate -l 100%FREE -n lv3 datavg<br />lvextend -l +50%FREE  /dev/vg1/lv1<br />      =======================================<br />      [root@server0 ~]# lvscan<br />      ACTIVE '/dev/vg1/lv1' [768.00 MiB] inherit<br />      ACTIVE '/dev/vg1/lv2' [512.00 MiB] inherit<br />    **  2. FS扩容**<br />      [root@server0 ~]# df -Th<br />      /dev/mapper/vg1-lv1 xfs 637M 67M 570M 11% /mnt/lv1<br />      /dev/mapper/vg1-lv2 ext4 240M 32M 192M 15% /mnt/lv2<br />      a. xfs<br />      [root@server0 ~]# xfs_growfs /dev/vg1/lv1<br />      b. ext2/3/4<br />      [root@server0 ~]# resize2fs /dev/vg1/lv2<br />      [root@server0 ~]# df -Th<br />      Filesystem Type Size Used Avail Use% Mounted on<br />      /dev/mapper/vg1-lv1 xfs 765M 67M 698M 9% /mnt/lv1<br />      /dev/mapper/vg1-lv2 ext4 488M 32M 429M 7% /mnt/lv2<br />      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />      1.创建pv<br />      [root@localhost ~]# pvcreate /dev/sda5 /dev/sda6<br />      [root@localhost ~]# pvdisplay<br />      [root@localhost ~]# pvs<br />      2.创建vg<br />      [root@localhost ~]# vgcreate vg0 /dev/sda5 /dev/sda6<br />      [root@localhost ~]# vgdisplay<br />      [root@localhost ~]# vgs<br />      3.创建lv<br />      [root@localhost ~]# lvcreate -L 250M -n /dev/vg0/lv0 vg0<br />      [root@localhost ~]# lvdisplay<br />      [root@localhost ~]# lvs<br />      注意:<br />      pv不能跨越vg<br />      lv不能跨越vg<br />      系统中可以创建多个vg<br />      vg中可以创建多个lv<br />      删除lvm<br />      1.umount /dev/vg0/lv0<br />      2.[root@localhost ~]# lvremove /dev/vg0/lv0<br />      3.[root@localhost ~]# vgremove vg0<br />      4.[root@localhost ~]# pvremove /dev/sda{5,6,8}<br />      企业中的应用 如果根分区满了 怎么做??<br />      df -h 查看<br />      pvcreate /dev/sdb<br />      vgs<br />      vgextend centos /dev/sdb<br />      lvscan<br />      lvextend -L +5G /dev/centos/root<br />      df -T<br />      xfs_growfs /dev/centos/root<br />      df -Th<br />      lvextend -L +5G /dev/centos/root<br />      xfs_growfs /dev/centos/root<br />      df -h<br />      准备3块硬盘 可不分区 思路---PV----VG---LV<br />      lsblk<br />      ##创建PV<br />      pvcreate /dev/sdb<br />      ##查看当前PV<br />      pvscan<br />      pvs<br />      vgcreate datavg /dev/sdb (datavg是起的名字)<br />      vgscan<br />      pvscan ##得到回显 pv/dev/sdb 加入到了VG datevg 容量XXfree<br />      #创建LV<br />      lvcreate -L 200M -n lv1 datavg -L(指定lv的大小) 指定为200m lv1为起的名字 从datevg里创建<br />      lvcreate -L 300M -n lv2 datavg<br />      lvscan ## 得到回显 /dev/datevg/lv1 200m<br />      /dev/datevg/lv2 300m<br />      这时候看lsblk 去看看/dev/sdb????<br />      ##格式化,创建文件系统挂载<br />      mkfs.xfs /dev/datevg/lv1<br />      mkfs.ext4 /dev/datevg/lv2<br />      mkdir /mnt/lv1 /mnt/lv2<br />      挂载<br />      mount /dev/datevg/lv1 /mnt/lv1<br />      mount /dev/datevg/lv2 /mnt/lv2<br />      mount -a<br />      df -h (df-Th) 加上TYPE 类型<br />      LVM完成<br />      #########################################################<br />      扩大VG<br />      vgs<br />      pvcreate /dev/sdc 先变成PV<br />      vgextend datevg /dev/sdc 查看pvscan<br />      vgs free变大 实验成功<br />      继续扩容<br />      pvcreate /dev/sdd<br />      vgextend datevg /dev/sdd<br />      继续查看 VFree 继续变大<br />      ###############################################################<br />      减小VG 数据迁移 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />      pvs 查看<br />      pvmove /dev/sdb /dev/sdc 将sdb数据仍到sdc<br />      vgreduce datevg /dev/sdb<br />      pvscan<br />      查看变化。数据迁移完成<br />      注意:<br />      pv不能跨越vg<br />      lv不能跨越vg<br />      系统中可以创建多个vg<br />      vg中可以创建多个lv