ITPub博客

首页 > Linux操作系统 > Linux操作系统 > LVM应用

LVM应用

Linux操作系统 作者:nh39304 时间:2019-07-28 22:45:48 0 删除 编辑

  

内核dm模块:device mapper--->内核的一个管理模块,将一个或多个底层的块设备组织成
一个逻辑设备块。
    具有以下功能
        linear:类似Jbod,能够将多个磁盘的存储空间拼接在一块,当做一个磁盘来使用。
        mirror:类似于镜像。
        Snapshot:快照
        Multipath:多路径,服务器节点和存储设备之间配置多条IO路径但仍视为一个单一存储设备。
        lvm2: logic Volume Manager Version 2,支持动态缩减逻辑大小。

                                        

1. LVM2:

                       

    基本概念:
      PV : Physical Volume 物理卷,物理层面磁盘组成的磁盘卷,磁盘分区(或整个磁盘);
      VG : Volume Group 卷组,从多个PV中抽象出来的卷组,大小由取决于PV(物理卷)组合的大小;
      PE : PhysicalExtend,VG将PV所提供的容量再次以“块”的形式对外提供,逻辑存储单位;
      LV : Logical Volume 逻辑卷,可供挂载使用的设备文件,文件位置如下:
           /dev/dm-# ; /dev/mapper/VG-name-LV-name; /dev/VG_name/LV_name
    LVM的缺点 :  扩展风险低,缩减高;
                 数据损坏时,比较耗时;
                 使用物理磁盘越多,损坏的几率越高,必须有物理冗余配置。
    pv管理工具:
       对象:  可以是单个分区,磁盘,RAID
       pvs :        查看创建的pv  
       pvcreate /dev/device :创建pv 
       pvdispaly  :查看pv的详细信息  
       pvscan    :查看当前主机的pv  
       pvmove  /dev/device : 将一个pv中的数据移到其他的pv中 
       pvremove /dev/device : 删掉pv
   
   VG管理工具:
       对象:  VG
   vgs :       查看创建的vg
   vgcreate   VGname /dev/device(建立了pv的设备):   创建卷组       
           -s     指定PE的大小,默认是4M  
   vgdisplay :   查看vg的详细信息 
   vgremove  VGname /dev/device(建立了pv的设备) :  移除vg  ,移除前先要做pvmove
   vgreduce  :  缩减一个vg 
   vgextend  :  扩展vg
   
     LV管理工具:
   lvs      : 查看创建的lv  
   lvdisplay : 查看创建的lv的详细信息 
   lvcreate -L #[MGT] -n LVname  VGname: 创建逻辑卷组  
   lvremove   /dev/VG_name/LV_name :移除一个逻辑卷
   lvextend -L [+]#[MGT] /dev/VG_name/LV_name 扩展逻辑卷,可用+表示增加,不带+表示增加到; 
       mkfs.ext4  /dev/VG_name/LV_name :逻辑卷创建文件系统
   resize2fs  /dev/VG_name/LV_name : 扩展文件系统,此命令只针对etfs文件系统;要求绝对路径
   xfs_growfs /dev/VG_name/LV_name : 扩展文件系统,此命令只针对xfs文件系统; 要求绝对路径
      注意,xfs_growfs不支持缩容。
   
缩减逻辑卷(存在风险)
  # umount /dev/VG_name/LV_name  -----卸载,不能在线缩减
  # e2fsck -f /dev/VG_name/LV_name  ----检查
  # resize2fs /dev/VG_name/LV_name #[MGT]  ----文件系统缩减
  # lvreduce  -L [-]#[MGT] /dev/VG_name/LV_name  ---逻辑卷缩减
  # mount /dev/VG_name/LV_name  -----挂回去


例子:把一个分区制成lv:

[root@localhost mnt]# fdisk -l /dev/sdb         ---sdb1为83
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      411647      204800   83  Linux
[root@localhost mnt]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@localhost mnt]# vgcreate VG_data /dev/sdb1
  Volume group "VG_data" successfully created
[root@localhost mnt]# lvcreate -L 100M -n vg_data_lvdata VG_data
  Logical volume "vg_data_lvdata" created.


