Вопрос или проблема
(Это продолжение сообщения, которое я написал на официальном форуме Microsoft Community 28 декабря 2024 года, почти дословно скопированного из сообщения, сделанного на r/WindowsHelp 23 декабря 2024 года, которое, в свою очередь, было продолжением сообщения, сделанного в r/DataHoarder 16 ноября 2024 года.)
Для справки, я использую Windows 10 Pro, версия 22H2, сборка 19045.5247, Windows Feature Experience Pack 1000.19060.1000.0 на Lenovo Thinkpad T14s Gen 2 (AMD) с процессором AMD Ryzen 5 PRO 5650U с графикой Radeon с базовой тактовой частотой 2.30 GHz и 16 ГБ ОЗУ, из которых 14.8 ГБ доступны.
Основные задачи, которые я хочу выполнить:
- Переместить (т.е. сохранить и затем автоматически удалить) элементы с моего компьютера на внешний диск таким образом, чтобы внутри самих элементов не осталось никаких следов (т.е. без изменений в метаданных) о том, что они были перемещены, как при обычном перемещении с помощью Windows Explorer, обеспечивая по-настоящему безопасную передачу.
- Создать журнал задач в качестве доказательства того, что файлы действительно были перемещены.
На первый взгляд эта задача кажется простой в выполнении, но на практике она оказалась довольно сложной: Windows очень, очень хочет “регулировать” (искажать) метаданные элементов при перемещении их между дисками, а методы предотвращения этого часто либо A. не способны создавать какие-либо “сайдкар” доказательства перемещения, либо B. не могут удалить исходные файлы.
Вот стандартное поведение при попытке переноса папок между дисками в Windows с помощью Проводника (по умолчанию это “Копирование”):
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4 (измененные метаданные); Папка 5, Папка 6 (оригинальные метаданные) |
Вот поведение стандартного перемещения с помощью Проводника:
Время | Каталог C:/ | К перемещению | Другой каталог C:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4, Папка 5, Папка 6 (оригинальные метаданные) |
Вот предполагаемое поведение междискового “вырезания-вставки” (Ctrl + X, Ctrl + V), на которое обратил внимание Airbus A350 на официальном форуме Microsoft Community, гибрид стандартного “Перемещения” и “Копирования” Проводника:
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4 (измененные метаданные); Папка 5, Папка 6 (оригинальные метаданные) |
Вот что некоторые пользователи r/DataHoarder ошибочно думали, что я хочу сделать (слава богу, я провел “сухую” проверку этого, иначе это было бы катастрофой):
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4 (оригинальные метаданные); Файл журнала задач |
Вот что я НА САМОМ ДЕЛЕ хочу сделать:
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4, Папка 5, Папка 6 (оригинальные метаданные); Файл журнала задач |
И вот что получилось в результате попытки синтезировать при помощи Airbus A350 в попытке это сделать:
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2 (оригинальные метаданные) | Н/Д | Подпапка A Папки 3, Подпапка B Папки 3, Подпапка A Папки 4, Подпапка B Папки 4 (частично измененные метаданные); Папка 5, Папка 6 (оригинальные метаданные); Файл журнала задач |
Конкретно, сами верхнеуровневые папки не были перенесены, а только их содержимое, и хотя даты создания для папок успешно перенесены, даты изменения не были.
Я использовал этот скрипт† в своей попытке:
robocopy "C:\x" "D:\y" /E /J /COPYALL /DCOPY:DATE /MOVE /R:3 /W:5 /TS /FP /BYTES /NP /ETA /LOG:"D:\y\report.log"
Есть идеи, что могло пойти не так? Единственные две мысли, которые приходят мне в голову:
- Возможно, “/tp […] np/eta/” Airbus A350 не было опечаткой, как я предположил?
- Я сделал то, что обычно делаю для robocopy, и направил свой файл журнала в тот же каталог, куда я отправил скопированные элементы. Возможно, это нарушает процесс?
И мой ноутбук SSD, и внешний HDD форматированы в NTFS, так что я не думаю, что проблемы могут быть связаны с файловыми системами.
Может ли быть такое, что мое желаемое поведение невозможно реализовать с помощью robocopy? Если да, может кто-то предложить другой инструмент для этого?
†Происходит из скрипта Airbus A350 (измененный с моего ранее предложенного):
robocopy "C:\sourcedirectory" "D:\destinationdirectory" /e /j /copyall /dcopy:date /move /r:3 /w:5 /ts /tp /bytes np/eta/log:"D:\logdirectory\robocopy.log"
Детальное описание параметров исключено, так как я предполагаю, что здесь есть люди, знакомые с ними. Кстати, параметры логирования предназначены для того, чтобы как можно ближе повторять стиль логирования DMDE {ПО в основном нацеленное на восстановление данных, которое я использую как общее средство копирования между дисками}, которое остается моим секретным оружием — оно может сделать все, что мне нужно для этой задачи кроме автоматического удаления исходных файлов. Или, в табличной форме:
Время | Каталог C:/ | К перемещению | Каталог D:/ |
---|---|---|---|
До | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Папка 3, Папка 4 | Папка 5, Папка 6 (оригинальные метаданные) |
После | Папка 1, Папка 2, Папка 3, Папка 4 (оригинальные метаданные) | Н/Д | Папка 3, Папка 4, Папка 5, Папка 6 (оригинальные метаданные); Файл журнала задач |
…это.
Ответ или решение
Для вашего запроса относительно правильного перемещения данных между различными дисками с использованием robocopy или другого инструмента без изменения метаданных, можно использовать подход, который гарантирует как сохранение всех атрибутов файлов, так и создание отчета о выполненной операции. Рассмотрим подробнее, как можно решить вашу задачу.
Теория
Основная проблема при использовании стандартных инструментов Windows, таких как Проводник, заключается в том, что при копировании файлов между разными дисками изменяются их метаданные, такие как дата последнего изменения. Инструмент robocopy является более предпочтительным для подобных задач, так как предоставляет расширенные возможности по управлению копированием и перемещением данных, включая сохранение всех атрибутов файлов.
Пример настройки команды Robocopy
Для выполнения вашей задачи с помощью robocopy следует понимать функционал параметров, которые этот инструмент использует:
/COPYALL
: копирует все файлы и сохраняет все атрибуты, включая даты создания и изменения./DCOPY:T
: переносит временные метки директорий./MOVE
: перемещает файлы, удаляя их после копирования с исходного места./LOG:<файл>
: создает лог-файл, где записываются все операции./TS /FP
: добавляет временные метки и полный путь к файлам в лог-файле.
Пример команды Robocopy может выглядеть следующим образом:
robocopy "C:\SourceFolder" "D:\DestinationFolder" /E /COPYALL /DCOPY:T /MOVE /R:3 /W:5 /TS /FP /LOG:"D:\DestinationFolder\MoveLog.log"
Применение
Перед выполнением копирования убедитесь в следующем:
-
Правильно заданы пути: Убедитесь, что пути к исходной и целевой папкам верны. Ошибки в путях могут привести к неполадкам в перемещении данных.
-
Права доступа: Убедитесь, что вы обладаете необходимыми правами доступа для выполнения операций копирования и удаления файлов в указанных директориях.
-
Тестирование: Проведите тестовое выполнение на небольшом объеме данных, чтобы убедиться, что все настройки работают должным образом.
-
Место для лога: Убедитесь, что указанный для лога каталог имеет достаточное пространство для записи файлов.
По данному сценарию, использование robocopy позволяет достичь результата, весьма близкого к перемещению внутри одного диска с сохранением всех атрибутов и созданием лог-файла. Если robocopy все же не подходит из-за ограничений или проблем, стоит рассмотреть использование специализированных инструментов или скриптов для автоматизации подобных задач, которые могут предлагать те же функции при более гибких настройках.