Was this page helpful?

Snapshot 快照

    內容表格
    沒有標頭

    使用 LVM 的 Snapshots 功能來進行備份

     

    Step 0:前言
    Step 1:建立 snapshot LV
    # lvcreate -s -L 3G -n sanpshot /dev/volume00/LVOL1 
    Step 2:掛載你的 snapshot 
    #mount -o ro /dev/volume00/snapshot /backup
    Step 3:Snapshot 的原理
    Step 4:移除 snapshot
    # lvremove /dev/volume00/snapshot
     
    Step 0:前言
    一般在進行備份時候我們需要將資料庫所在的目錄先行離線,這樣才能確定資料的完整性.但是 LVM 提供了一項特別的功能.能讓我們在進行備份時不需先將資料庫的目錄離線.這就是sanpshots.sanpshots的主要功能就是能夠將你所需備份的資料變成 read-only ,就像是照片一樣.但原先的資料卻不會受到影響,還是可以進行讀寫.
     
    Step 1:建立 snapshot LV
    snapshot LV 建立地點是和你要備份資料同一個 LV,建議空間為原資料 LV 大小的 15-20 %.假設我要備份上一個例子 /dev/volume00/LVOL1 大小 15 GB的資料,那我要建立大小為 3G 的 snapshot 的空間.首先將你的資料夾掛載起來,最好先將 LV 掛載成 read only 的方式.以防止有人此時使用此 LV.

    [root@benjr ~]# mount -o ro /dev/volume00/LVOL1 /databse

    如果你的 /dev/volume00/LVOL1 已經掛載在某一個目錄下,你可以使用

    [root@benjr ~]# mount -o remount,ro /database

     

    [root@benjr ~]# lvcreate -s -L 3G -n sanpshot /dev/volume00/LVOL1
    lvcreate -- WARNING: the snapshot must be disabled if it gets full
    lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/volume00/sanpshot"
    lvcreate -- doing automatic backup of "volume00"
    lvcreate -- logical volume "/dev/volume00/snapshot" successfully created

    不要忘記將原先的 LV 恢復成 Read/Write 模式.

    [root@benjr ~]# mount -o remount,rw /database

    Step 2:掛載你的 snapshot 
    因為資料是要備份的,所以掛載成 read only 的即可.

    [root@benjr ~]# mkdir /backup
    [root@benjr ~]# mount -o ro /dev/volume00/snapshot /backup

    接下來就可以開始備份資料了

    [root@benjr ~]# tar -cf /dev/st0 /backup

    Step 3:Snapshot 的原理
    從剛才的步驟可以發現,snapshot也是一個磁區(partion)但是一開始他並不佔有任何空間. 
    snapshot的作法是當原有的磁區 /dev/volume00/LVOL1 資料有變動(新增,移除,變更)時,他會複製一份原始的檔案到  /dev/volume00/snapshot 磁區,然後才會讓更新的資料寫到原本的磁區.看一下下面的實驗吧!!

    [root@unsve ~]# ls /database
    [root@unsve ~]# ls /backup
    total 13
    -rw-r--r--    1 root     root            1 Apr  2 00:28 a.test.file
    drwxr-xr-x    2 root     root        12288 Apr  2 00:28 lost+found

    可以到無論是 /database 或是 /backup的資料都是一樣,現在移除 /database/a.test.file 檔案.

    [root@unsve ~]# rm /database/a.test.file
    [root@unsve ~]# ls /backup
    total 13
    -rw-r--r--    1 root     root            1 Apr  2 00:28 a.test.file
    drwxr-xr-x    2 root     root        12288 Apr  2 00:28 lost+found

    你還是可以發現檔案 a.test.file 還是存在於 /dev/volume00/snapshot 磁區.這時的 snapshot 也開始使用到磁區的空間了.
    note:
    當我們移除 a.test.file 時,相對應的 inode 也跟著移除. 這時系統會將 a.test.fil 所在的 chunk(64KB) 標記成 'dirty' 並將他複製一份到 'snapshot' volume. 
    這邊要提的是 snapshot 並不是以檔案為單位,而是以 PE(chunks,blocks) 為標記單位.有一點要注意當 snapshot 的空間用完時,此時的 snapshot也失去作用(deactivated).
     
    Step 4:移除 snapshot
    備份完就可以將 snapshot 移除

    [root@benjr ~]# umount /backup
    [root@benjr ~]# lvremove /dev/volume00/snapshot
    lvremove -- do you really want to remove "/dev/volume00/snapshot"? [y/n]: y
    lvremove -- doing automatic backup of volume group "volume00"
    lvremove -- logical volume "/dev/volume00/snapshot" successfully removed
    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core