安全にバックアップを取るにはどうすればよいでしょうか? 非常に頻繁にデータの更新が行われるようなシステムの場合、システムの稼働中にバックアップを取ろうとすると、バックアップの最中にデータが変更されてしまう可能性があります。その場合、不正確な情報がバックアップされたり、バックアップデータが壊れてしまう可能性もあります。
これは、大規模なデータベースシステムを運用しているような場合は特に注意する必要があります。複数のファイル同士に関連性が存在し、あるファイルが更新されたら別のファイルも更新されないとデータの整合性が取れなくなるような場合には、特にこの問題が顕著です。例えば、ファイルAとファイルBが関連するものとして、1:00にファイルAのバックアップが取られた後、1:30にファイルAが更新されたとします。その後、2:00にファイルBをバックアップしたとしても、データベースとしての整合性は保てなくなり、バックアップされたデータはまったく無意味なものになります。
データベースのようなアプリケーションを運用しているシステムで、専用のバックアップユーティリティを利用せず、dumpやtarなどの汎用ツールを利用するなら、必ずデータベースをシャットダウンしてからバックアップを実行する必要があります。バックアップ時は、システムをシングルユーザーモードに落とし、ファイルシステムを読み取り専用で再マウントした状態で行うのが理想的です。しかし、システム全体のバックアップを取るには非常に長い時間が必要になります。これは特に、24時間365日のサービス提供を求められるインターネットサーバにおいては大きな問題です。
この問題を解決する方法の1つとして、スナップショット技術があります。これは、多くの商用バックアップツールでも利用されています。
スナップショットは、ある瞬間のファイルシステムのイメージを保持したものです。スナップショット作成後は、保持したファイルシステムの状態を読み取り専用でアクセスでき、一方では正常にファイルを更新/参照することもできる状態を作り上げます。
スナップショットは全データを複製するのではなく、元のデータへのリンク情報だけを残したものであるため、スナップショット領域はデータ元よりも格段に少ない容量で済み、元データが大きい場合もスナップショット作成処理は数秒で完了します。元のデータに変更が加えられた場合は、スナップショット領域に変更前のデータが退避されます。
Linuxでスナップショットを利用する場合は、LVM(Logical Volume Manager)という論理ボリューム管理機能で実現します。LVMは、スナップショット機能以外にも、ファイルシステムに割り当てるディスクボリューム容量を動的に拡張/縮小できる機能も持っていますが、ここではスナップショット機能に特化して説明を進めることとします。
LVMを扱っていくうえで頻出する用語を以下にまとめておきます。
用語 | 説明 |
---|---|
物理ボリューム | LVMで使用する物理ディスク領域 |
ボリュームグループ | 物理ボリュームの集合体。ここから領域を切り取って、論理ボリュームを作成する |
論理ボリューム | ボリュームグループの中から領域を切り取ったもの。論理ボリュームは、普通のファイルシステムと同様にフォーマット/マウントして利用できる |
エクステント | LVMでのデータ単位。この単位で、ボリュームグループから論理ボリュームへの切り出しが行われる。デフォルトは4Mbytes |
LVMを利用するには、カーネルがLVMに対応していなければなりません。使用するLinuxディストリビューションによっては、カーネルの再構築が必要になります。今回は、検証にRed Hat Linux 8.0を利用しました。Red Hat Linux 8.0の場合、LVMは/lib/modules/2.4.18-14/kernel/drivers/md/lvm-mod.oというモジュールとして実装されています。
LVMを利用する場合、以下の手順を実施する必要があります。
1.VMパーティションの作成
fdiskでファイルシステムタイプ「8e」(Linux LVM)のパーティションを作成する。
2.LVM管理データベースの作成
vgscanでLVM管理データベース(/etc/lvmtabおよび/etc/lvmtab.d)を作成する。
# vgscan |
3.物理ボリュームの登録
pvcreateコマンドで、パーティションを物理ボリュームとして登録する。
# pvcreate /dev/hda5 |
注:/dev/hda5は環境によって異なる(以下同)。 |
4.ボリュームグループへの参加
作成した物理ボリュームをボリュームグループに参加させる。
# vgcreate Volume00 /dev/hda5 |
5.論理ボリュームの切り出し
ボリュームグループから論理ボリュームを切り出す。
# lvcreate --size 1G --name LogVol00
Volume00 |
6.論理ボリュームのフォーマットとマウント
作成した論理ボリュームは、通常の物理デバイスと同じようにフォーマット、マウントすることによって利用可能になる。
Red Hat Linux 8.0は、GUIベースのインストーラがLVMに対応しているので、簡単な作業でLVMを利用することができます。システムによってはテキストベースのインストーラしか利用できないことがありますが、テキストベースのインストーラはLVMに対応していないので注意してください。
システムを構築する際は、スナップショットを作成しておきたい領域をLVM領域として作成します。ただし、スナップショットのための専用領域を確保しておく必要があります。できればバックアップ予定のデータ領域と同サイズ、少なくとも元データ領域の10?20%ほどの領域を確保しておきます。
スナップショットを利用するには、ファイルシステムの構築後、lvcreateコマンドを--snapshotオプション付きで実行します。例えば、/dev/volgrp0/lv0(ボリュームグループvolgrp0、論理ボリュームlv0)という領域のための、1Gbytesのスナップショットを作成する場合は、以下のように実行します。
# lvcreate --snapshot --size=1G --name snap0
/dev/volgrp0/lv0 |
作成したスナップショットは通常のデバイスと同様に扱えるので、dumpでテープにバックアップを取る場合は、以下のように実行します。
# dump 0uf /dev/st0 /dev/volgrp0/snap0 |
Copyright © ITmedia, Inc. All Rights Reserved.