久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

LVM快照(snapshot)備份

 農(nóng)夫子oice 2010-12-02

[推薦] LVM快照(snapshot)備份

-
Logical Volume Manager (LVM)提供了對任意一個Logical Volume(LV)做“快照”(snapshot)的功能,,以此來獲得一個分區(qū)的狀態(tài)一致性備份,。

在某一個狀態(tài)下做備份的時候,可能有應(yīng)用正在訪問某一個文件或者數(shù)據(jù)庫,,這就是使得備份的時候文件處于一個狀態(tài),,而備份完后,文件卻處于另外一個狀態(tài),,從而造成備份的非一致性,,這種狀態(tài)恢復(fù)數(shù)據(jù)庫數(shù)據(jù)幾乎不會成功。

狀態(tài)的解決辦法是將其分區(qū)掛載為只讀,,然后通過數(shù)據(jù)庫的表級別鎖定(table-level write locks)甚至停止數(shù)據(jù)庫來備份數(shù)據(jù),。所有這些方法無意嚴重影響了服務(wù)的可用性。使用LVM snapshot既可以獲得一致性備份,,又不會影響服務(wù)器的可用性,。

要提醒一點是,,snapshot這種方法僅對LVM有效,對于非LVM文件系統(tǒng)無效,。

snapshot的實現(xiàn)有多種方式(參考文章最后的連接),,這里說說LVM中snapshot的“寫時復(fù)制”(copy on write) 的實現(xiàn)方法。

當一個snapshot創(chuàng)建的時候,,僅拷貝原始卷里數(shù)據(jù)的元數(shù)據(jù)(meta- data),。創(chuàng)建的時候,并不會有數(shù)據(jù)的物理拷貝,,因此snapshot的創(chuàng)建幾乎是實時的,,當原始卷上有寫操作執(zhí)行時,snapshot跟蹤原始卷塊的改變,,這個時候原始卷上將要改變的數(shù)據(jù)在改變之前被拷貝到snapshot預(yù)留的空間里,,因此這個原理的實現(xiàn)叫做寫時復(fù)制(copy-on- write)。

在寫操作寫入塊之前,,CoW將原始數(shù)據(jù)移動到snapshot空間里,,這樣就保證了所有的數(shù)據(jù)在snapshot創(chuàng)建時保持一致。而對于snapshot的讀操作,,如果是讀取數(shù)據(jù)塊是沒有修改過的,,那么會將讀操作直接重定向到原始卷上,如果是要讀取已經(jīng)修改過的塊,,那么就讀取拷貝到snapshot中的塊,。

這樣,通常的文件I/0流程有一個改變,,那就是在文件系統(tǒng)和設(shè)備驅(qū)動之間增加了一個cow層,,變成了下面這個樣子:
file I/0 —> filesystem — >CoW –> block I /O

下面的圖也許可以比較容易了解CoW的原理:

dmswbz7_287cxgkkzhf_b.gif

采取CoW實現(xiàn)方式時,snapshot的大小并不需要和原始卷一樣大,,其大小僅僅只需要考慮兩個方面:從shapshot創(chuàng)建到釋放這段時間內(nèi),,估計塊的改變量有多大;數(shù)據(jù)更新的頻率。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,,那么這個snapshot立刻被釋放,,從而無法使用,從而導(dǎo)致這個snapshot無效,。所以,,非常重要的一點,一定要在snapshot的生命周期里,,做完你需要做得事情,。當然,如果你的snapshot大小和原始卷一樣大,,甚至還要大,,那它的壽命就是“與天齊壽”了,。

snapshot其實除了備份以外,還有很多其他用途:

1)虛擬化

在使用 LVM2 時,,快照可以不是只讀的,。這意味著,在創(chuàng)建快照之后,, 可以像常規(guī)塊設(shè)備一樣掛載和讀寫快照,。

