hidemium's blog

日々学んだことをアウトプットする。

govcを使った仮想マシンのバックアップ

前回、スナップショット技術やバックアップについて書きましたが、今回はgovcを使ってバックアップの取得について試してみました。

hidemium.hatenablog.com

構成

バックアップ

今回の操作は、govcを使って仮想マシンのクローンを用いたフルバックアップになります。

以下の手順でgovcのインストールを行います。また、合わせて環境変数を設定しておきます。

$ curl -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | sudo tar -C /usr/local/bin -xvzf - govc
$ export GOVC_URL=https://<vcenter fqdn>/sdk
$ export GOVC_USERNAME="username"
$ export GOVC_PASSWORD="password"
$ export GOVC_INSECURE="1"
$ export VM="/Datacenter/vm/path/to/vm_name"
$ govc vm.info "${VM}"
Name:              vm_name
  Path:            /Datacenter/vm/path/to/vm_name
  Guest name:      Ubuntu Linux (64-bit)
  Memory:          2048MB
  CPU:             1 vCPU(s)
  Power state:     poweredOn
  Boot time:       
  IP address:   
  Host:            hostname

govcで同一のデータストアにクローンを行うには以下のように実行します。

$ govc vm.clone -vm $VM -on=false -host hostname -folder "/Datacenter/vm/path/to/folder" clone_vm_name
Cloning /Datacenter/vm/path/to/vm_name to /Datacenter/vm/path/to/folder/clone_vm_name...OK

電源オン状態でクローンをすると、スナップショットを自動で取得を行ったうえで、クローンを行ってくれます。

clone-temp-xxx という名称のスナップショットが自動で作成され、ゲストファイルシステムを静止するがオンになっており、ファイルシステムコンシステントとアプリケーションコンシステントに該当しそうです。

govcの -on オプションを false に指定することで、クローン先のVMは電源オフ状態のままとなります。

次に、govcで異なるデータストアにクローンを行うには以下のように実行します。クローン先のデータストアが異なるため、こちらはバックアップ相当になると思います。

$ govc vm.clone -vm $VM -on=false -host hostname -ds dest_datastore -folder "/Datacenter/vm/path/to/folder" clone_vm_name
Cloning /Datacenter/vm/path/to/vm_name to clone_vm_name...OK

次に、仮想マシンをダウンロードして、他の領域へ転送する想定でovaファイルをダウンロードします。

export.ovf を実行すると、ovfファイルとvmdkファイルがダウンロードされます。

$ govc export.ovf -vm $VM /path/to/folder/
Downloading vm_name-disk-0.vmdk... OK
$ ls -la /path/to/folder/vm_name
vm_name-disk-0.vmdk
vm_name.ovf

似たコマンドで datastore.download がありますが、こちらではvmdkの仮想ディスクの記述子データしかダウンロードされず、仮想ディスクの実際のデータは含まれません。

$ govc datastore.download -ds datastore folder_name/vm_name.vmdk vm_name.vmdk
$ cat vm_name.vmdk
# Disk DescriptorFile
version=1
encoding="UTF-8"
:

スナップショットを指定したバックアップ

以下のようにすると、指定したスナップショットからクローンを作成することができます。

$ govc snapshot.create -vm $VM snapshot_name
$ govc vm.clone -vm $VM -snapshot snapshot_name -on=false -host hostname -ds dest_datastore -folder "/Datacenter/vm/path/to/folder" clone_vm_name
Cloning /Datacenter/vm/path/to/vm_name to clone_vm_name...OK
$ govc snapshot.remove -vm $VM snapshot_name

バックアップではないですが、以下のようにするとリンククローンを作成することができます。

$ govc vm.clone -vm $VM -snapshot snapshot_name -link -on=false -host hostname -ds dest_datastore -folder "/Datacenter/vm/path/to/folder" clone_vm_name
Cloning /Datacenter/vm/path/to/vm_name to clone_vm_name...OK

リストア

フルクローンを使ったバックアップのため、リストアは指定したデータストアに対してもう一度クローンを実行するかたちで実施できます。

$ govc vm.clone -vm clone_vm_name -on=false -host hostname -ds dest_datastore -folder "/Datacenter/vm/path/to/folder" restore_vm_name
Cloning /Datacenter/vm/path/to/clone_vm_name to restore_vm_name...OK

ovfファイルからのリストアは、以下のように行います。

$ govc import.ovf -host hostname -ds datastore /path/to/folder/vm_name.ovf
Uploading vm_name-disk-0.vmdk... OK

First Class Disk (FCD)

govcコマンドを触っていると、First Class Disk (FCD) 関連のものがあることに気が付きます。

$ govc disk
  disk.create
  disk.ls
  disk.register
  disk.rm
  disk.snapshot.create
  disk.snapshot.ls
  disk.snapshot.rm
  disk.tags.attach
  disk.tags.detach

FCDのディスクを作成してみます。

$ govc disk.create -ds datastore -size 10G my-disk
Creating my-disk...OK
7584edf7-6bbd-4435-9762-609d32564d28
$ govc disk.ls -ds datastore  -l
7584edf7-6bbd-4435-9762-609d32564d28  my-disk  10.0G

試しに、スナップショットを作成してみます。

$ govc disk.snapshot.create -ds datastore 7584edf7-6bbd-4435-9762-609d32564d28 my-disk-snapshot
Snapshot 7584edf7-6bbd-4435-9762-609d32564d28...OK
d86d3465-8fa5-40c2-ac02-44ee3d15809b
$ govc disk.snapshot.ls -ds datastore 7584edf7-6bbd-4435-9762-609d32564d28
d86d3465-8fa5-40c2-ac02-44ee3d15809b  my-disk-snapshot

スナップショットからの切り戻しするサブコマンドは存在しなさそうでした。

後片付けでFCDのスナップショットとディスクを削除しておきます。

$ govc disk.snapshot.rm -ds datastore 7584edf7-6bbd-4435-9762-609d32564d28 d86d3465-8fa5-40c2-ac02-44ee3d15809b
Deleting d86d3465-8fa5-40c2-ac02-44ee3d15809b...OK
$ govc disk.rm -ds datastore 7584edf7-6bbd-4435-9762-609d32564d28
Deleting 7584edf7-6bbd-4435-9762-609d32564d28...OK

これらのコマンドの用途としては、CNSで作成した仮想ディスクのトラブルシュート周りで役に立ちそうなように見えています。

https://blogs.vmware.com/affiliates/vmware-cloud-native-storage-be-aware-of-dangling-virtual-disks-and-snapshots