Вопрос или проблема
Я хотел бы, чтобы Robocopy
скопировал все полезные данные с системного диска Windows, но по какой-то причине robocopy
не может отличить некоторые файлы OneDrive (думаю, с Google Drive и iCloud может быть такая же проблема); даже при добавлении /XA:O
robocopy
все равно пытается скопировать их, что приводит к сбоям (то же самое происходит, если используется /XJ
для исключения символических ссылок).
Что не так с этими файлами и есть ли способ заставить Robocopy
игнорировать эти файлы?
- Свойства этих файлов показывают фактический размер в Проводнике, но с Размер на диске: 0 байт
- Я думаю, что единственный (неэффективный) способ исключить эти файлы — исключить целые папки [
/XD:%UserProfile%\OneDrive
], что немного неудобно, потому что системный диск может содержать разнообразные офлайн приложения и данные (такие как папки iCloud, OneDrive и Google Drive в каждом профиле пользователя):
Нет, нет способов. Эти файлы используют функцию “Файлы по запросу” OneDrive. Файлы, которые вы видите, являются “заглушками”, ссылающимися на файл в облаке, поэтому у них есть правильный размер файла, показанный в свойствах, но они не занимают никакого места на диске. Если вы выполните команду Windows ATTRIB /?, вы увидите некоторые новые атрибуты. Ссылка: https://docs.microsoft.com/en-us/onedrive/files-on-demand-windows. Robocopy не был обновлен, чтобы учитывать эти атрибуты, поэтому вы не можете исключить их.
“Всегда доступно” – Закреплено – attrib +p
“Доступно локально” – Снять закрепление – attrib -p
“Только онлайн” – Не закреплено – attrib +u
Если вы часто выполняете эту задачу, запуская скрипт, вы могли бы добавить тихую деинсталляцию любых приложений синхронизации файлов в начало скрипта, поскольку они так или иначе резервируются в облаке.
RoboCopy
крайне неэффективен для резервного копирования файлов/разделов и не рекомендуется для использования, так как у него нет сжатия и нет паритета, чтобы обеспечить корректность файлов в резервной копии; вместо этого рекомендуется создать WIM с помощью Dism
:
- WIM/ESD являются форматами интеллектуального сжатия изображений и, следовательно, эффективны по месту хранения:
- Только измененные файлы добавляются к
.esd
/.wim
, когда к ним дополняется новое изображение [индекс]; новые добавленные изображения используют одну и ту же копию неизмененных файлов, уже содержащихся в изображении (проверено по хешу), что позволяет изображению оставаться маленьким по сравнению с содержащимися данными - Данные в ESD/WIM невозможно испортить, если команды имиджирования всегда выполняются с
/Verify
и/CheckIntegrity
(Windows ≤7:/Check
)
- Только измененные файлы добавляются к
- Windows XP ≥ 10 всегда нативно поддерживал имиджирование разделов/файловых систем:
- Системный [ОС] раздел может быть проимайтирован только из WinPE/WinRE
- WIM [Windows IMage] может захватить весь раздел или отдельные папки/файлы
- ESD [Electronic Software Distribution] может захватить только системный раздел и должен использовать
/Compress:Recovery
(алгоритм примерно на 33% эффективнее, чем/Compress:Max
)- Windows ≥10: Может использоваться только для экспортированных PBR [Push-Button Reset] изображений
Windows ≤8.1: Только загрузочная установка Windows может быть захвачена как ESD
- Windows ≥10: Может использоваться только для экспортированных PBR [Push-Button Reset] изображений
Dism
всегда включен в WinPE/WinRE (Win XP ≤ 7:ImageX
):- WinPE: Windows Preinstallation Environment
(Установочный носитель Windows: SHIFT+F10 для доступа к терминалу) - WinRE: Windows Recovery Environment
(WinRE – это образ WinPE, содержащий дополнительные Дополнительные компоненты WinPE, важные для восстановления)
- WinPE: Windows Preinstallation Environment
- Системный [ОС] раздел может быть проимайтирован только из WinPE/WinRE
Создание образа
(соответствие cmdlet)
Укажите исключения или исключения, создав WimScript.ini
файл конфигурации, при этом /ScratchDir
требуется в WinPE, так как по умолчанию у него всего 32 МБ временного пространства:
- Либо Создать, либо Дополнить изображение:
- Создать изображение:
# Windows ≥8: DISM Dism /Capture-Image /ImageFile:"Z:\Base.wim" /CaptureDir:"C:" /Name:"Резервное копирование Windows" /Description:"Базовый образ 2022.01.30 @ 09:00" /Compress:Max /CheckIntegrity /Verify /ScratchDir:"Z:" # Windows XP ≤ 7: ImageX ImageX /Capture "C:" "Z:\Base.esd" "Резервное копирование Windows" "Базовый образ 2022.01.30 @ 09:00" /Compress:Recovery /Check /Verify /ScratchDir:"Z:\"
- Измените
/Compress:Max
на/Compress:Fast
, если не сохраняете захваченное изображение на SSD - Для ограничения по размеру
/Split-Image
разбивает изображения на несколько файлов только для чтения.swm
- Измените
- Дополнить изображение:
# Windows ≥8: DISM Dism /Append-Image /ImageFile:"Z:\Base.wim" /CaptureDir:"C:" /Name:"Резервное копирование Windows" /Description:"Базовый образ 2022.01.30 @ 09:00" /CheckIntegrity /Verify /ScratchDir:"Z:" # Windows XP ≤ 7: ImageX ImageX /Append "C:" "Z:\Base.esd" "Резервное копирование Windows" "Базовый образ 2022.01.30 @ 09:00" /Compress:Recovery /Check /Verify /ScratchDir:"Z:\"
- Сжатие заблокировано на значении, установленном при захвате базового изображения
- Индексы могут быть удалены [
/Delete-Image
] или экспортированы [/Export-Image
] в собственное изображение
- Создать изображение:
- Применить изображение:
# Windows ≥8: DISM Dism /Apply-Image /ImageFile:"Z:\Base.wim" /Index:1 /ApplyDir:"C:" /CheckIntegrity /Verify /ScratchDir:"Z:" # Windows XP ≤ 7: ImageX ImageX /Apply "Z:\Base.wim" 1 "C:" /Check /Verify /ScratchDir:"Z:\"
- Перед применением
/Get-ImageInfo
для проверки, что применяется правильный индекс [образ]:Dism /Get-ImageInfo /ImageFile:"Z:\Base.wim"
- Если применяется образ ОС, следующее должно быть выполнено перед выходом из WinPE/WinRE:
- BIOS:
BootRec /FixMBR && BootRec /FixBoot && BootRec /RebuildBCD
- UEFI:
::# С существующим загрузочным EFI-разделом: BootRec /FixMBR && BootRec /RebuildBCD ::# Без существующего загрузочного EFI-раздела: ::# Смонтировать EFI-раздел на Y: DiskPart → lis vol → sel vol # → assign letter=Y → exit ::# Создать EFI-структуры и войти: MkDir "Y:\EFI\Microsoft\Boot" Cd /d "Y:\EFI\Microsoft\Boot" ::# Создать структуру загрузки EFI: BootRec /Fixboot ::# Если возникает ошибка "Доступ запрещен" (C: - применяется изображение): BcdBoot C:\Windows /s C: /f UEFI ::# Устранение любых других проблем с загрузкой: BootRec /FixMBR && BootRec /RebuildBCD ::# Отмонтировать EFI-раздел: DiskPart → sel vol Y → remove → exit
- BIOS:
- Перед применением
Доступ к данным в ESD/WIM:
-
Только для чтения:
- Смонтировать изображение: (как
/ReadOnly
)# Windows ≥8: DISM Dism /Mount-Image /ImageFile:"Z:\Base.wim" /Index:2 /MountDir:"C:\Mount" /Optimize /CheckIntegrity /ReadOnly # Windows XP ≤ 7: ImageX ImageX /Mount "Z:\Base.wim" 2 "C:\Mount" /Check
- Вместо этого я предпочитаю открывать
.wim
/.esd
в графическом интерфейсе 7zip
- Вместо этого я предпочитаю открывать
- Отмонтировать изображение: (
/discard
изменения)# Windows ≥8: DISM Dism /Unmount-Image /MountDir:"C:\Mount" /CheckIntegrity /Discard # Windows XP ≤ 7: ImageX ImageX /Unmount "C:\Mount"
- Смонтировать изображение: (как
-
Внести изменения или добавить данные в изображение [индекс]:
- Смонтировать изображение:
# Windows ≥8: DISM Dism /Mount-Image /ImageFile:"Z:\Base.wim" /Index:2 /MountDir:"C:\Mount" /Optimize /CheckIntegrity # Windows XP ≤ 7: ImageX ImageX /MountRW "Z:\Base.wim" 2 "C:\Mount" /Check
- Отмонтировать изображение: (
/Commit
изменения)# Windows ≥8: DISM Dism /Unmount-Image /MountDir:"C:\Mount" /CheckIntegrity /Commit # Windows XP ≤ 7: ImageX ImageX /Unmount "C:\Mount" /Commit
- Сохраните изменения как новое добавленное изображение, добавив
/Append
- Сохраните изменения как новое добавленное изображение, добавив
- Смонтировать изображение:
Ответ или решение
Использование RoboCopy для копирования данных с диска Windows, особенно когда речь идет о файлах, хранящихся в облачных сервисах, таких как OneDrive, Google Drive или iCloud, может вызвать ряд проблем. Эти проблемы возникают, в частности, из-за функции "Файлы по запросу" (Files On-Demand), реализованной в OneDrive. Давайте рассмотрим проблему и ее возможные решения более подробно.
Проблема с файлами облачного хранилища
При использовании RoboCopy, даже если вы добавляете параметр /XA:O
, который предназначен для исключения файлов с атрибутом "Online-only", RoboCopy может по-прежнему пытаться копировать файлы, что приводит к сбоям. Эти файлы фактически представляют собой "заглушки" (stub), которые ссылаются на данные в облаке и в файловом проводнике показывают корректный размер, но не занимают места на диске.
Согласно команде ATTRIB /?
, новые атрибуты файлов, используемые OneDrive, включают:
+p
: Файл доступен локально (Pinned)-p
: Файл стал доступен на локальном диске (Locally Available)+u
: Файл только в облаке, недоступный локально (Online-only)
К сожалению, RoboCopy не обновлен для распознавания этих атрибутов, поэтому вы не сможете явно исключить файлы с помощью RoboCopy.
Возможные решения
-
Исключение папок: Наиболее очевидное, но неэффективное решение — исключить целые папки с помощью параметра
/XD
. Например, вы можете использоватьXD:%UserProfile%\OneDrive
, чтобы исключить все файлы из OneDrive. Однако, как вы отметили, из-за разнообразия приложений может потребоваться исключить несколько папок, что не всегда удобно. -
Удаление клиентских программ перед резервным копированием: Если вам нужно часто выполнять резервное копирование, рассмотрите возможность создания скрипта, который будет автоматизировать процесс. Вы можете временно удалять клиентские приложения синхронизации (OneDrive, Google Drive и iCloud) перед запуском операции копирования. После завершения резервного копирования вы можете установить их снова. Это позволит избежать проблем с "заглушками".
-
Использование образов WIM или ESD: Вместо использования RoboCopy, рассмотрите возможность использования утилиты
DISM
для создания образов файловой системы (например, WIM или ESD). Эти форматы имиджей используют компрессию, что делает их более эффективными для резервного копирования:- Команда для создания образа:
DISM /Capture-Image /ImageFile:"D:\Backup.wim" /CaptureDir:"C:" /Name:"System Backup"
- Это образ будет содержать только файлы, которые действительно находятся на диске, исключая файлы на запрос, так как они не будут представлены в локальной файловой системе.
- Команда для создания образа:
Заключение
Работа с облачными файлами и альтернативными устройствами резервного копирования требует осознания особенностей этих файлов. Если вам необходимо регулярно выполнять резервное копирование данных с использованием RoboCopy, подумайте о более надежных и адаптированных методах, таких как использование утилиты DISM для создания образов системы. Это обеспечит более высокую производительность и меньшее количество ошибок в процессе резервного копирования.