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 を追加か置き換えをすれば良いだろう。