使用dmsetup命令生成snapshot ( by quqi99 )

quqi99發表於2013-01-31

                     使用dmsetup命令生成snapshot 


轉載自, http://blog.sina.com.cn/s/blog_4d3833cf0100n68c.html


可以使用如下方法建立snapshottarget的邏輯裝置:
1.   分割槽並通知系統確認
o       #fdisk /dev/sda
o       分別建立/dev/sda7/dev/sda8/dev/sda9 分割槽均為1G空間
o       #partprobe
o       其中/dev/sda7/dev/sda8用來製作映象目標linear target邏輯裝置,/dev/sda9用來作為COW裝置。
2.   編寫建立/dev/mapper/kevin_linear_dev ,/dev/mapper/kevin_snapshot_base_dev/dev/mapper/kevin_snapshot_dev三個裝置的指令碼
o   /dev/mapper/kevin_linear_dev 是原始目標裝置
o   /dev/mapper/kevin_snapshot_base_devsnapshot所需要的中間基礎裝置,後面會說到它與/dev/mapper/kevin_linear_dev的區別
o   /dev/mapper/kevin_snapshot_dev是建立出的快照裝置
o   將如下程式碼寫入並執行
o   #vi kevin_linear_dev.sh
#!/bin/bash
size1=$(blockdev --getsize $1)
size2=$(blockdev --getsize $2 )
echo -e "0 $size1 linear $1 0\n$size1 $size2linear $2 0" | dmsetup create $3
 
o   #vikevin_snapshot_base_dev.sh
#!/bin/bash
dmsetup table $1 | dmsetup create $2
 
o   #vikevin_snapshot_dev.sh
size=$(blockdev --getsize $1)
CHUCK_SIZE=$3
dd if=/dev/zero of=$2 bs=512count=$CHUCK_SIZE
echo 0 $size snapshot $1 $2 p $3 | dmsetup create$4
3.   建立/dev/mapper/kevin_linear_dev裝置併為其建立檔案系統放入檔案
o       #./kevin_linear_dev.sh /dev/sda7 /dev/sda8kevin_linear_dev
o       #mkfs.ext3/dev/mapper/kevin_linear_dev
o       #mkdir /mnt/kevin_linear_dev
o       #mount /dev/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o       #cp /var/log/message/mnt/kevin_linear_dev/
4.   建立/dev/mapper/kevin_snapshot_base_dev裝置,並檢測。
o       #./kevin_snapshot_base_dev.sh kevin_linear_devkevin_snapshot_base_dev
o       #mkdir /mnt/kevin_snapshot_base_dev
o       #mount /dev/mapper/kevin_snapshot_base_dev/mnt/kevin_snapshot_base_dev
o       #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o       你會發現/mnt/kevin_snapshot_base_dev目錄中的檔案和/mnt/kevin_linear_dev目錄中的檔案一致
o       #cp /etc/resolv.conf/mnt/kevin_linear_dev
o       #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o       即時修改後/mnt/kevin_snapshot_base_dev目錄中的檔案和 /mnt/kevin_linear_dev 目錄中的檔案就不同步了!
5.   同步/dev/mapper/kevin_linear_dev/dev/mapper/kevin_snapshot_base_dev裝置
o       # umount /mnt/kevin_linear_dev
o       # umount /mnt/kevin_snapshot_base_dev
o       解除安裝裝置的掛接目錄
o       # dmsetup table kevin_linear_dev | dmsetup reloadkevin_snapshot_base_dev
o       # dmsetup resumekevin_snapshot_base_dev
o       #mount /dev/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o       #mount /dev/mapper/kevin_snapshot_base_dev/mnt/kevin_snapshot_base_dev
o       #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o       經過reloadrusume後再次掛接裝置就保持了同步
6.   建立/dev/mapper/kevin_snapshot_dev裝置並掛接
o       #umount /mnt/kevin_snapshot_base_dev
o       #umount /mnt/kevin_linear_dev
o       #dmsetup suspend kevin_linear_dev
o       為了保證資料完整性保證目標裝置沒有I/O操作,需要先將目標裝置掛起
o       #./kevin_snapshot_dev.sh/dev/mapper/kevin_snapshot_base_dev /dev/sda9 8 \kevin_snapshot_dev
o       #dmsetup resume kevin_linear_dev
o       恢復kevin_linear-dev裝置後裝置就可以正常運了
o       #mkdir /mnt/kevin_snapshot_dev
o       #mount /dev/mapper/kevin_snapshot_dev/mnt/kevin_snapshot_dev
7.   測試和同步快照
o       #mount /mnt/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o       #diff -qur /mnt/kevin_linear_dev/mnt/kevin_snapshot_dev
o       在沒有更改任何檔案的情況下快照和資料來源是一致的
o       #cp /etc/rc.local/mnt/kevin_snapshot_dev
o       #diff -qur /mnt/kevin_linear_dev/mnt/kevin_snapshot_dev
o       當快照被修改後,寫入或修改的資料將存入COW裝置,而資料來源保持不變
o       #mount /dev/mapper/kevin_snapshot_base-dev/mnt/kevin_snapshot-dev
o       這裡會報錯,因為/dev/mapper/kevin_snapshot_base_dev已經被加入 /dev/mapper/kevin_snapshot_dev,不可以直接使用了。如果想檢視和匯出資料來源,就需要用到下一節的snapshot-origin裝置
o       snapshot的好處是快速建立備份和資料修改分支,同時如果資料來源是直讀裝置(例如CD/DVD),我們需要暫時修改其少量資料時snapshot也非常有效。
8.   當我們不在需要使用以上三個裝置後,我們需要解除安裝和刪除這個裝置
o       # dmsetup remove kevin_snapshot_dev
o       # dmsetup remore kevin_linear_dev
o       # dmsetup remorekevin_snapshot_base_dev

相關文章