Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Сервер VMware включает инструмент командной строки "vmware-cmd", который может использоваться для выполнения фактически любой операции, которая может быть выполнена через консоль.
В этом случае Вы просто добавили бы "vmware-cmd susepend" к Вашему сценарию прежде, чем запустить Ваше резервное копирование, и "vmware-cmd запускает" после того, как резервное копирование завершается.
Мы используем сервер VMware в качестве части нашей системы сборки для обеспечения известной среды для выполнения автоматизированных обновлений DB против, таким образом, мы заканчиваем тем, что откатывали состояние как часть каждой сборки (управляемый CruiseControl) и нашли, что этот интерфейс горное тело.
Usage: /usr/bin/vmware-cmd <options> <vm-cfg-path> <vm-action> <arguments>
/usr/bin/vmware-cmd -s <options> <server-action> <arguments>
Options:
Connection Options:
-H <host> specifies an alternative host (if set, -U and -P must also be set)
-O <port> specifies an alternative port
-U <username> specifies a user
-P <password> specifies a password
General Options:
-h More detailed help.
-q Quiet. Minimal output
-v Verbose.
Server Operations:
/usr/bin/vmware-cmd -l
/usr/bin/vmware-cmd -s register <config_file_path>
/usr/bin/vmware-cmd -s unregister <config_file_path>
/usr/bin/vmware-cmd -s getresource <variable>
/usr/bin/vmware-cmd -s setresource <variable> <value>
VM Operations:
/usr/bin/vmware-cmd <cfg> getconnectedusers
/usr/bin/vmware-cmd <cfg> getstate
/usr/bin/vmware-cmd <cfg> start <powerop_mode>
/usr/bin/vmware-cmd <cfg> stop <powerop_mode>
/usr/bin/vmware-cmd <cfg> reset <powerop_mode>
/usr/bin/vmware-cmd <cfg> suspend <powerop_mode>
/usr/bin/vmware-cmd <cfg> setconfig <variable> <value>
/usr/bin/vmware-cmd <cfg> getconfig <variable>
/usr/bin/vmware-cmd <cfg> setguestinfo <variable> <value>
/usr/bin/vmware-cmd <cfg> getguestinfo <variable>
/usr/bin/vmware-cmd <cfg> getid
/usr/bin/vmware-cmd <cfg> getpid
/usr/bin/vmware-cmd <cfg> getproductinfo <prodinfo>
/usr/bin/vmware-cmd <cfg> connectdevice <device_name>
/usr/bin/vmware-cmd <cfg> disconnectdevice <device_name>
/usr/bin/vmware-cmd <cfg> getconfigfile
/usr/bin/vmware-cmd <cfg> getheartbeat
/usr/bin/vmware-cmd <cfg> getuptime
/usr/bin/vmware-cmd <cfg> getremoteconnections
/usr/bin/vmware-cmd <cfg> gettoolslastactive
/usr/bin/vmware-cmd <cfg> getresource <variable>
/usr/bin/vmware-cmd <cfg> setresource <variable> <value>
/usr/bin/vmware-cmd <cfg> setrunasuser <username> <password>
/usr/bin/vmware-cmd <cfg> getrunasuser
/usr/bin/vmware-cmd <cfg> getcapabilities
/usr/bin/vmware-cmd <cfg> addredo <disk_device_name>
/usr/bin/vmware-cmd <cfg> commit <disk_device_name> <level> <freeze> <wait>
/usr/bin/vmware-cmd <cfg> answer
Стоящий рассмотрения на rsync? Если только часть большого файла изображения изменяется затем rsync, мог бы быть самый быстрый способ скопировать любые изменения.
Если я вспоминаю правильно, VMware Server имеет интерфейс сценариев, доступный через Perl или COM. Вы смогли использовать это для автоматической приостановки VMs прежде, чем выполнить резервное копирование.
Если Ваше программное обеспечение для резервного копирования было знающей теневой копией, который мог бы работать, также.
Существует инструмент, названный (гм) Hobocopy, который скопирует заблокированные файлы VM. Я рекомендовал бы брать снимок VM и затем создать резервную копию VMDK. Затем объедините снимок после того, как копия будет завершена.
Я нашел легко следовать руководству для поддержки VM в VMware Server 2 здесь: Резервное копирование VMware Server 2