LVM 逻辑卷创建与管理

LVM ( Logical Volume Manager ) 是基于内核的一种逻辑卷管理器,允许用户动态调整文件系统大小,可以利用快照功能备份数据。


LVM分为:物理卷 卷组  逻辑卷

    物理卷:(PV)是LVM最底层概念,和磁盘份区是对应的关系(一个分区对应一个物理卷,由命令生成。)

    卷 组:(VG)由一个或多个物理卷组成,大小取决于物理卷的个数及容量,创建时可以指定其PE大小。卷组我们可以看成是一个磁盘设备。

                    PE(Physical Extent)即物理长度,逻辑意义上磁盘最小存储单位,默认大小为4M。

    逻辑卷:(LV)是LVM逻辑意义上的分区,可以指定多少容量来创建分区大小,最后格式化创建文件系统挂载使用。


一般常用的几个命令:

    PV: pvcreate (创建物理卷)

            pvremove(移除物理卷)

            pvmove(把PV上的数据移动其它PV上,移除物理卷之前使用。)

            pvscan

            pvs(简单查看PV卷)

            pvdispaly(查看PV卷的祥细信息)


    vg: vgcreate(创建卷组)

            vgremove(移除卷组)

            vgs(简单的查看VG卷的信息)

            vgscan()

            vgdispaly(查看VG的详细信息)

            vgextend(扩展VG)

            vgreduce(缩减VG)


    LV:lvcreate  (创建LV卷)

            lvremove (移除LV卷)

            lvs (简单查看LV卷信息)

            lvscan

            lvdispaly (查看LV卷的祥细信息)

            lvextend (扩展LV卷)

            lvreduce (缩卷LV卷)


    centos 6  :resize2fs  调整lv大小

*****************************************************************************************

命名方式:

    dm: device mapper   设备映射                                        

设备文件:/dev/卷组名/逻辑卷名
                /dev/mapper/卷组名-逻辑卷名

        假如系统是一卷组为myvg   逻辑卷为lvdata 则在目录中表示如下:
            第一种:/dev/myvg/lvdata      # 用户一般用此方式访问
            第二种:/dev/mapper/myvg-lvdata      # 内核识别

********************************************************************************************

创建LVM逻辑卷:

    1、准备创建PV卷的分区

            # fdisk /dev/<磁盘名>

    2、创建PV卷

            # pvcreate  /dev/<分区名>

    3、创建 VG卷组

            # vgcreate  vg_name   /dev/sda[1...]     # 可以一次指定多个PV

                -s 创建时指定其PE大小,默认为4M

    4、创建LV卷

            #lvcreate -l <PE数量> -n <lv名称>   /dev/vg_name

                      也可以使用  -L   指定大小,单位为M,G 等

***********start****************

1、创建磁盘分区,并把类型更改为8e  LVM卷,一定要改,避免重装系统后,内核不能识别该分区

使用fdisk  /dev/sda 创建新的分区  t  选项指定分区的类型。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1913    15360000   83  Linux
/dev/sda2            1913        2168     2048000   82  Linux swap / Solaris
/dev/sda3            2168        6527    35019103+   5  Extended
/dev/sda5            2168        2299     1057662   8e  Linux LVM      # 新增的
/dev/sda6            2300        2431     1060258+  8e  Linux LVM     # 新增的

创建分区后,使用如下两个命令让内核重新识别新的分区 

# kpartx -af /dev/sda
# partx -a /dev/sda
# cat /proc/partitions   # 查看分区是否以被内核识别,没的重新执行以上命令

2、创建PV

