wbadmin резервное копирование всех локальных дисков
Я пытаюсь найти один размер подходит всем wbadmin
сценарий, который я могу развернуть на различных серверах Server 2008 R2.
Уловка, которую я имею, состоит в том, что в то время как все серверы имеют C:, некоторые имеют E:, некоторые E: и F:, а некоторые имеют просто F:.
Следующая команда:
wbadmin enable backup -addtarget:\\backup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:ladidada -quiet
Резервное копирование только C: и я не вижу никаких вариантов в wbadmin
для резервного копирования всех локальных дисков. И конечно, если я попытаюсь снять проблему с пулемета (добавив -include:c:,d:,e:,f:
... и т. д.) тогда мы получим ERROR - The path specified by 'g:' was not found
,
Пожалуйста, не говорите мне, что я должен перечислить все локальные диски и сделать это таким образом. Есть ли способ сказать wbadmin
включить все локальные диски при резервном копировании?
3 ответа
Вот вариант, который автоматически избегает CD / DVD. Он намеренно создает резервные копии только жестких дисков.
@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
set remotebackup=\\backupserver\path
for /F "usebackq eol=: skip=1 tokens=1" %%a in (
`wmic logicaldisk where "drivetype=3" get deviceid`
) do (
set "_drive=%%a:"
set "_HDL=!_HDL!!_drive:~0,2!,"
)
if "%_HDL:~-1%"=="," (set _HDL=%_HDL:~0,-1%)
if "%_HDL:~-2%"==",:" (set _HDL=%_HDL:~0,-2%)
echo Found: %_HDL%
wbadmin start backup -backuptarget:%remotebackup% -include:!_HDL! -allCritical -vssCopy -quiet -systemState
Это является частью запланированной задачи, поэтому wbadmin start
используется, а не wbadmin enable
,
Интересные места здесь "drivetype=3"
и используя usebackq
(требуется).
Код Марка был полезен в отслеживании этого.
Операторы if удаляют последнюю запятую или запятую и двоеточие, если они существуют. Не мог придумать более простой способ сделать это. %%a
копируется в _drive
поэтому его можно обрезать до первых 2 символов (C:), используя :~0,2
синтаксис.
После кучи дурака (я ненавижу дозирование DOS), я придумал следующее. Вроде хорошо работает
@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f %%I IN (
'wmic volume get driveletter'
) DO (
ECHO %%I | FIND ":"
IF ERRORLEVEL 1 (
echo Failed: %%I
) ELSE (
ECHO %%I | FIND "D:"
IF ERRORLEVEL 1 (
IF NOT [!_TEMPVAR!]==[] SET _TEMPVAR=!_TEMPVAR!,
SET _TEMPVAR=!_TEMPVAR!%%I
) ELSE (
echo Skipping CD-ROM
)
)
)
wbadmin enable backup -addtarget:\\backupserver\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:1234password -quiet -include:!_TEMPVAR!
Рассечение это:
Первая часть пакета находит все буквы дисков от wmic volume get driveletter
, Он проверяет, что каждая строка на самом деле является действительной буквой диска (поскольку вывод содержит некоторую подробную информацию, которая нам не нужна), проверяя наличие :
персонаж.
Затем он проверяет, является ли диск D:
так как в моей ситуации это все оптические приводы, которые вызывают ошибки при указании в wbadmin
и пропускает их.
Затем он проверяет, содержит ли строка содержимое. Если это так, суффикс запятой (,
). Если строка пуста, она ничего не делает.
Затем он идет и добавляет букву диска к переменной.
Это выполняет wbadmin
:
wbadmin enable backup
- указывает, что мы хотим настроить расписание резервного копирования Windows-addtarget:\\enetsbackup1\Backups
- Я хочу сделать резервную копию в сетевом расположении, поэтому я указываю это здесь.-schedule:23:00
- Я хочу, чтобы резервные копии работали в 11 вечера каждую ночь-systemState
- Я хочу, чтобы состояние системы было включено для восстановления голого металла-allCritical
- Я хочу, чтобы все критические системные диски были включены (это важно, потому что приведенный выше скрипт создает только видимые буквы дисков. Могут быть разделы, для которых требуется резервное копирование, чтобы загрузить сервер без букв дисков)-vssFull
- Это единственная резервная копия, которую мы делаем на этом сервере, поэтому скажите Windows Backup, чтобы сбросить заархивированный бит.-user:backupservice@domain.local
- Эта учетная запись является членом группы "Операторы архива" в домене (а также должна входить в локальную группу "Операторы архива". Это очень плохой документ Microsoft)-password:1234password
- пароль для учетной записи службы резервного копирования-quiet
- Не делайте никаких подсказок. Я собираюсь запустить это как сценарий запуска в групповой политике, поэтому подсказки плохие.-include:!_TEMPVAR!
- Это самая важная часть. Он указывает, какие диски должны быть зарезервированы, и включает строку накопителей, которые мы собрали ранее.
И просто чтобы убедиться, что это работает, чтобы проверить это в графическом интерфейсе:
Вещи, которые, возможно, можно улучшить: вместо того, чтобы работать с буквами дисков, GUID диска может быть более разумной идеей, потому что это не будет создавать резервные копии дисков, на которых не установлены буквы дисков. Так что, если вы смонтировали диск внутри NTFS-раздела или у диска нет буквы диска по какой-либо причине, он будет пропущен.
В то время как решение, которое ищет список дисков от wmi, будет лучше. Если вы знаете, что у вас есть только e: f: и g: тогда это будет нормально работать
set wbinclude=
if exist e:\*.* set wbinclude=e:\
if exist f:\*.* set wbinclude=%wbinclude% f:\
if exist g:\*.* set wbinclude=%wbinclude% f:\
if not "%wbinclude%"=="" set wbinclude=-includes %wbinclude%
echo wbadmin enable backup -addtarget:\\backup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:ladidada -quiet %wbinclude%