因為流行的虛擬化系統(tǒng)(比如 Xen、VMWare,、Qemu 和 KVM)可以將塊設(shè)備用作 guest 映像,,所以可以創(chuàng)建這些映像的完整拷貝,,并根據(jù)需要使用它們,,它們就像是內(nèi)存占用量很低的虛擬機,。這樣做的好處是部署迅速(創(chuàng)建快照的時間常常不超過幾秒)和節(jié)省空間(guest 共享原映像的大多數(shù)數(shù)據(jù)),。

設(shè)置的步驟如下:

1. 為原映像創(chuàng)建一個邏輯卷。
2. 使用這個 LV 作為磁盤映像安裝 guest 虛擬機,。
3. 暫停這個虛擬機,。內(nèi)存映像可以是一個常規(guī)文件,,所有其他快照都放在里面,。
4. 為原 LV 創(chuàng)建一個可讀寫的快照,。
5. 使用快照卷作為磁盤映像生成一個新的虛擬機。如果需要的話,,要修改網(wǎng)絡(luò)/控制臺設(shè)置,。
6. 登錄已經(jīng)創(chuàng)建的虛擬機,修改網(wǎng)絡(luò)設(shè)置/主機名,。

完成這些步驟之后,, 就可以讓用戶訪問剛創(chuàng)建的虛擬機了,。如果需要另一個虛擬機,,那么只需重復(fù)步驟 4 到 6(所以不需要重新安裝虛擬機)。還可以用一個腳本自動執(zhí)行這些步驟,。

在使用完虛擬機之后,, 可以停止虛擬機并銷毀快照。

2)數(shù)據(jù)回溯

在一個生產(chǎn)系統(tǒng)上要執(zhí)行一些操作,,需要慎之又慎,,即便在模擬環(huán)境中做過很多次測試都沒有問題,但是并不能保證在生產(chǎn)環(huán)境就一定成功,,于是這個時候,,我們把系統(tǒng)做一個snapshot,這樣一旦新操作出現(xiàn)問題,,立刻回溯到創(chuàng)建 snapshot的時間點,,當然你也可以認為這是一個備份的擴展使用,。

最后,我們舉一些例子,,加深對snapshot的理解,。

a) 創(chuàng)建一個20M的snapshot,執(zhí)行一些操作看看CoW的動作,。

我們舉一個例子來說明如何創(chuàng)建和使用snapshot,。我們假定創(chuàng)建一個20M的snapshot,這就意味著在snapshot生命周期里,,你僅能有20M的數(shù)據(jù)量改變,。

下面的命令,為/dev/vg/lvdata創(chuàng)建/dev/vg/lvdata-sp

# lvcreate -L20M -s -n lvdata-sp /dev/vg/lvdata
Logical volume “lvdata-sp” created
其中l(wèi)vdata大小為20MB,。

# lvdisplay /dev/vg/lvdata-sp

— Logical volume —

LV Name /dev/vg/lvdata-sp
VG Name vg
LV UUID Yl0fQU-Ve9T-lfmp-xJPq-Uwrd-RVVM-lDDVz0
LV Write Access read/write
LV snapshot status active destination for /dev/vg/lvdata
LV Status available
# open 1
LV Size 200.00 MB
Current LE 50
COW-table size 20.00 MB
COW-table LE 5
Allocated to snapshot 0.27%
Snapshot chunk size 8.00 KB
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0

上面的 Allocated to snapshot 0.27%是我們關(guān)心的,,表示目前還有99.73%的空間沒有使用。

我們嘗試在lvdata創(chuàng)建一個10M的文件,,再看看這個參數(shù)值,。

# mount /dev/vg/lvdata /media/lvdata/
# dd if=/dev/hda of=/media/lvdata/10M bs=1M count=10

10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.272393 seconds, 38.5 MB/s

# lvdisplay /dev/vg/lvdata-sp

— Logical volume —

