使用 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) – https://benjr.tw/7364
- LVM 工具 – https://benjr.tw/7362
- LVM mapping – https://benjr.tw/7358
4 thoughts on “LVM – snapshot”