VMware插件可用于在VMware vSphere上运行的虚拟机的无代理备份。它利用CBT(更改块跟踪)来进行空间高效的完整备份和增量备份,有关强制性要求,请参见下文。
自从它被包含在Bareos中以来 版本> = 15.2.0。
状态
该插件可以执行VM磁盘的完整,差异和增量备份和还原。
当前的局限性包括:
限制-VMware插件:无法从备份中排除普通VM磁盘。
尚无法从备份中排除普通(从属)VM磁盘。但是,独立磁盘被隐式排除,因为它们不受基于CBT备份所需的快照的影响。
限制-VMware插件:不备份VM配置。
虚拟机配置未备份,因此尚无法重新创建完全删除的虚拟机。
限制-VMware插件:虚拟磁盘必须小于2TB。
虚拟磁盘必须小于2 TB,请参阅问题#670。
限制-VMware插件:只能对同一VM或本地VMDK文件进行还原。
在Bareos版本15.2.2之前,只能对具有现有虚拟磁盘的相同现有VM进行还原。以来版本> = 15.2.3 %** bareos-vadp-dumper **版本> = 15.2.2-15和%** bareos-vmware-plugin **版本> = 15.2.2-27 ,还可以还原到本地VMDK文件,有关更多详细信息,请参见下文。
要求
由于该插件基于用于数据保护的VMware vSphere存储API,因此至少需要VMware vSphere Essentials许可证。已针对用于VMware 5.x的数据保护的VMware vSphere Storage API进行了测试。它不适用于独立的未经许可的VMware ESXi™。
自Bareos 版本> = 17.2.4,该插件使用的是Virtual Disk Development Kit(VDDK)6.5.2,从VDDK 6.5发行说明开始,它应与vSphere 6.5和下一主要版本(新功能除外)兼容,并向后兼容对于vSphere 5.5和6.0,请参见https://code.vmware.com/web/sdk/65/vddk上的 VDDK发行说明以了解详细信息。
安装
通过使用适当的软件包管理工具(例如yum,zypper,apt),安装包括其要求的包aredos-vmware-plugin。
该FAQ可能有其他有用信息。
组态
首先,通过在vCenter中添加具有完全特权的用户帐户,方法是将该帐户分配给管理员角色,或者将该帐户添加到分配给管理员角色的组中。尽管可以使用具有完全特权的任何用户帐户,但更好的做法是创建一个单独的用户帐户,以便可以清楚地区分此帐户在vSphere中登录的操作。将来可能会定义一组更详细的必需角色特权。
将vCenter Appliance与嵌入式SSO一起使用时,用户帐户通常具有<username> @ vsphere.local结构,在vCenter中将Active Directory用作SSO时,该用户帐户可能会有所不同。对于此处的示例,我们将使用bakadm@vsphere.local和密码Bak.Adm-1234。
有关vSphere中用户和权限的更多详细信息,请参见
确保在Bareos File Daemon配置中添加或启用以下设置:
nudeos-fd.d / client / myself.conf
Client {
...
Plugin Directory = /usr/lib/bareos/plugins
Plugin Names = python
...
}
注意:根据平台的不同,插件目录也可能是 /usr/lib64/bareos/plugins
要在Bareos中定义VM的备份,必须将作业定义和文件集资源添加到Bareos Director配置中。在vCenter中,VM通常组织在数据中心和文件夹中。以下示例显示了如何在vCenter Server vcenter.example.org上的datacenter mydc1文件夹webservers中配置名为websrv1的VM的备份:
nudeos-dir.conf:VMware插件作业和文件集定义
Job {
Name = "vm-websrv1"
JobDefs = "DefaultJob"
FileSet = "vm-websrv1_fileset"
}
FileSet {
Name = "vm-websrv1_fileset"
Include {
Options {
signature = MD5
Compression = GZIP
}
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:folder=/webservers:vmname=websrv1:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234"
}
}
对于在根文件夹中定义的VM,必须在插件定义中指定folder = /。
自Bareos 版本> = 17.2.4,module_path没有vmware_plugin目录。在升级时,您可以从
适用于Bareos <17.2.0的python:module_path
Plugin = "python:module_path=/usr/lib64/bareos/plugins/vmware_plugin:module_name=bareos-fd-vmware:...
至
适用于Bareos的python:module_path> = 17.2.0
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:...
或安装包含兼容性符号链接的aredos-vmware-plugin-compat软件包。
以来 版本> = 17.2.4:由于该插件使用的是虚拟磁盘开发工具包(VDDK)6.5,因此需要传递vCenter SSL证书的指纹,该指纹是SSL证书的SHA1校验和。可以通过以下方式检索指纹:
检索vCenter SSL证书指纹的示例
echo -n | openssl s_client -connect vcenter.example.org:443 2>/dev/null | openssl x509 -noout -fingerprint -sha1
结果将如下所示:
示例结果指纹
SHA1 Fingerprint=CC:81:81:84:A3:CF:53:ED:63:B1:46:EF:97:13:4A:DF:A5:9F:37:89
为了提高安全性,现在有一个插件选项vcthumbprint,可以选择添加。必须像下面的示例一样,不带冒号。
paleos-dir.conf:具有vcthumbprint的VMware插件选项
...
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:folder=/webservers:vmname=websrv1:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234:vcthumbprint=56F597FE60521773D073A2ED47CE07282CE6FE9C"
...
为了在不提供vcthumbprint的情况下易于使用(但不太安全),该插件将检索指纹。
也因为 版本> = 17.2.4,已添加另一个可选的插件选项,可用于尝试强制给定的传输方法。通常,当没有给出任何传输方法时,VDDK将协商可用的传输方法并选择最佳的传输方法。有关运输方法的说明,请参见
https://code.vmware.com/doc/preview?id=4076#/doc/vddkDataStruct.5.5.html
当插件在有权访问要备份的虚拟磁盘所在的数据存储的VMware虚拟机中运行时,VDDK将使用hotadd传输方法。在无法访问SAN的物理服务器上,它将使用NBD传输方法,在这种情况下,热添加传输不可用。
要尝试强制使用给定的传输方法,可以使用插件选项传输,例如
nudeos-dir.conf:带传输功能的VMware插件选项
...
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:folder=/webservers:vmname=websrv1:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234:transport=nbdssl"
...
请注意,当指定不可用的传输方法时,备份将失败。
以来 版本> = 17.2.8,可以在文件夹和vmname的配置中使用非ASCII字符和空格。现在,虚拟磁盘文件名或包含非ASCII字符的路径也可以正确处理。为了备份vApp中包含的VM,现在可以像文件夹组件一样使用vApp名称。例如,如果我们在文件夹中拥有名为 Test vApp的vApp,并且该vApp包含两个VM Test VM 01和Test VM 02,则文件集的配置应如下所示:/Test/Test Folder
nudeos-dir.conf:适用于vApp的VMware插件文件集定义
FileSet {
Name = "vApp_Test_vm_Test_VM_01_fileset"
Include {
Options {
signature = MD5
Compression = GZIP
}
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:folder=/Test/Test Folder/Test vApp:vmname=Test VM 01:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234"
}
}
FileSet {
Name = "vApp_Test_vm_Test_VM_02_fileset"
Include {
Options {
signature = MD5
Compression = GZIP
}
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:folder=/Test/Test Folder/Test vApp:vmname=Test VM 02:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234"
}
}
但是,重要的是要知道,不可能将非ASCII字符用作作业或文件集资源的名称的参数。
在此之前,只能通过将实例UUID和uuid一起使用来指定vApp中包含的VM,而不是像这样使用文件夹和vmname:
nudeos-dir.conf:适用于vApp的VMware插件文件集定义
FileSet {
Name = "vApp_Test_vm_Test_VM_01_fileset"
...
Plugin = "python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=mydc1:uuid=502b112f-3954-d761-be08-5570c8a780e2:vcserver=vcenter.example.org:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234"
}
}
请注意,它必须是所谓的vSphere实例UUID,而不是使用例如dmidecode时在VM内部显示的BIOS UUID 。该vmware_cbt_tool.py实用程序相应调整(详见下文)。
后备
在运行第一次备份之前,必须启用CBT(更改块跟踪)才能备份VM。
从http://kb.vmware.com/kb/2075984开始,手动启用CBT当前无法正常工作。但是,API可以正常工作。要启用CBT,请使用脚本vmware_cbt_tool.py,将其打包在aredos-vmware-plugin软件包中:
vmware_cbt_tool.py的使用
user@host:~$ vmware_cbt_tool.py --help
usage: vmware_cbt_tool.py [-h] -s HOST [-o PORT] -u USER [-p PASSWORD] -d
DATACENTER [-f FOLDER] [-v VMNAME]
[--vm-uuid VM_UUID] [--enablecbt] [--disablecbt]
[--resetcbt] [--info] [--listall]
Process args for enabling/disabling/resetting CBT
optional arguments:
-h, --help show this help message and exit
-s HOST, --host HOST Remote host to connect to
-o PORT, --port PORT Port to connect on
-u USER, --user USER User name to use when connecting to host
-p PASSWORD, --password PASSWORD
Password to use when connecting to host
-d DATACENTER, --datacenter DATACENTER
DataCenter Name
-f FOLDER, --folder FOLDER
Folder Name (must start with /, use / for root folder
-v VMNAME, --vmname VMNAME
Names of the Virtual Machines
--vm-uuid VM_UUID Instance UUIDs of the Virtual Machines
--enablecbt Enable CBT
--disablecbt Disable CBT
--resetcbt Reset CBT (disable, then enable)
--info Show information (CBT supported and enabled or
disabled)
--listall List all VMs in the given datacenter with UUID and
containing folder
注意:选项--vm-uuid和--listall已在版本中添加版本> = 17.2.8,该工具现在还能够处理--folder和--vmname参数的非ascii字符参数,并且vApp名称可以像文件夹名称组件一样使用。使用--listall,可以在表格输出中报告给定数据中心中的所有VM,包括实例UUID并包含Folder / vApp名称。
对于上述配置示例,启用CBT的命令为
使用vmware_cbt_tool.py的示例
user@host:~$ vmware_cbt_tool.py -s vcenter.example.org -u bakadm@vsphere.local -p Bak.Adm-1234 -d mydc1 -f /webservers -v websrv1 --enablecbt
注意:如果虚拟硬件版本为6或更早版本,则CBT不起作用。
启用CBT后,可以照常运行或计划备份作业,例如在bconsole中:
运行job = vm-websrv1 level = Full
恢复
要还原,必须关闭虚拟机电源并且不存在快照。在bconsole中使用还原菜单5,选择正确的FileSet并输入标记*,然后完成。恢复完成后,即可启动虚拟机。
恢复到本地VMDK文件
以来 版本> = 15.2.3,可以还原到本地VMDK文件。这意味着,还原将直接在运行Bareos File Daemon的系统的文件系统上创建VMDK磁盘映像文件,而不是直接还原属于VM的磁盘。由于从中获取备份的虚拟机不受此影响,因此在还原到本地VMDK时,它可以保持打开状态。然后可以将此类还原的VMDK文件上载到VMware vSphere数据存储中,或通过guestfish之类的工具进行访问以提取单个文件。
要还原到本地VMDK,必须传递插件选项localvmdk = yes。以下示例显示如何使用bconsole执行这种还原:
示例还原到本地VMDK
*<input>restore</input>
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
...
5: Select the most recent backup for a client
...
13: Cancel
Select item: (1-13): <input>5</input>
Automatically selected Client: vmw5-bareos-centos6-64-devel-fd
The defined FileSet resources are:
1: Catalog
...
5: PyTestSetVmware-test02
6: PyTestSetVmware-test03
...
Select FileSet resource (1-10): <input>5</input>
+-------+-------+----------+---------------+---------------------+------------------+
| jobid | level | jobfiles | jobbytes | starttime | volumename |
+-------+-------+----------+---------------+---------------------+------------------+
| 625 | F | 4 | 4,733,002,754 | 2016-02-18 10:32:03 | Full-0067 |
...
You have selected the following JobIds: 625,626,631,632,635
Building directory tree for JobId(s) 625,626,631,632,635 ...
10 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
cwd is: /
$ <input>mark *</input>
10 files marked.
$ <input>done</input>
Bootstrap records written to /var/lib/bareos/vmw5-bareos-centos6-64-devel-dir.restore.1.bsr
The job will require the following
Volume(s) Storage(s) SD Device(s)
===========================================================================
Full-0001 File FileStorage
...
Incremental-0078 File FileStorage
Volumes marked with "*" are online.
10 files selected to be restored.
Using Catalog "MyCatalog"
Run Restore job
JobName: RestoreFiles
Bootstrap: /var/lib/bareos/vmw5-bareos-centos6-64-devel-dir.restore.1.bsr
Where: /tmp/bareos-restores
Replace: Always
FileSet: Linux All
Backup Client: vmw5-bareos-centos6-64-devel-fd
Restore Client: vmw5-bareos-centos6-64-devel-fd
Format: Native
Storage: File
When: 2016-02-25 15:06:48
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): <input>mod</input>
Parameters to modify:
1: Level
...
14: Plugin Options
Select parameter to modify (1-14): <input>14</input>
Please enter Plugin Options string: <input>python:localvmdk=yes</input>
Run Restore job
JobName: RestoreFiles
Bootstrap: /var/lib/bareos/vmw5-bareos-centos6-64-devel-dir.restore.1.bsr
Where: /tmp/bareos-restores
Replace: Always
FileSet: Linux All
Backup Client: vmw5-bareos-centos6-64-devel-fd
Restore Client: vmw5-bareos-centos6-64-devel-fd
Format: Native
Storage: File
When: 2016-02-25 15:06:48
Catalog: MyCatalog
Priority: 10
Plugin Options: python: module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware: dc=dass5:folder=/: vmname=stephand-test02: vcserver=virtualcenter5.dass-it:vcuser=bakadm@vsphere.local: vcpass=Bak.Adm-1234: localvmdk=yes
OK to run? (yes/mod/no): <input>yes</input>
Job queued. JobId=639
注意:自Bareos 版本> = 15.2.3,添加Python插件选项就足够了,例如通过
python:localvmdk =是
在此之前,必须重复所有Python插件并添加其他插件,例如: python:module_path=/usr/lib64/bareos/plugins:module_name=bareos-fd-vmware:dc=dass5:folder=/:vmname=stephand-test02:vcserver=virtualcenter5.dass-it:vcuser=bakadm@vsphere.local:vcpass=Bak.Adm-1234:localvmdk=yes
还原过程完成后,可以在路径{/ tmp / bareos-restores /}下找到还原的VMDK文件:
还原到本地VMDK的示例结果
# <input>ls -laR /tmp/bareos-restores</input>
/tmp/bareos-restores:
total 28
drwxr-x--x. 3 root root 4096 Feb 25 15:47 .
drwxrwxrwt. 17 root root 20480 Feb 25 15:44 ..
drwxr-xr-x. 2 root root 4096 Feb 25 15:19 [ESX5-PS100] stephand-test02
/tmp/bareos-restores/[ESX5-PS100] stephand-test02:
total 7898292
drwxr-xr-x. 2 root root 4096 Feb 25 15:19 .
drwxr-x--x. 3 root root 4096 Feb 25 15:47 ..
-rw-------. 1 root root 2075197440 Feb 25 15:19 stephand-test02_1.vmdk
-rw-------. 1 root root 6012731392 Feb 25 15:19 stephand-test02.vmdk
测试全备,增量备份成功,直接恢复到Vsphere失败,localvmdk=yes恢复到Bareos Linux本地,恢复出来的vmdk磁盘文件为VMware Workstation格式,Bareos Linux配置nfs共享给ESXi主机,使用vmkfstools -i netxms.vmdk /vmfs/volumes/datastorenew/netxms.vmdk -d thin转换为ESXi格式后挂载给新建虚拟机成功。