此时/dev下面多了dm-0文件,VG_data文件夹及mapper文件夹:
vg_data_lvdata -> ../dm-0

[root@localhost mnt]# mkfs.ext4 /dev/VG_data/vg_data_lvdata 
....
[root@localhost /]# df -h
Filesystem                          Size  Used Avail Use% Mounted on
....
/dev/mapper/VG_data-vg_data_lvdata   93M  1.6M   85M   2% /mydata
[root@localhost mnt]# fdisk -l /dev/sdb        ---sdb1为83,不是8e
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      411647      204800   83  Linux
将一个磁盘加入上述的lv:
[root@localhost mydata]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@localhost mydata]# vgextend  VG_data /dev/sdc
  Volume group "VG_data" successfully extended  
[root@localhost mydata]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree 
  VG_data   2   1   0 wz--n- <2.19g <2.09g
[root@localhost mydata]# lvextend  -L 2.1G /dev/VG_data/vg_data_lvdata 
  Rounding size to boundary between physical extents: 2.10 GiB.
  Size of logical volume VG_data/vg_data_lvdata changed from 100.00 MiB (25 extents) to 2.10 GiB (538 extents).
  Logical volume VG_data/vg_data_lvdata successfully resized.
[root@localhost mydata]# resize2fs /dev/VG_data/vg_data_lvdata 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/VG_data/vg_data_lvdata is mounted on /mydata; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 17
The filesystem on /dev/VG_data/vg_data_lvdata is now 2203648 blocks long.
[root@localhost mydata]# df -h
Filesystem                          Size  Used Avail Use% Mounted on
...
/dev/mapper/VG_data-vg_data_lvdata  2.1G  2.9M  2.0G   1% /mydata


2.快照:snapshot


                                

  条件:要求在同一卷组(VG)中
     写时复制”(copy on write) 的实现方法(快照的一种实现方式):
        数据不变时--->快照提供另一个访问路径访, 当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta- data);
        原始卷上有写操作执行时---> snapshot跟踪原始卷块的改变,将要改变的数据在改变之前被拷贝到snapshot预留的空间里;
        文件系统和设备驱动之间增加了一个cow层:
             file I/0 —>filesystem — >CoW –> block I /O    
   
     命令:lvcreate -L #[MGT] -n snapshot_lv -s original_lv    要求绝对路径
        snapshot的大小考虑:  
          (1). 与业务有关,保证业务周期内能够容纳改变的数据;
          (2). 一旦记录满了,就被释放变为无效,一定要在snapshot的生命周期里,完成需要的作业任务。
          (3). 若大于原始卷,则生命周期几乎无限。
     创建的快照包含了源卷的文件系统,应该是自动默认了跟原卷一样的文件系统。

   [root@localhost mydata]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree 
  VG_data   2   1   0 wz--n- <2.19g 88.00m
[root@localhost mydata]# lvs
  LV             VG      Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  vg_data_lvdata VG_data -wi-ao---- 2.10g    
    [root@localhost mydata]# lvcreate  -L 80M -n ss_lvdata -s /dev/VG_data/vg_data_lvdata
    Logical volume "ss_lvdata" created.
    
    [root@localhost mydata]# lvdisplay
      --- Logical volume ---
  LV Path                /dev/VG_data/ss_lvdata
  LV Name                ss_lvdata
  VG Name                VG_data
  LV UUID                4ZpF80-c01c-QVjD-1Jen-tw61-1Yl0-Z4ysxr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-27 03:12:34 -0700
  LV snapshot status     active destination for vg_data_lvdata
  LV Status              available
  # open                 0
  LV Size                2.10 GiB
  Current LE             538
  COW-table size         80.00 MiB
  COW-table LE           20
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
在/mydata文件夹中复制17M一个文件,再查询ss_lvdata的使用情况:
   [root@localhost mydata]# ll -lh