[root@test ~]# pvcreate /dev/sda[5..6]
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
[root@test ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda5       lvm2 a--  1.01g 1.01g
  /dev/sda6       lvm2 a--  1.01g 1.01g

3、创建VG

[root@test ~]# vgcreate myvg /dev/sda5 /dev/sda6   # 使用了两个pv创建了一个VG
  Volume group "myvg" successfully created
[root@test ~]# vgs            # 简单查看vg的信息
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   2   0   0 wz--n- 2.01g 2.01g
  [root@test ~]# vgdisplay   # 查看其祥细信息,查看时,可以指定一个VG名称。
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write    # 读写
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.01 GiB     # VG大小
  PE Size               4.00 MiB    # 默认的PE大小为4M  可以在创建VG使用-s 指定其默认大小
  Total PE              515
  Alloc PE / Size       0 / 0   
  Free  PE / Size       515 / 2.01 GiB
  VG UUID               B4Soui-Z6Fx-aEht-hTmG-lCAP-1j6Z-Bp7eJO

4、创建LV

# lvcreate -L +1.5G -n lvdata /dev/myvg   # -L指定大小 -n 指定名称,可以使用小l指定其PE的个数。
  Logical volume "lvdata" created
# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lvdata myvg -wi-a----- 1.50g

5、创建文件系统(格式化)并挂载使用

# mke2fs -t ext4 /dev/myvg/lvdata   # 创建文件系统,指定其为ext4的类型
# mkdir /mnt/lvmdata                        # 创建一个挂载目录
# mount /dev/myvg/lvdata /mnt/lvmdata/   # 挂载卷

***********end**********************


当使用过程中数据不断增大,慢慢LVM卷大小不能满足我们的需求,这时需要增加其大小.

逻辑卷扩展的步骤:
    1、先确定扩展的大小;并确保所属的卷组有足够的剩余空间;不够就需要增加PV卷(VG卷满足的话这一步是可以省略的, 使用vgs查看VG卷组够不够)

        # 使用fdisk命令 新建一个分区,-t 指定其类型为8e

        # pv  /dev/<新建的分区名>

        # vgextend    VolumeGroupName   PhysicalDevicePath   [PhysicalDevicePath...]

    2、扩展物理边界:
        # lvextend -L [+]Size /path/to/lv_device
    3、扩展逻辑边界:
        # resize2fs /path/to/lv_device

**************start*******************

1、增加PV卷,扩展VG卷(如果VG卷空间足够,这一步可以省略)

[root@test ~]# vgextend myvg /dev/sda7
  Volume group "myvg" successfully extended
[root@test ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   1   0 wz--n- 3.02g 1.52g

2、扩展物理边界(相当于分区的大小)注意:+号的使用与不使用的效果。

[root@test ~]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lvdata myvg -wi-ao---- 1.50g                                             
[root@test ~]# lvextend -L +1G /dev/myvg/lvdata    # 也可以使用小写的l 来增加PE的个数
  Extending logical volume lvdata to 2.50 GiB

3、扩展逻辑边界(相当于文件系统大小。也就是说格式化后的大小,可以这么来理解)

[root@test ~]# df -h    # 扩展前查看
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda1                 15G  974M   13G   7% /
tmpfs                    729M     0  729M   0% /dev/shm
/dev/mapper/myvg-lvdata  1.5G   35M  1.4G   3% /mnt/lvmdata   # 物理边界己经扩展到了2.5G了但这里还是1.5
[root@test ~]# resize2fs /dev/myvg/lvdata    # 扩展逻辑边界
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/lvdata is mounted on /mnt/lvmdata; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/lvdata to 655360 (4k) blocks.
The filesystem on /dev/myvg/lvdata is now 655360 blocks long.
[root@test ~]# df -h   # 扩展后的结果
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda1                 15G  974M   13G   7% /
tmpfs                    729M     0  729M   0% /dev/shm
/dev/mapper/myvg-lvdata  2.5G   35M  2.4G   2% /mnt/lvmdata  # 扩展后的效果

**************end*******************

注意:如果条件允许,最好先卸载文件系统,然后使用e2fsck 检查文件系统再扩展。

缩减逻辑卷的步骤:
    1、卸载卷,并执行强制检测
        # e2fsck -f /path/to/lv_device
    2、缩减逻辑边界:
        # resize2fs /path/to/lv_device SIZE
    3、缩减物理边界:
        # lvreduce -L [-]Size /path/to/lv_device

    4、移动PV卷数据到其它PV卷,移除卷组中的PV,再移除PV卷

************start********************

1、卸载卷,并执行强制检测

# umount /dev/myvg/lvdata 
# e2fsck -f /dev/myvg/lvdata

2、缩减逻辑边界

# resize2fs  /dev/myvg/lvdata 2G

3、缩减物理边界

# lvreduce -L 2G /dev/myvg/lvdata    # 缩减到了2G,注意不写+号就是到多少G
# mount /dev/myvg/lvdata /mnt/lvmdata/  # 然后再挂载使用

4、移除空闲PV

    如果此时我们要移除sda5

[root@test ~]# pvs   首先查看PV卷,看PV使用情况,此时sda5有数据在使用我们需要移动数据到其它PE
  PV         VG   Fmt  Attr PSize PFree 
  /dev/sda5  myvg lvm2 a--  1.00g 12.00m
  /dev/sda6  myvg lvm2 a--  1.01g     0 
  /dev/sda7  myvg lvm2 a--  1.01g  1.01g
[root@test ~]# pvmove /dev/sda5    # 移动数据到其它PE
  /dev/sda5: Moved: 0.8%
  /dev/sda5: Moved: 50.8%
  /dev/sda5: Moved: 100.0%
[root@test ~]# vgreduce myvg /dev/sda5  # 缩减VG卷组
[root@test ~]# pvremove /dev/sda5  # 移除PV
  Labels on physical volume "/dev/sda5" successfully wiped

********************end***************


扩展卷组:
    1、准备要添加的物理卷;
    2、扩展卷组:
        添加物理卷至卷组中;
        # vgextend vg_name /path/to/pv_device

缩减卷组:
    1、确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小;
    2、将要移除的物理卷上的所有PE移动至其它PV
        # pvmove /path/to/pv_device
    3、缩减vg
        # vgreduce vg_name /path/to/pv_device


 快照:
    由于 我们使用cp命令对数据进行复制,如果数据过大,而且正在使用,会造成时间戳不一致,导致数据还原不可用

    快照卷也是一个逻辑卷,通常为只读,大小不要求和原卷一样大小,创建后的快照不会受原卷数据的影响(原卷数据改变,快照数据不会跟

着改变),可以用来备份


 
    用快照备份完成数据后,卸载 ,删除快照卷

快照卷:逻辑卷的一种,通常为止读(-p {r|w})

    创建快照卷-->挂载快照卷-->备份快照卷里的数据-->卸载快照卷-->移除快照卷 

          # lvcreate -s -L Size -n Name -p r /path/to/original_lv_device

                    -p 指定r 或rw

                    -L 逻辑卷的大小 ,也可以使用小写L指定其块大小

                    -n  指定其名

*************start******************

1、给逻辑卷/dev/vg_group1/test_lv1创建快照

[root@serverln ~]#  lvcreate -L 50M -s -p r -n my_snap /dev/vg_group1/test_lv1
 Rounding up size to full physical extent 52.00 MiB
 Volume group "vg_group1" has insufficient free space (1 extents): 13 required.

2、备份数据   (先挂载快照,再备份快照数据完成对原始卷的备份)

# mkdir /mnt/backup  
# mount /dev/vg_gruop1/my_snap  /mnt/backup
#cd /mnt/backup;    tar cjvf  /opt/mysql_data.tar.bz2

3、删除快照卷

# lvremove /dev/vg_group1/my_snap

***************end***********************


还有一种:牺牲快照恢复原始卷

lvcreate -L +20M -s -n lv1s /dev/vg1/lv1  创建快照
[root@root lv1]# lvs  显示LV卷
 LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
 lv1  vg1  owi-aos-- 80.00m                                            
 lv1s vg1  swi-a-s-- 20.00m      lv1      0.06                          
                       
[root@root lv1]# ls 查看原如卷之前的内容
config-2.6.32-358.el6.i686         symvers-2.6.32-358.el6.i686.gz  vmlinuz-2.6.32-
 
358.el6.i686
initramfs-2.6.32-358.el6.i686.img  System.map-2.6.32-358.el6.i686
[root@root lv1]# rm -rf sy*  删除原始卷一些内容
[root@root lv1]# ls
config-2.6.32-358.el6.i686         System.map-2.6.32-358.el6.i686
initramfs-2.6.32-358.el6.i686.img  vmlinuz-2.6.32-358.el6.i686
[root@root lv1]# umount /mnt/lv1  卸载原如卷
 
[root@root ~]# lvconvert --merge /dev/vg1/lv1s 用快照卷恢复原始卷
 
[root@root ~]# mount /dev/vg1/lv1 /mnt/lv1
[root@root ~]# ls /mnt/lv1  恢复后的数据,和之前做快照的数据一样
config-2.6.32-358.el6.i686         System.map-2.6.32-358.el6.i686
initramfs-2.6.32-358.el6.i686.img  vmlinuz-2.6.32-358.el6.i686
symvers-2.6.32-358.el6.i686.gz


你可能感兴趣的:(LVM逻辑卷创建与管理)