RHEL 6 snapshotスナップショットの原理と実験
RHEL 6 snapshotスナップショットの原理と実験
LVMはlvにスナップショット「snapshot」バックアップ機能を提供し、この機能もLVMにのみ有効です。snapshotにはいろいろな実現方法がありますが、ここでは「書くときにCOWをコピーする」だけです。乳牛ではありませんよ。「Copy-ON-Write」です。
snapshotが作成されると、元のボリュームのソースデータのみがコピーされます。これは物理的なデータコピーではありません。そのため、snapshotの作成は特に速く、元のボリュームのデータが書き込まれている場合、バックアップボリュームは元のボリュームのどのデータが変化したかを記録し始め、元のボリュームの新しいデータが古いデータを上書きすると、古いデータをsnapshotの予約空間にコピーし、バックアップデータの役割を果たします。すべてのデータとバックアップボリュームを作成する前のデータの一貫性が保証されます。
一方、snapshotの読み出し操作では、読み出しデータブロックが変更されていない場合、読み出し操作は元のボリュームに直接リダイレクトされ、変更されたブロックを読み出す場合は、snapshotにコピーされたブロックが読み出されます。したがって、元のボリュームが破壊された後もsnapshotでバックアップしたデータを復元することができます。
51 CTO【asramさん】の説明を参考にしましょう。
【ミラー分離とは、ミラーボリュームが一瞬だけ分割された状態を維持し、データの書き込みを継続しないようにするためのものである。分割後、主ボリュームが行ったすべての書き込みIO動作は、bitmapとして記録される。bitmapは、ボリューム上の1つのブロック(セクタ、または複数のセクタからなる論理ブロック)を表すビットマップファイルである,このブロックがミラー分離後にデータに書き込まれると,プログラムはbitmapファイルに対応するビットを0から1に変える.バックアップが完了すると、ミラー関係をリカバリできます。プライマリ・ボリュームとミラー・ボリュームのデータが一致しないため、同期を再実行する必要があります。プログラムはbitmapのすべての1のビットを検索して、ボリュームの上のブロックに対応して、それからこれらのブロックの上のデータを、ミラーボリュームに同期して、それによってリアルタイムのミラー関係を回復します。
変更ブロック
スナップショットの作成に成功すると、ソースとスナップショットは同じ物理データのコピーを共有し、データが書き込みされるまで、ソース上の古いデータまたは新しいデータが新しいストレージスペースに書き込まれます。ブロックの変化およびレプリケーション情報を記録および追跡するためには、実際のコピーデータの位置を決定し、ソースからデータを取得するかターゲットから取得するかを決定するビットマップ(bitmap)が必要である。
コンカレント(concurrent)
変更ブロックとよく似ていますが、常に物理的にデータをコピーします。インスタントコピーが実行されると、データはコピーされません。代わりに、ビットマップを作成してデータのレプリケーションを記録し、バックグラウンドで実際のデータ物理レプリケーションを行います。
書き込み時にスナップショットをコピーすると、スナップショットの時点以降、物理データのコピーは発生せず、元のデータの物理的な場所のメタデータのみがコピーされます。そのため、スナップショットの作成は非常に速く、瞬時に完了することができます。その後、スナップショットコピーは、元のボリュームのデータ変化(すなわち、元のボリューム書き込み操作)を追跡し、元のボリュームデータブロックが書き込み操作されると、元のボリュームデータブロックを読み出してスナップショットボリュームに書き込み、新しいデータブロックで元のボリュームを上書きします。これにより、スナップショットボリュームにアクセスするデータは書き込み操作前のままであり、バックアップデータの一貫性を保証できます。
snapshotの特徴をチェックしましょう。
COW実装の場合,snapshotの大きさは元のボリュームと同じ大きさである必要はない.では、どのくらいの大きさに設定されていますか?第一に、元のボリュームデータの変更サイズ範囲に基づいて設定する。第二に、元のボリュームデータの更新頻度に基づいて決定する。snapshotの空間に元のボリューム変換の情報がいっぱい記録されると、このsnapshotは使用できません。もちろん、snapshotのサイズが元のボリュームと同じ大きさで、さらに大きい場合は、snapshotバックアップは絶対にクラッシュしません。
それでは始めましょう.
一、新しいlvパーティションを作成し、システムをインストールします(インストールしなくてもいいですが、実はここではバックアップするデータボリュームであることを説明するだけです).
----->とりあえずvg空きスペースをチェックしておきましょう
[root@desktop21 /]# vgs
VG #PV #LV #SN Attr VSize VFree
vol0 2 4 1 wz--n- 55.22g 26.22g
----->まだ26.22 Gがあって、1つの3 Gのlvを建ててシステムをインストールしましょう、lv名称syslv
[root@desktop21 /]# lvcreate -L 3G -n syslv vol0
Logical volume "syslv" created
[root@desktop21 /]# lvdisplay /dev/vol0/syslv
--- Logical volume ---
LV Name /dev/vol0/syslv
VG Name vol0
LV UUID xQXHqK-N3Oj-y9Z1-TBU6-hAsI-ek3V-PkmVmL
LV Write Access read/write
LV Status available
# open 0
LV Size 3.00 GiB (lv 3G)
Current LE 96
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:6
----->ok、作成に成功しました.これからlinuxの簡易版をインストールしましょう.私は図を描かないで、自分でテストする自分でやってみます.
【注意:このlvは、インストールシステムとして使用すると必ずフォーマットできなくなります.ハードディスクとして使用していますよ.誰がハードディスクをシステムにフォーマットしたのを見たことがありますか.認識できないハードディスクに警告します~】
.
.
.
二、snapshotの作成
やっと組み立てました.snapshotバックアップを作成しましょう.lv作成方法と差が少ないので、パラメータ-sを追加します.
[root@desktop21 /]# lvcreate -s -n snapsyslv -L 50M /dev/vol0/syslv
Rounding up size to full physical extent 64.00 MiB
Logical volume "snapsyslv" created
[root@desktop21 /]# lvdisplay /dev/vol0/snapsyslv
--- Logical volume ---
LV Name /dev/vol0/snapsyslv
VG Name vol0
LV UUID snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r
LV Write Access read/write
LV snapshot status active destination for /dev/vol0/syslv
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 96
COW-table size 64.00 MiB ( PE 32M, 32 )
COW-table LE 2
Allocated to snapshot 0.03% ( 0.03%)
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:7
----->ok、snapsyslvが作成されました.64 M、snapsyslvの詳細を見てみましょう.
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 0.07
----->私たちが関心を持っているのは、上記の使用率が0.07%で、100%に達すると解放され、snapshotが壊れて、役に立たないことです.
三、元のボリュームのデータを変更し、バックアップボリュームの変化を見る
1、syslvのあるシステムにログインし、ファイルテストを新規作成する
desktop64 login: root
Password:
[root@desktop64 ~]# dd if=/dev/zero of=testfile bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.0329396 s, 637 MB/s
----->さあ、私たちの机械の上でスナップショットの変化を见てみましょう、更新していくつか见てみましょう
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 0.07
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.81
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.83
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.83
----->見えますか?使用率は33.83%、スナップショットサイズは64 M、オリジナルボリュームに20 Mのファイルを新規作成しましたが、使用率は33%程度でしょうか^^;
2、新しいサイズは50 Mですね.前の20 Mを加えて、スナップショットの変化を見てみましょう.
[root@desktop64 ~]# dd if=/dev/zero of=testfile bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.132893 s, 395 MB/s
----->更新して、スナップショットの変化を見てみましょう
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
----->100%ですが、スナップショットの状態を確認してみましょうか?
[root@desktop21 /]# lvdisplay /dev/vol0/snapsyslv
--- Logical volume ---
LV Name /dev/vol0/snapsyslv
VG Name vol0
LV UUID snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r
LV Write Access read/write
LV snapshot status INACTIVE destination for /dev/vol0/syslv ( )
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 96
COW-table size 64.00 MiB
COW-table LE 2
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:7
----->見えますか、INACTIVE(アクティブになっていません)、アクティブにしてみましょう
[root@desktop21 /]# lvchange -ay /dev/vol0/snapsyslv
Can't change snapshot logical volume "snapsyslv"
----->Can't、アクティブにできない、スナップショットは使えないよ、削除して
[root@desktop21 /]# lvremove /dev/vol0/snapsyslv
Do you really want to remove active logical volume snapsyslv? [y/n]: y
Logical volume "snapsyslv" successfully removed
----->ok、削除しましたので、スナップショットの作成を続行できます^^;
【注意:snapshotスナップショットは元のデータボリュームと同じvgグループにしかなりませんよ~】
さて、QQ 674791149を残して、共に交流することを望みます^^;