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を残して、共に交流することを望みます^^;