1,532 瀏覽數

RHEL5 – LVM Snapshots

什麼是 snapshot ,基本上 snapshot 照字面的意思是快照,就如同它的意思它幫我們的 LV(Logical Volume) 照相.它可以幫 LV(Logical Volume) 記錄下當時 LV(Logical Volume) 的資料,但是它不是做備份,snapshot 採用的方式叫做寫時複寫(copy on write),當 LV(logical Volume) 產生一個 snapshot 時.LV(Logical Volume) 和 snapshot 同時都是指向同一筆資料,一開始 LV(Logical Volume) 和 snapshot 都是指向同一個區塊的資料,所以 snapshot 一開始自己磁區是空的.只有當 LV(Logical Volume) 的資料備有寫入會是修改時,才會將資料原始資料複製到 snapshot ,之後才將 LV(logical Volume) 的資料做寫入或是修改.
在使用 snapshot 需要模組 dm-snapshot.

[root@benjr ~]# modprobe dm-snapshot

snapshot LV 建立地點是和你要備份資料同一個 LV,建議空間為原資料 LV 大小的 15-20 % 
snapshot01
snapshot 很適合用在資料庫備份先行將資料做 snapshot(快照),之後只要針對 snapshot 磁區做備份即可.原先的資料還是可以進行讀寫不會受到備份的影響,不需要在進行備份時還要將資料庫所在的目錄先行離線.LVM 1 sanpshot 只能夠唯讀不過在 LVM2 的 snapshot 就可以讀寫了.

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

[root@benjr ~]# ls /database
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
[root@benjr ~]# 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@benjr ~]# rm /database/a.test.file
[root@benjr ~]# 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/vg1/snapshot 磁區.這時的 snapshot 也開始使用到磁區的空間了.
note:
當我們移除 a.test.file 時,相對應的 inode 也跟著移除. 這時系統會將 a.test.fil 所在的 chunk(64KB) 標記成 'dirty' 並將他複製一份到 'snapshot' volume. 這邊要提的是 snapshot 並不是以檔案為單位,而是以 PE(chunks,blocks) 為標記單位.有一點要注意當 snapshot 的空間用完時,此時的 snapshot也失去作用(deactivated).

發表迴響