連載
» 2003年02月08日 00時00分 公開

Linux管理者への道(6):LVMによる自動バックアップ・システムの構築 (2/3)

[アイティーブースト]

LVMによるスナップショットバックアップ

 安全にバックアップを取るにはどうすればよいでしょうか? 非常に頻繁にデータの更新が行われるようなシステムの場合、システムの稼働中にバックアップを取ろうとすると、バックアップの最中にデータが変更されてしまう可能性があります。その場合、不正確な情報がバックアップされたり、バックアップデータが壊れてしまう可能性もあります。

 これは、大規模なデータベースシステムを運用しているような場合は特に注意する必要があります。複数のファイル同士に関連性が存在し、あるファイルが更新されたら別のファイルも更新されないとデータの整合性が取れなくなるような場合には、特にこの問題が顕著です。例えば、ファイルAとファイルBが関連するものとして、1:00にファイルAのバックアップが取られた後、1:30にファイルAが更新されたとします。その後、2:00にファイルBをバックアップしたとしても、データベースとしての整合性は保てなくなり、バックアップされたデータはまったく無意味なものになります。

 データベースのようなアプリケーションを運用しているシステムで、専用のバックアップユーティリティを利用せず、dumpやtarなどの汎用ツールを利用するなら、必ずデータベースをシャットダウンしてからバックアップを実行する必要があります。バックアップ時は、システムをシングルユーザーモードに落とし、ファイルシステムを読み取り専用で再マウントした状態で行うのが理想的です。しかし、システム全体のバックアップを取るには非常に長い時間が必要になります。これは特に、24時間365日のサービス提供を求められるインターネットサーバにおいては大きな問題です。

スナップショットとは?

 この問題を解決する方法の1つとして、スナップショット技術があります。これは、多くの商用バックアップツールでも利用されています。

 スナップショットは、ある瞬間のファイルシステムのイメージを保持したものです。スナップショット作成後は、保持したファイルシステムの状態を読み取り専用でアクセスでき、一方では正常にファイルを更新/参照することもできる状態を作り上げます。

 スナップショットは全データを複製するのではなく、元のデータへのリンク情報だけを残したものであるため、スナップショット領域はデータ元よりも格段に少ない容量で済み、元データが大きい場合もスナップショット作成処理は数秒で完了します。元のデータに変更が加えられた場合は、スナップショット領域に変更前のデータが退避されます。

図1 スナップショット作成時 図1 スナップショット作成時
図2 スナップショット作成後、データが変更された場合 図2 スナップショット作成後、データが変更された場合

LVM(Logical Volume Manager)とは?

 Linuxでスナップショットを利用する場合は、LVM(Logical Volume Manager)という論理ボリューム管理機能で実現します。LVMは、スナップショット機能以外にも、ファイルシステムに割り当てるディスクボリューム容量を動的に拡張/縮小できる機能も持っていますが、ここではスナップショット機能に特化して説明を進めることとします。

 LVMを扱っていくうえで頻出する用語を以下にまとめておきます。

用語 説明
物理ボリューム LVMで使用する物理ディスク領域
ボリュームグループ 物理ボリュームの集合体。ここから領域を切り取って、論理ボリュームを作成する
論理ボリューム ボリュームグループの中から領域を切り取ったもの。論理ボリュームは、普通のファイルシステムと同様にフォーマット/マウントして利用できる
エクステント LVMでのデータ単位。この単位で、ボリュームグループから論理ボリュームへの切り出しが行われる。デフォルトは4Mbytes

LVMの利用

 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.論理ボリュームのフォーマットとマウント

 作成した論理ボリュームは、通常の物理デバイスと同じようにフォーマット、マウントすることによって利用可能になる。

図3 論理ボリューム作成までの流れ 図3 論理ボリューム作成までの流れ

 Red Hat Linux 8.0は、GUIベースのインストーラがLVMに対応しているので、簡単な作業でLVMを利用することができます。システムによってはテキストベースのインストーラしか利用できないことがありますが、テキストベースのインストーラはLVMに対応していないので注意してください。

画面1 パーティションの追加でLVM用領域を確保 画面1 パーティションの追加でLVM用領域を確保
(1)パーティション設定時に、ファイルシステムタイプ
(2)を「physical volume(LVM)」にした物理ボリューム用領域を確保
領域を確保したら[LVM]ボタンを押して画面2へ
画面2 LVM領域の設定 画面2 LVM領域の設定
(3)ボリュームグループ名、エクステントサイズを決定したら[追加]ボタンを押す
(4)論理ボリュームのファイルシステムタイプと容量、マウントポイントを設定

スナップショットによるバックアップ

 システムを構築する際は、スナップショットを作成しておきたい領域を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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。