total 34M
-rw-r--r--. 1 root root 17M Jul 27 03:01 kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm
-rw-r--r--. 1 root root 17M Jul 27 03:16 kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm.bak
drwx------. 2 root root 12K Jul 27 02:25 lost+found
-rw-r--r--. 1 root root   0 Jul 27 02:36 onefile.txt
[root@localhost mydata]# lvdisplay
      --- Logical volume ---
  LV Path                /dev/VG_data/ss_lvdata
  LV Name                ss_lvdata
  VG Name                VG_data
  LV UUID                4ZpF80-c01c-QVjD-1Jen-tw61-1Yl0-Z4ysxr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-27 03:12:34 -0700
  LV snapshot status     active destination for vg_data_lvdata
  LV Status              available
  # open                 0
  LV Size                2.10 GiB
  Current LE             538
  COW-table size         80.00 MiB
  COW-table LE           20
  Allocated to snapshot  21.08%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3


如何恢复快照:
    (1). 要先卸载原始卷,再使用--merge(合并)恢复(此时快照snapshot_lv再恢复后自动删除),再mount回去。
命令 lvconvert --merge /dev/VG_name/snapshot_lv

[root@localhost /]# lvconvert --merge /dev/VG_data/ss_lvdata 
  Merging of volume VG_data/ss_lvdata started.
  VG_data/vg_data_lvdata: Merged: 94.97%
  VG_data/vg_data_lvdata: Merged: 100.00%
[root@localhost /]# mount /dev/VG_data/vg_data_lvdata /mydata
[root@localhost mydata]# ls
    kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm  lost+found  onefile.txt

   (2). 创建了快照后,出现快照逻辑卷,可以挂载该卷进行直接拷贝(不能直接拷贝回原始卷,要先找第三方存放)
拷贝一个大于80M的文件到原始卷,建立一个80M的快照卷,进行测试:
  [root@localhost mydata]# ll -h
total 1.1G
-rw-r--r--. 1 root root   17M Jul 27 03:01 kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm
drwx------. 2 root root   12K Jul 27 02:25 lost+found
-rw-r--r--. 1 root root     0 Jul 27 02:36 onefile.txt
-rwxr--r--. 1 root root 1020M Jul 27 07:57 wls1036_generic.jar  
   
    [root@localhost mydata]# lvcreate -L 80M -n data_snap -s /dev/VG_data/vg_data_lvdata
    Logical volume "data_snap" created.
 
[root@localhost mydata]# ll /dev/VG_data/  ----出现了data_sanp卷
total 0
lrwxrwxrwx. 1 root root 7 Jul 27 08:07 data_snap -> ../dm-3
lrwxrwxrwx. 1 root root 7 Jul 27 08:07 vg_data_lvdata -> ../dm-0
    [root@localhost mapper]# ll
total 0
crw-------. 1 root root 10, 236 Jul 24 07:03 control
lrwxrwxrwx. 1 root root       7 Jul 27 08:30 VG_data-data_snap -> ../dm-3
lrwxrwxrwx. 1 root root       7 Jul 27 08:30 VG_data-data_snap-cow -> ../dm-2         ---有多个逻辑卷!
lrwxrwxrwx. 1 root root       7 Jul 27 08:51 VG_data-vg_data_lvdata -> ../dm-0
lrwxrwxrwx. 1 root root       7 Jul 27 08:30 VG_data-vg_data_lvdata-real -> ../dm-1

 

快照是一个逻辑卷,就可以挂载:
[root@localhost mydata]# mount /dev/VG_data/data_snap /mydata_snap/
[root@localhost mydata]# ls
kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm  onefile.txt
lost+found                                   wls1036_generic.jar
    
    [root@localhost mydata_snap]# df -h    ----原始卷和快照的一模一样
Filesystem                          Size  Used Avail Use% Mounted on
...
/dev/mapper/VG_data-vg_data_lvdata  2.1G  1.1G  953M  53% /mydata
/dev/mapper/VG_data-data_snap       2.1G  1.1G  953M  53% /mydata_snap
    [root@localhost mydata]# lvdisplay
    ....
--- Logical volume ---
  LV Path                /dev/VG_data/data_snap
  LV Name                data_snap
  VG Name                VG_data
  LV UUID                KzY5E2-N24d-ZkB1-8zwr-b4Yf-gQfx-A3UpOo
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-27 08:07:34 -0700
  LV snapshot status     active destination for vg_data_lvdata
  LV Status              available
  # open                 0
  LV Size                2.10 GiB
  Current LE             538
  COW-table size         80.00 MiB
  COW-table LE           20
  Allocated to snapshot  0.01%