LV Name /dev/vg/lvdata-sp
VG Name vg
LV UUID Yl0fQU-Ve9T-lfmp-xJPq-Uwrd-RVVM-lDDVz0
LV Write Access read/write
LV snapshot status active destination for /dev/vg/lvdata
LV Status available
# open 0
LV Size 200.00 MB
Current LE 50
COW-table size 20.00 MB
COW-table LE 5
Allocated to snapshot 51.02%
Snapshot chunk size 8.00 KB
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0

”Allocated to snapshot 51.02%“,符合我們的預(yù)期。此時snapshot還剩下大概10M不到的空間了,,如果我么再在lvdata上創(chuàng)建一個12M的文件,,會發(fā)生什么呢?

#dd if=/dev/hda of=/media/lvdata/12M bs=1M count=12

12+0 records in
12+0 records out
12582912 bytes (13 MB) copied, 0.288311 seconds, 43.6 MB/s
device-mapper: snapshots: Invalidating snapshot: Unable to allocate exception.

創(chuàng)建文件的過程中,,一個報錯出現(xiàn)了,,snapshot已經(jīng)無效。我們看看snapshot卷的詳細信息,。

# lvdisplay /dev/vg/lvdata-sp
/dev/vg/lvdata-sp: read failed after 0 of 4096 at 0: 輸入/輸出錯誤

— Logical volume —

LV Name /dev/vg/lvdata-sp
VG Name vg
LV UUID Yl0fQU-Ve9T-lfmp-xJPq-Uwrd-RVVM-lDDVz0
LV Write Access read/write
LV snapshot status INACTIVE destination for /dev/vg/lvdata
LV Status available
# open 0
LV Size 200.00 MB
Current LE 50
COW-table size 20.00 MB
COW-table LE 5
Snapshot chunk size 8.00 KB
Segments 1
Allocation inherit
Read ahead sectors 0

整個snapshot卷已經(jīng)出現(xiàn)I/0錯誤了,,而且snapshot的狀態(tài)也是“INACTIVE”。

是否能掛載上來呢,?

# mount /dev/vg/lvdata-sp /media/snapshot/
mount: you must specify the filesystem type

#dmesg

Buffer I/O error on device dm-0, logical block 0
Buffer I/O error on device dm-0, logical block 1
Buffer I/O error on device dm-0, logical block 2
Buffer I/O error on device dm-0, logical block 3
Buffer I/O error on device dm-0, logical block 4
Buffer I/O error on device dm-0, logical block 5
Buffer I/O error on device dm-0, logical block 6
Buffer I/O error on device dm-0, logical block 7
Buffer I/O error on device dm-0, logical block 8
Buffer I/O error on device dm-0, logical block 9
hfs: unable to find HFS+ superblock

從dmesg的錯誤信息來看,,超級塊的信息也丟失了

嘗試激活一下lvdata-sp

# lvchange -ay /dev/vg/lvdata-sp

/dev/vg/lvdata-sp: read failed after 0 of 4096 at 0: 輸入/輸出錯誤

恩,這個snapshot已經(jīng)被釋放了,,所以剩下要做得事情就是刪除它,。

# lvremove /dev/vg/lvdata-sp

/dev/vg/lvdata-sp: read failed after 0 of 4096 at 0: 輸入/輸出錯誤
Do you really want to remove active logical volume “lvdata-sp”? [y/n]: y
Logical volume “lvdata-sp” successfully removed

b)利用snapshot在線備份MySQL數(shù)據(jù)庫(或者其他數(shù)據(jù)庫)

流程是先做一個flush操作,并鎖定表,,然后創(chuàng)建snapshot,,然后解鎖,然后備份數(shù)據(jù),,最后釋放snapshot,。這樣,MySQL幾乎不會中斷其運行,。

FLUSH TABLES WITH READ LOCK;
! lvcreate –size 100m –snapshot –name snap /dev/VolGroup01/LogVol00
UNLOCK TABLES;

接著做一些備份的工作

mkdir /snap
mount /dev/VolGroup01/snap /snap
# This is where you back up whatever you need from /snap, e.g. rsync(1)
umount /snap
lvremove /dev/VolGroup01/snap
rmdir /snap

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多