Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Virtualbox Backup задание в планировщике

Ответить
Настройки темы
CMD/BAT - [решено] Virtualbox Backup задание в планировщике

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: zegordo
Дата: 15-02-2017
Понадобилось делать еженочный бэкап виртуальных жёстких дисков виртуалбокса с особенностями:

0. скрипт должен останавливать виртуальные машину
1. скрипт будет создавать папку по указанному пути с сегодняшней датой, формата "дд_мм_гггг"
2. в эту папку он будет копировать диски виртуальных машин и сжимать их 7z
3. после окончания копирования запускать виртуальную машину
4. проверить количество папок, если их больше 7 - удалять самы
4. писать txt лог в этой же папке всего что он сделал или не сделал.

У виртуалбокса есть утилита в папке с установленной программой, vboxmanage.exe
Если cmd через команду "cd"(или другим неведомым мне способом) установить путь, где лежит она, ей можно пользоваться используя её аргументы.
Я вижу скрипт, который нужно запихнуть в планировщик заданий windows следующим:
(жирные слова - то что сделать не удалось)

Скрытый текст

//начало скрипта
cd "C:\Program Files\Oracle VirtualBox" //переходит в каталог с утилитой виртуалбокса
vboxmanage controlvm "виртуалка1" savestate> //эта команда сохраняет текущее состояние и выключает виртуалку. Используется именно этот вариант, т.к. не всегда перезагрузка желательна.
выглядит так, проценты идут в процессе сохранения:

ping -n 6 127.0.0.1 >nul //на случай если слегка подвиснет при сохранении состояния. возможно есть команда ожидания конца операции, но т.к. это vboxmanage, bat это отследить вряд ли сможет.
vboxmanage controlvm "виртуалка2" savestate>
ping -n 6 127.0.0.1 >nul
vboxmanage controlvm "виртуалка3" savestate>
ping -n 6 127.0.0.1 >nul
создание папки с именем-датой по пути D:\vmbackup\
VBoxManage clonemedium "исходный_путь_виртдиска\диск1.vdi" "D:\vmbackup\папка_с_датой\диск1.vdi"
ожидание, пока не закончится операция.
операция выглядит так, проценты идут в процессе клонирования

аналогично для других виртдисков(важно отметить, их количество может меняться)
vboxmanage startvm "виртуалка1" --type headless //запускает виртуалку в фоновом режиме
выглядит так, ждёт пока запустится и выдаёт сообщение successfully started:

ping -n 6 127.0.0.1 >nul
аналогично для других виртуалок
проверка скриптом количества папок и, если больше 7ми, удалять самые старые по дате
архивация скопированных виртдисков(с удалением копии, с которой делался архив. Чтобы остались только архивы)
//конец скрипта


возможно имеет смысл выключить одну-сделать операции-включить и перейти на следующую виртуальную машину
но т.к. ночь, времени много, отключать все их разом или по-очереди разницы нет.
так же, клонировать диск нужно именно программой виртуалбокса, т.к. она создаёт для него уникальный номер в процессе клонирования, что позволит избежать возможные проблемы в будущем при восстановлении из бэкапа.
возможно, скрипт можно сделать значительно проще.

Отправлено: 17:13, 15-02-2017

 

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата alpap:
а вообще (мне лично) стремно было бы держать папку с логом ((%date%), а могла бы быть и очень важная информация) »
возможно этот пункт мне стоит в будущем доработать, а именно если в логе ошибка - то лог или сохранять или оповещать. на данный момент сойдёт и так(в целях тестирования).
так же, возможно в будущем будет другой скрипт, который будет проверять логи на ошибки - удалять папки без ошибок, а по ошибкам оповещать, тут вариантов несколько есть и это надо будет хорошо продумать, но это уже второй вопрос.

что касается скрипта, через 2>&1 действительно работает!
вот что пишется в лог файле:
Код: Выделить весь код
сохранение состояния и выключение вирт. машины
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
клонирование виртуального диска
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: bc88a95e-94d4-4449-a0ae-86a5ab68ba07
запуск вирт. машины
Waiting for VM "GLPI Ёрсюўр*" to power on...
VM "GLPI Ёрсюўр*" has been successfully started.
следующие папки удалены с содержимым:
hahah
aijaf
agaig
agag
jsjooss
с кодировкой беда, т.к. файл выше - 866
а ниже, если в 1251
Код: Выделить весь код
б®еа**Ґ*ЁҐ б®бв®п*Ёп Ё ўлЄ«озҐ*ЁҐ ўЁав. ¬*иЁ*л
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Є«®*Ёа®ў**ЁҐ ўЁавг*«м*®Ј® ¤ЁбЄ*
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 19aee34a-1ecc-44fa-b3d6-1b9d87da9e4a
§*ЇгбЄ ўЁав. ¬*иЁ*л
Waiting for VM "GLPI рабочая" to power on...
VM "GLPI рабочая" has been successfully started.
б«Ґ¤гойЁҐ Ї*ЇЄЁ г¤*«Ґ*л б ᮤҐа¦Ё¬л¬:
т.е. названия, что создаёт утилита, видны только в 1251. решением этого вижу называть виртуалки только английскими буквами