将大文件删除,查询快照卷的状态:
[root@localhost mydata]# rm wls1036_generic.jar 
  rm: remove regular file ‘wls1036_generic.jar’? y
    [root@localhost mydata]# lvdisplay /dev/VG_data/data_snap 
  --- Logical volume ---
  LV Path                /dev/VG_data/data_snap
  LV Name                data_snap
  VG Name                VG_data
  LV UUID                A66CrY-uHMs-X5I7-xu5q-zsC3-ebnS-PgMdjC
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-27 08:30:55 -0700
  LV snapshot status     active destination for vg_data_lvdata   ----删除文件还是没问题的,因为没有写入
  LV Status              available                   
  # open                 1
  LV Size                2.10 GiB
  Current LE             538
  COW-table size         80.00 MiB
  COW-table LE           20
  Allocated to snapshot  0.47%                ----删除文件只是很少的变化,
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
      
    [root@localhost mydata_snap]# df -h          ----对比原始卷与快照的使用空间
Filesystem                          Size  Used Avail Use% Mounted on
....
/dev/mapper/VG_data-vg_data_lvdata  2.1G   20M  2.0G   1% /mydata
/dev/mapper/VG_data-data_snap       2.1G  1.1G  953M  53% /mydata_snap

    

现在的情况是,原始卷的文件被删除了(没有写入数据,只是删除了文件的元数据),但快照卷保留了被删除文件的元数据。


 [root@localhost mydata_snap]# dd if=/dev/VG_data/data_snap of=/dev/VG_data/vg_data_lvdata
dd: error reading ‘/dev/VG_data/data_snap’: Input/output error    ---爆了,这样拷贝不符合逻辑
335560+0 records in
335560+0 records out
171806720 bytes (172 MB) copied, 34.2349 s, 5.0 MB/s
[root@localhost mydata]# ll
ls: cannot access onefile.txt: No such file or directory
ls: cannot access wls1036_generic.jar: No such file or directory
total 17176
-rw-r--r--. 1 root root 17574084 Jul 27 03:01 kernel-devel-3.10.0-957.21.3.el7.x86_64.rpm
drwx------. 2 root root    12288 Jul 27 02:25 lost+found
-?????????? ? ?    ?           ?            ? onefile.txt              ---这文件扑街了!
-?????????? ? ?    ?           ?            ? wls1036_generic.jar
[root@localhost mydata]# lvdisplay /dev/VG_data/data_snap 
  --- Logical volume ---
  LV Path                /dev/VG_data/data_snap
  LV Name                data_snap
  VG Name                VG_data
  LV UUID                A66CrY-uHMs-X5I7-xu5q-zsC3-ebnS-PgMdjC
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-27 08:30:55 -0700
  LV snapshot status     INACTIVE destination for vg_data_lvdata      ---不可用的快照,
  LV Status              available
  # open                 1
  LV Size                2.10 GiB
  Current LE             538
  COW-table size         80.00 MiB
  COW-table LE           20
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

 这种情况下,只能先通过快照卷将原始卷的数据拷贝到其它位置(不在原始卷范围内),然后拷贝回原始卷才能进行恢复;
 lsremove /dev/VG_data/data_snap 失败,要先用lsof命令核查原始卷和快照卷使用的进程kill掉;
 另外,用第一种方法也不行,出现下面的信息,看来还是备份最可靠。
   [root@localhost ~]# lvconvert --merge /dev/VG_data/data_snap 
  Delaying merge since origin is open.
  Merging of snapshot VG_data/data_snap will occur on next activation of VG_data/lvdata.


 

  从snapshot的实现思路,反向操作,操作快照不操作原始卷,是不是可以实现制作lv模板(原始卷)来创建虚拟机呢? 只要快照可以挂载和读写。
        (1).虚拟机安装在一个lvm上,然后暂停虚拟机(原始卷成为模板);
        (2).做一个可读写的快照;
        (3).挂载快照卷启动并配置,在其上进行操作,生成一个新的虚拟机;
    重复2~3可以创建多个虚拟机。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69934036/viewspace-2652012/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-06-22

  • 博文量
    7
  • 访问量
    6478