|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Virtualbox Backup задание в планировщике |
|
|
CMD/BAT - [решено] Virtualbox Backup задание в планировщике
|
Пользователь Сообщения: 77 |
Понадобилось делать еженочный бэкап виртуальных жёстких дисков виртуалбокса с особенностями:
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
|
Профиль | Отправить PM | Цитировать Цитата alpap:
так же, возможно в будущем будет другой скрипт, который будет проверять логи на ошибки - удалять папки без ошибок, а по ошибкам оповещать, тут вариантов несколько есть и это надо будет хорошо продумать, но это уже второй вопрос. что касается скрипта, через 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 а ниже, если в 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. б«Ґ¤гойЁҐ Ї*ЇЄЁ г¤*«Ґ*л б ᮤҐа¦Ё¬л¬: ну и рабочий код: @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
|
Профиль | Отправить 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" ) можно добавить такое же удаление с выводом в лог удалённых: 1. файлов в любых путях 2. папок в любых путях |
Отправлено: 15:16, 16-03-2017 | #22 |
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Службы - [решено] Не запускается задание в планировщике задач при событии простой | 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 |
|