VMクライアントのバックアップ

投稿者: | 2019/11/26

ASRock DeskMini 310(以下DeskMini) のセットアップが一段落したので、Oracle VM VirtualBox 配下VMクライアントのバックアップ設定を行った。

これはその際の備忘録。

たまたま240GB のSSD (Sandisk) が転がっていたので、このSSDへバックアップ・データを置くことにした。

ディスクの追加

SSD をDeskMini 底に装着して、SATA I/F にて接続。

パーティション確認

接続後、システムを立ち上げてパーティション状況の確認

注:
下記/dev/sda1、UUID 等は環境毎に変わる
あくまで私の環境ではというだけ
間違えると大事なデータを失うので細心の注意が必要

# fdisk -l

下記該当部分(/dev/sda) だけ記載

Disk /dev/sda: 240.1 GB, 240065183744 bytes, 468877312 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 879913FC-DB8D-4CD6-B96D-80FE2FDCA2DD


#         Start          End    Size  Type            Name
 1         2048    468877278  223.6G  Linux filesyste 

既にLinux ファイルシステムでパーティション作成済みだったので、このまま利用

もしパーティションが作成されていない場合は、fdisk コマンドで新規に作成。

ファイルシステム作成

新規に該当パーティションにファイルシステムを作成。

# mkfs -t ext4 /dev/sda1

現代的には、’mkfs.ext4′ コマンドを使う方が一般的かも。

マウント

作成したファイルシステムを、マウントポイント(今回 /backup’) を作成した後マウントする。

# mkdir /backup
# mount /dev/sda1 /backup

OS起動時に自動マウントするように設定

マウントが OS を再起動しても有効になるようにfatab を更新。

# vi /etc/fstab

下記行を追加する。

#/dev/sda1	/backup	xfs defaults 1 2
UUID=34b14152-78ac-4f12-892f-7c399bee4e7e /backup xfs defaults 1 2

UUID は’lsblk’ コマンドにて確認。
/dev/sda1 等は接続状況により名前が変わる可能性があるのでUUID の方が望ましいらしい。

# lsblk -o UUID /dev/sda1
UUID
34b14152-78ac-4f12-892f-7c399bee4e7e
# 

以上でバック用データーを置くためのファイルシステム作成完了。

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                  16G     0   16G   0% /dev
tmpfs                     16G     0   16G   0% /dev/shm
tmpfs                     16G  115M   16G   1% /run
tmpfs                     16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  7.7G   43G  16% /
/dev/nvme0n1p1          1014M  353M  662M  35% /boot
/dev/mapper/centos-home  180G   27G  154G  15% /home
tmpfs                    3.1G  8.0K  3.1G   1% /run/user/42
tmpfs                    3.1G   36K  3.1G   1% /run/user/1000610502
/dev/mmcblk0p1            30G  1.3G   29G   5% /run/media/myos/disk
/dev/sda1                220G   61M  209G   1% /backup
$ 

VMエクスポート設定

サブディレクト作成

対象ディレクトリに3つのサブディレクトリを作成。

# mkdir /backup/bin
# mkdir /backup/exported
# mkdir /backup/logs

bin – スクリプト置き場
exported – エクスポート・データ置き場
logs – ログファイル置き場

エクスポートスクリプト設置

下記スクリプトファイルを/backup/bin/w7_export.sh として設置。

注:VNAME は各VM環境毎に変更

#!/bin/sh

#バックアップ対象VM名
VNAME="w7"

#エクスポート先ディレクトリ
EXPORT_DIR="/backup/exported"

# VMコマンド
VM_CMD="/usr/bin/VBoxManage"

#エクスポート・ファイル名 ('VM名'YYYYMMDD.ova) 
EXPORT_FILE_NAME="${EXPORT_DIR}/${VNAME}_`/bin/date +%Y%m%d`.ova"

#開始時間を記録 
EXPORT_TIME_NAME_s="${EXPORT_DIR}/${VNAME}_`/bin/date +%Y%m%d_%R:%S`.s"
/usr/bin/touch $EXPORT_TIME_NAME_s
echo "########"
echo "-- running vm listing"
$VM_CMD list runningvms

echo "-- start backup at ${EXPORT_TIME_NAME_s}"
# VMをシャットダウン、パワーオフ、エクスポート、再起動
echo "-- shutdown vm"
#$VM_CMD controlvm ${VNAME} acpipowerbutton
echo "-- poweroff"
$VM_CMD controlvm ${VNAME} poweroff soft
echo "-- export"
$VM_CMD export ${VNAME} -o $EXPORT_FILE_NAME
echo "-- start vm"
$VM_CMD startvm ${VNAME}
echo "-- running vm listing"
$VM_CMD list runningvms

#終了時間を記憶
EXPORT_TIME_NAME_e="${EXPORT_DIR}/${VNAME}_`/bin/date +%Y%m%d_%R:%S`.e"
/usr/bin/touch $EXPORT_TIME_NAME_e
echo "-- end at ${EXPORT_TIME_NAME_e}"
echo "-- "

exit 0

手動エクスポート実行

$ /backup/bin/w7_export.sh

実行結果表示サンプル

$ /backup/bin/w7_export.sh
########
-- running vm listing
"w7" {d9559ff2-8c0e-4be2-8e6e-7ca16b05d85c}
-- start backup at /backup/exported/w7_20191123_17:34:16.s
-- shutdown vm
-- poweroff
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
-- export
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully exported 1 machine(s).
-- start vm
Waiting for VM "w7" to power on...
VM "w7" has been successfully started.
-- running vm listing
"w7" {d9559ff2-8c0e-4be2-8e6e-7ca16b05d85c}
-- end at /backup/exported/w7_20191123_17:38:07.e
-- 
$ 

スクリプト作成ファイル

スクリプトは実行に成功すると exported ディレクトリに3つのファイルを作成する。

$ ls -1t /backup/exported
w7_20191123_17:38:07.e
w7_20191123.ova
w7_20191123_17:34:16.s
$

.s、.e スクリプトの開始、終了時間
.ova – VM エクスポートされたファイル

cron スケジュール化

手動エクスポート実行が成功したらな、自動的にバックアップを実行するようにcron にジョブ登録。

# crontab -e

下記一行を追加

0 5 * * 6 /bin/sh -l -c /backup/bin/w7_export.sh >> /backup/logs/vm_backup.log 2>&1

上記は、毎週土曜日の朝5時にエクスポートを実行するという意味。

覚え書き

  • エクスポート中はVM がpower off 状態なので、WEB サービスは止まってしまう。
    ダウンタイムは現在約4分程度だけど、バックアップ時間の今後の推移に注意。

    出来ればノーダウンタイムでのバックアップが望ましいけど、今の環境だと難しいかな…
    適当に個人で運用しているサーバーだから別にノーダウンタイムで無くても良いんだけどね。w
  • 現在エクスポートされたファイルサイズは約3GB。
    週一でバックアップすると、容量的に余裕で1年程度は持つ事になる。
    今後エクスポートされるファイル・サイズの推移に注意。

    ま、一杯になる頃にはまたSSD のビットコストが低下しているだろうから、より大容量のSDD を追加か置き換えをすれば良いだろう。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください