Что такое режим резервного копирования в Robocopy?


19

Я пытаюсь скопировать большой файл резервной копии базы данных по сети.

Традиционное копирование программы или xcopyсбой с другим двоичным результатом. Также попробовал robocopyбез параметра, и привел сбой. Просто сделал еще одну попытку с robocopyиспользованием /zbпараметра (перезапуск и режим резервного копирования). Это заняло гораздо больше времени, но привело к успеху.

Мой вопрос, действительно ли режим резервного копирования предназначен для копирования большого / резервного файла? Искал через сеть и не мог найти четкий ответ. Был бы признателен, если бы любой опытный пользователь мог дать мне подсказку или лучшее решение.


Существует очень небольшая разница между тем, как xcopy и robocopy фактически копируют данные из A в B, поэтому использование robocopy поверх xcopy не снизит ваши шансы на случайное повреждение данных. Это означает, что вы получили другой двоичный файл после использования xcopy, скорее всего, потому что БД была изменена во время копирования. Флаг "/ Z" здесь не имеет значения (он просто контролирует, пропускает ли robocopy существующую часть файла), так же как и флаг "/ B", который в основном контролирует разрешения, запрашиваемые приложением при открытии исходного файла.
Ангстрем

@Angstrom спасибо за ваш ответ. Бинарное отличие не в изменяющейся БД, так как это статический файл резервной копии (уже отсоединенный от базы данных), который копируется. Правда, я полагаю, что / ZB специально ничего не делает для более надежной копии, но флаг перезапуска, похоже, делает более точную двоичную запись (из-за того, что это занимает намного больше времени и приводит к идентичной копии). Или это может быть перезапускать возможность перезаписать потерянные данные.
ydoow

Ответы:


8

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

Он использует SeBackupPrivilege(чтение) и SeRestorePrivilege(запись) для чтения / записи любых файлов, не обращая внимания на ACE, которые могут помешать вам прочитать или записать файл.

Обычно при попытке копирования или доступа к файлу Windows выполняет проверку, чтобы убедиться, что у вас есть разрешение на чтение или запись в хранилище, но с SeBackupPrivilege(предоставляется группам операторов и администраторов резервного копирования) и SeRestorePrivilege(также предоставляется операторам и администраторам резервного копирования). групп), эти проверки обойдены.

Чтобы проверить, есть ли у вашей учетной записи эти привилегии, вы можете запустить команду whoami /privв командной строке.


Только ответ, который на самом деле отвечает на вопрос окончательно, спасибо. Источники для предоставленной информации сделали бы это прекрасным.
Хашим

2

Просто хочу поделиться обновлением по решению проблемы выше.

В моем случае xcopyне удалось скопировать файл размером более 10 ГБ на серверы в другом домене и на другом сервере.

С другой стороны, robocopyс

/zb- Использует режим перезапуска. Если доступ запрещен, эта опция использует режим резервного копирования.

может успешно скопировать. Это увеличило время с 1 часа до 2,5 часов, хотя.

-

После реорганизации сервера файл теперь копируется на серверы в одном домене и расположении сервера. И использование xcopyтоже хорошо.

-

Так что моя теория по этому вопросу была бы, вероятно, о стабильности соединения между серверами. Если соединение не является надежным (из-за иногда пропадания возникают проблемы с доступом), при копировании большого файла, такого как мой случай, повреждение может произойти в любое время в течение длительного процесса; robocopyс перезагрузкой и резервным копированием можно восстановить копию довольно хорошо. Время, потраченное на восстановление, вероятно, является недостатком.

И, как примечание, следует использовать FTP вместо копирования, если это будет обычная задача


2

Я настоятельно рекомендую вам создать моментальный снимок и сделать резервную копию файловой системы, которая была приостановлена. Затем вы можете быстро запустить robocopy с помощью / J (небуферизованный ввод / вывод для больших файлов). Вот скрипт для создания теневой копии C: он вызывает P :. Этот диск (P :) представляет собой статический образ диска C: идеально подходит для резервного копирования. Мы используем эту технику для копирования образов дисков активной виртуальной машины на резервный диск.

Следующее использует четыре файла сценария:

  • Пакетный файл, чтобы пнуть его команды тени диска
  • Дисковые теневые команды для уничтожения любых болтающиеся чады предыдущая тень, если произошел сбой внутреннего командного файла
  • серия дисковых команд тени для создания тени как P:
  • серия команд, выполняемых при активной тени (внутренний пакетный файл выполняется при активной P:)

1) командный файл для запуска процесса

diskshadow -s cleanup.cmds
diskshadow -s diskshadow.cmds

2) командный файл тени "cleanup.cmds" для уничтожения ранее активной тени

UNEXPOSE P:

3) командный файл shadow "diskshadow.cmds", который создает тень, а затем вызывает четвертый файл

SET CONTEXT PERSISTENT NOWRITERS
SET METADATA example.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C: ALIAS systemVolumeShadow
CREATE
EXPORT %systemVolumeShadow% P:
EXEC c:\yourlocation\backup.cmd
UNEXPOSE P:
END BACKUP
RESET

4) Командный файл «backup.cmd» для работы на тени

REM do the ROBOCOPY commands here, with the source being P:, the shadow of C:

Обратите внимание, что Windows Server 2016 (и, возможно, другие версии) запускает теневую копию два раза в день в течение недели, что приводит к сбою созданной ниже теневой копии. Убедитесь, что этот метод резервного копирования не пересекается с этими автоматическими запланированными теневыми командами.


0

Чтобы расширить ответ @ erict, вот как использовать PowerShell для создания и уничтожения снимка:

$Drive = "D:\"
$Folder = $Drive + "ShadowCopy"

# Create the snapshot
$Snapshot = (gwmi -List Win32_ShadowCopy).Create($Drive, "ClientAccessible")
$Shadow = gwmi Win32_ShadowCopy | ? { $_.ID -eq $Snapshot.ShadowID }
$Volume = $Shadow.DeviceObject + "\"
cmd /c mklink /d "$Folder" "$Volume"

# Destroy the snapshot
cmd /c rd "$Folder"
$Shadow.Delete()

Это также можно запустить на удаленной машине с помощью удаленного взаимодействия PowerShell :

Enter-PSSession RemoteComputer

#
# Run snapshot commands here
#

Exit-PSSession
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.