ну и рабочий код:
Код: Выделить весь код
@echo off
cd /d "C:\vmbackup"
if not exist "%date%" md "%date%"
set "VB=C:\Program Files\Oracle VirtualBox\vboxmanage.exe"
set "f_GL1=GLPI рабочая-disk1.vdi"
set "f_GL2=GLPI рабочая-disk2.vdi"
set "d_GL=GLPI рабочая"
set "f_log=%date%\log.txt"
>"%f_log%" 2>&1(
@echo сохранение состояния и выключение вирт. машины
"%VB%" controlvm "%d_GL%" savestate
@echo клонирование виртуального диска
 "%VB%" clonemedium "C:\Users\admin\Documents\Virtualbox VMs\%d_GL%\%f_GL1%" "%date%\%f_GL2%"
@echo запуск вирт. машины
 "%VB%" startvm "%d_GL%" --type headless
 "%VB%" closemedium disk "%date%\%f_GL2%"
@echo следующие папки удалены с содержимым:
 for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do @echo %%a& rd /s /q "%%a"
)
который можно проапгрейдить под любое число виртуалок

всем спасибо, вопрос считаю решённым
возможно, кому-то из гугла это решение поможет, т.к. я в чистом поиске такого решения не нашёл, почему и обратился сюда.

Отправлено: 19:39, 19-02-2017 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


alpap, скажите пожалуйста, как после кода
Код: Выделить весь код
@echo off
cd /d "C:\vmbackup"
if not exist "%date%" md "%date%"
set "VB=C:\Program Files\Oracle VirtualBox\vboxmanage.exe"
set "f_GL1=GLPI рабочая-disk1.vdi"
set "f_GL2=GLPI рабочая-disk2.vdi"
set "d_GL=GLPI рабочая"
set "f_log=%date%\log.txt"
>"%f_log%" 2>&1(
@echo сохранение состояния и выключение вирт. машины
"%VB%" controlvm "%d_GL%" savestate
@echo клонирование виртуального диска
 "%VB%" clonemedium "C:\Users\admin\Documents\Virtualbox VMs\%d_GL%\%f_GL1%" "%date%\%f_GL2%"
@echo запуск вирт. машины
 "%VB%" startvm "%d_GL%" --type headless
 "%VB%" closemedium disk "%date%\%f_GL2%"
@echo следующие папки удалены с содержимым:
 for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do @echo %%a& rd /s /q "%%a"
)
после строчки
Код: Выделить весь код
for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do @echo %%a& rd /s /q "%%a"
можно добавить такое же удаление с выводом в лог удалённых:
1. файлов в любых путях
2. папок в любых путях

Отправлено: 15:16, 16-03-2017 | #22


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата zegordo:
в любых путях »
к такому вопросу надо подходить очень щепетильно и в идеале все-таки лучше удалять целенаправленно (по возможности)

а логгирование ..., просто оберните нужный код с предусмотренным выводом чего нужно в лог и все

папки
Код: Выделить весь код
@echo off
::cd /d "papka"
>"%~dp0log_del.txt" (
 @echo следующие папки удалены с содержимым:
 for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do @echo %%a& rd /s /q "%%a"
)
pause
файлы
Код: Выделить весь код
@echo off
::pushd "papka"
>"log_del.txt" (
 @echo следующие файлы удалены с содержимым:
 for /f "skip=7 delims=" %%a in ('dir /a-d/b/o-d/tc') do @echo %%a& del /q "%%a"
)
::popd
pause
ну и дату, наверное имеет смысл поставить в лог
@echo [%date%_%time%] следующие папки удалены с содержимым:
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 16-03-2017 | #23



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Virtualbox Backup задание в планировщике

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - [решено] Не запускается задание в планировщике задач при событии простой Ferum01 Microsoft Windows 7 1 15-04-2015 13:03
Службы - [решено] Как создать задание в планировщике с помощью батника Megatron13 Microsoft Windows 7 17 15-02-2012 22:14
CMD/BAT - создать задание в планировщике ХР по запуску батника sov44 Скриптовые языки администрирования Windows 24 16-12-2011 09:05
Не могу создать задание в планировщике задач vlad_ok_777 Microsoft Windows NT/2000/2003 0 18-05-2010 14:08
Как программно добавить задание в планировщике задач RVGroup Программирование и базы данных 5 24-10-2004 18:04




 
Переход