zoukankan      html  css  js  c++  java
  • lvm snapshot(lvm 快照)

    lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据,所以snapshot的创建特别快。原始卷写入数据snapshot记录哪些数据发生变化,并备份旧数据,当恢复的时候就可以把旧数据恢复到对应位置。

    介绍下LVM管理的相关命令

    • pvcreate ,pvmove ,pvremove ,pvscan ,pvdisplay
    • vgcreate ,vgremove ,vgscan ,vgdisplay ,vgreduce ,vgextend
    • lvcreate ,lvmove ,lvremove ,lvscan ,lvdisplay ,lvreduce ,lvextend ,lvresize ,lvchk

    LVM备份恢复示例:

    现有一个Disk /dev/sdb: 17.2 GB,先将它划分为两个分区,一个作为源分区做成lvm,一个作为备份数据保存点

    [root@localhost ~]# fdisk -l /dev/sdb

    Disk /dev/sdb: 17.2 GB, 17179869184 bytes, 33554432 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcaf172f9

       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048    16779263     8388608   83  Linux
    /dev/sdb2        16779264    33554431     8387584   83  Linux

    1、创建lvm

    [root@localhost ~]# pvcreate /dev/sdb1                         整个磁盘17G
    [root@localhost ~]# vgcreate vgtest /dev/sdb1
    [root@localhost ~]# lvcreate -L 7G -n srcdata vgtest
    [root@localhost ~]# vgextend vgtest /dev/sdb2         把另一个分区也划入vgtest卷组
    [root@localhost ~]# mkfs -t ext3 /dev/vgtest/srcdata
    [root@localhost ~]# mount /dev/vgtest/srcdata /mymnt/mnt

    2、模拟初始数据

    [root@localhost ~]# tar zcf /mymnt/mnt/backup.gz /etc/*
    [root@localhost ~]# echo 'hello world'> test.txt

    当前lvm下已经有两个文件了,模拟磁盘备份前状态

    3、创建快照

    使用一个10G的大小对7G的lv创建快照有如下提示

    [root@localhost ~]# lvcreate -L +10G -n snapsrc -s /dev/vgtest/srcdata (-s表示创建快照)
      Reducing COW size 10.00 GiB down to maximum usable size 7.03 GiB.
      Logical volume "snapsrc" created

    查看,发现快照卷已经创建出来了,大小是7G
    [root@localhost ~]# lvdisplay

    --- Logical volume ---
    LV Path                /dev/vgtest/snapsrc
    LV Name                snapsrc
    VG Name                vgtest
    LV UUID                ZIx3hb-80iW-R2Nf-XET6-9wfA-MG8K-6A3bRe
    LV Write Access        read/write
    LV Creation host, time localhost.localdomain, 2016-04-20 10:37:14 +0800
    LV snapshot status     active destination for srcdata
    LV Status              available
    # open                 0
    LV Size                7.00 GiB
    Current LE             1792
    COW-table size         7.03 GiB
    COW-table LE           1800
    Allocated to snapshot  0.00%                  这个是快照lv特有的,显示用了多少空间
    Snapshot chunk size    4.00 KiB
    Segments               1
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     8192
    Block device           253:3

    随着原始卷写入数据,快照卷的使用率也会增加。测试下往原始卷写入30M数据,使用率变成0.42%

    [root@localhost ~]# cd /mymnt/mnt/
    [root@localhost mnt]# dd if=/dev/zero of=./addfile bs=1M count=30
    30+0 records in
    30+0 records out
    31457280 bytes (31 MB) copied, 0.0974659 s, 323 MB/s
    [root@localhost mnt]# lvdisplay | grep %
      Allocated to snapshot  0.42%

    再新增一个文件[root@localhost mnt]# ls -lr /etc/* >b.txt,此时在执行快照之后原始卷新增了两个文件。此时如果想恢复之前的状态,要先卸载原始卷,再使用--merge(合并)恢复。

    [root@localhost mymnt]# umount mnt
    [root@localhost mymnt]# lvconvert --merge /dev/vgtest/snmpsrc
      Merging of volume snmpsrc started.
      srcdata: Merged: 100.0%
      Merge of snapshot into logical volume srcdata has finished.
      Logical volume "snmpsrc" successfully removed
    [root@localhost mymnt]# mount /dev/vgtest/srcdata mnt

    至此原始卷就恢复到备份前的状态了。


    1、快照还有一种恢复方法就是,创建快照后直接挂载,把其中数据复制备份

    [root@localhost mnt]# lvcreate -L +7G -n backuplv -s /dev/vgtest/srcdata
    [root@localhost mnt]# mount /dev/vgtest/backuplv /mymnt/dstmnt/
    [root@localhost mymnt]# tar -zcf dstmnt/dstmnt.tar.gz /mymnt/dstmnt/*     挂载后使用tar打包备份

    备份好之后卸载快照卷,并lvremove 移除快照卷,以节省空间。

    2、另外使用dump也可以实现备份恢复数据

    [root@localhost ~]# dump -0u /tmp/data.bak.dump /snap
    [root@localhost ~]#  mkdir /data
    [root@localhost ~]# cd /data/
    [root@localhost ata]#  restore -rf /tmp/data.bak.dump

    3、 也可以使用dd将快照卷备份,然后直接替换还原

    dd if=/dev/vgtest/srcdata of=/backupsrcdata.dd  备份
    dd if=/backupbackupsrcdata.dd of=/dev/vgtest/srcdata  还原

  • 相关阅读:
    C#的访问修饰符
    C#的数据类型
    iOS--小结系列八(继续)
    ios--小结系列八 控制器管理
    ios--小结系列八 程序启动原理
    ios--小结系列七 通知机制
    ios--小结系列六继续-UITableViewCell
    ios--小结系列六
    ios--小结系列五
    ios--小结系列四
  • 原文地址:https://www.cnblogs.com/otherside/p/5415998.html
Copyright © 2011-2022 走看看