1,133 瀏覽數

LVM-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

LVM(Logical Volume Manager)
LVM-工具
LVM-mapping

4 個網友的想法 “LVM-snapshot

  1. 自動參照通知: 檔案備份 – Benjr.tw

  2. 自動參照通知: LVM(Logical Volume Manager) | Benjr.tw

  3. 自動參照通知: LVM-工具 | Benjr.tw

  4. 自動參照通知: LVM-mapping | Benjr.tw

發表迴響