バックアップ中にLVMスナップショットを使用するバックアップスクリプトを作成したいと思います。このスクリプトは、いくつかのLinuxマシンで実行されます。小さすぎてバックアップ中にいっぱいになるスナップショットを作成しないようにしたいと思います。入力パラメーターとして、ボリュームサイズ、使用済みスペースの割合、およびこのボリュームの空き領域のみがあります。このボリュームのバックアップ中に変更された平均ディスクI/O速度とデータ量がありません。この条件に基づいてボリュームの最適なスナップショットサイズを計算する方法はありますか?スナップショットを作成するために使用できる空き領域は限られています。
スナップショットのサイズをその場で変更できることを忘れないでください。 lvextendを使用します。したがって、適切な初期サイズを指定して、いっぱいになるたびに大きくすることができます。
これは自動的に行うこともできます。dmeventdを使用してlvm.confでこれを設定します。
# 'snapshot_autoextend_threshold' and 'snapshot_autoextend_percent' define
# how to handle automatic snapshot extension. The former defines when the
# snapshot should be extended: when its space usage exceeds this many
# percent. The latter defines how much extra space should be allocated for
# the snapshot, in percent of its current size.
#
# For example, if you set snapshot_autoextend_threshold to 70 and
# snapshot_autoextend_percent to 20, whenever a snapshot exceeds 70% usage,
# it will be extended by another 20%. For a 1G snapshot, using up 700M will
# trigger a resize to 1.2G. When the usage exceeds 840M, the snapshot will
# be extended to 1.44G, and so on.
#
# Setting snapshot_autoextend_threshold to 100 disables automatic
# extensions. The minimum value is 50 (A setting below 50 will be treated
# as 50).
snapshot_autoextend_threshold = 50
snapshot_autoextend_percent = 50
自動拡張はすぐには機能せず、dmeventdが反応するのに数秒かかります...そして50%のフィルグレードと50%の成長はかなり厳しいですが、非常に小さなスナップショットでテストする(したがってスナップショットをデータで急速に埋める)場合は必要です。
# lvcreate -n TEST_LV -L 1G /dev/base_vg
Logical volume "TEST_LV" created
# mke2fs -t ext4 /dev/base_vg/TEST_LV
mke2fs 1.42.5 (29-Jul-2012)
[...]
Writing superblocks and filesystem accounting information: done
# mount /dev/base_vg/TEST_LV /mnt
ファイルを書き込むためにrootである必要はありません
# cd /mnt
# chown USER .
#
$ for i in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
dd if=/dev/urandom bs=1024k count=10 > /mnt/File$i
done
$
# lvcreate -n TEST_LV-SNAP -s /dev/base_vg/TEST_LV -L 25M
Rounding up size to full physical extent 28.00 MiB
Logical volume "TEST_LV-SNAP" created
# lvs /dev/base_vg/TEST_LV-SNAP; \
while true; do
lvs /dev/base_vg/TEST_LV-SNAP |
grep -v Origin
sleep 1
done | uniq
これが実行されている間に、開始します
$ for i in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
dd if=/dev/urandom bs=1024k count=10 > /mnt/File$i
sleep 10
done
Dmeventdが追いつくためには書き込み中のスリープが必要です--- IIRCは10秒ごとにのみチェックします。
出力に戻る:
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
TEST_LV-SNAP base_vg swi-a-s- 28.00m TEST_LV 0.04
TEST_LV-SNAP base_vg swi-a-s- 28.00m TEST_LV 0.04
TEST_LV-SNAP base_vg swi-a-s- 28.00m TEST_LV 35.90
TEST_LV-SNAP base_vg swi-a-s- 28.00m TEST_LV 36.01
TEST_LV-SNAP base_vg swi-a-s- 28.00m TEST_LV 71.86
TEST_LV-SNAP base_vg swi-a-s- 44.00m TEST_LV 45.82
TEST_LV-SNAP base_vg swi-a-s- 44.00m TEST_LV 68.63
TEST_LV-SNAP base_vg swi-a-s- 68.00m TEST_LV 44.46
TEST_LV-SNAP base_vg swi-a-s- 68.00m TEST_LV 59.22
TEST_LV-SNAP base_vg swi-a-s- 104.00m TEST_LV 38.75
TEST_LV-SNAP base_vg swi-a-s- 104.00m TEST_LV 48.40
TEST_LV-SNAP base_vg swi-a-s- 104.00m TEST_LV 48.43
TEST_LV-SNAP base_vg swi-a-s- 156.00m TEST_LV 38.74
TEST_LV-SNAP base_vg swi-a-s- 156.00m TEST_LV 45.17
TEST_LV-SNAP base_vg swi-a-s- 156.00m TEST_LV 45.19
TEST_LV-SNAP base_vg swi-a-s- 156.00m TEST_LV 51.63
TEST_LV-SNAP base_vg swi-a-s- 156.00m TEST_LV 51.65
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 34.14
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 38.39
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 38.40
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 42.66
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 42.67
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 46.92
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 46.94
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 51.19
TEST_LV-SNAP base_vg swi-a-s- 236.00m TEST_LV 51.20
TEST_LV-SNAP base_vg swi-a-s- 356.00m TEST_LV 33.94
それが成長するのを見てください...
いいえ、スナップショットがアクティブなときに書き込まれるデータの量がわからない場合は、スナップショットの「最適な」サイズを決定できない可能性があります。これは、適切なサイズを見つけることに関連する唯一の情報です。