Скопируйте на другой диск NTFS и сохраните жесткие ссылки

10

Мне нужно скопировать структуру каталогов с одного локального диска NTFS на другой (Windows 7+) и сохранить жесткие ссылки, которые существуют в этой структуре каталогов.

Приемлемым решением было бы заменить жесткие ссылки (относительными) символическими ссылками перед копированием, но я не уверен, что это практически осуществимо.

Какие варианты здесь?

Настой Эстус
источник
Согласно superuser.com/questions/624811/… , программное обеспечение под названием «Shadow Copy Cloner» может это сделать.
Войтех
1
@ Vojtech Это не бесплатная программа и, кажется, недоступна. Но ln.exe, с другой стороны, удовлетворяет мои потребности. Тем не менее, я бы предпочел иметь альтернативу с графическим интерфейсом.
Настой Эстус
1
@PJMahoney Да, это жесткие ссылки, не было бы проблем с копированием переходов и символики, последние можно было просто скопировать и исправить позже. Я не собираюсь клонировать его, просто скопировать структуру каталогов (которая является частью всего диска) на другой непустой диск.
Настой Эстус

Ответы:

9

Инструмент для копирования жестких ссылок через отдельные разделы диска

LN - Hardlink командной строки

Команда: ln --copy x:\dir\dir2 y:\dir\newdir

В приведенном выше примере каталоги и файлы ниже x: \ dir \ dir2 копируются в y: \ dir \ newdir, а все жесткие ссылки / соединения / символические ссылки в x: \ dir \ dir2 копируются / привязываются к их новым местоположениям под y : \ реж \ NEWDIR.

Ресурс: http://schinagl.priv.at/nt/ln/ln.html

Загрузить: http://schinagl.priv.at/nt/ln/ln.html#contact

Примечание. Похоже, вы просто загружаете это программное обеспечение для архитектуры вашего процессора из ZIP-файла, а также vcredist (Visual C ++ Redistributable) и устанавливаете его. Затем просто извлеките файлы и папки из ZIP-файла в новую папку (.eg C:\Temp). В командной строке просто перейдите в эту папку [directory] и затем запустите необходимые команды для расположения дисков, как показано в примере выше. Запуск ln --helpпоказывает подробности справки, но приведенный выше пример команды должен копировать в hard linksсоответствии с документацией.


Расширение Link Shell

Ресурс: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

Загрузить: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact

Разделы или функции, представляющие интерес с этим программным обеспечением

  • Smart Mirror
  • Clone
  • Smart Copy

ln - Hardlink командной строки - Снимок экрана загрузки введите описание изображения здесь

Расширение Link Shell - Скачать снимок экрана введите описание изображения здесь


ИНТЕРЕСНЫЕ ЗАМЕЧАНИЯ

Похоже, hard linksони привязаны к одному и тому же разделу диска для их файловых указателей и т. Д. И не могут использоваться в нескольких разделах. Кроме того, hard linksв NTFS разделы являются частью Master File Tableзаписей (или, по крайней мере, атрибутов для счетчиков), поэтому их копирование на существующий диск, который имеет свой собственный, MFTможет показаться проблемой, если вы не клонируете побайтно на уровне раздела по крайней мере.

Сок Pimp IT
источник
4

Утилита командной строки rsyncделает то, что вы просите.

Предполагая, что ваши старые данные находятся в местоположении A, а ваши новые данные находятся в B, сделайте следующее:

rsync -ahPruvz --hard-links A B

Цитирование из руководства rsync:

Это говорит rsync искать жестко связанные файлы в источнике и связывать вместе соответствующие файлы в месте назначения.

Как его получить rsyncи использовать? Есть 2 простых альтернативы для Windows:

Первый вариант: использовать cygwin. Это программное обеспечение для Windows. Установите его, добавьте rsyncна шаге выбора пакетов. Оставьте все остальное по умолчанию. После того, как вы установите его, используйте его оболочку для ввода команды. Если вы хотите, вы можете использовать полный путь, /usr/bin/rsyncа не просто rsync. Если вы хотите получить доступ к дискам Windows, используйте пути типа "/ cygwin / жестких дисков" и всегда пытайтесь выполнить автозаполнение с помощью TAB.

Второй вариант: если это настольный компьютер, используйте живой дистрибутив GNU / Linux. Подготовьте живой образ USB, загрузитесь с него, смонтируйте нужные диски и запустите rsync. Если живого образа нет rsync, установите его. ( apt-get install rsyncв Debian и его производных.) Если вы еще не знакомы с экосистемой Linux, Cygwin может быть проще.

VasyaNovikov
источник
Спасибо за разъяснение этого. Я проверил rsync, и он действительно работает с жесткими ссылками (/ cygwin / driveletter и слэши вызывают некоторый дискомфорт, но это работает).
Настой Эстус
примечание: если Aэто каталог, то это Bдолжно быть имя, которое каталог получит для цели (в отличие, cpнапример, где последний аргумент является родительским каталогом)
MM
@estus - Какие методы вы пробовали, как это работало? и какие результаты вы видели и любили больше всего?
Алекс С
@AlexS Я не помню, но, вероятно, в конечном итоге, lnкак показано в другом ответе. Cygwin rsyncиз этого ответа может работать так же, как я уже говорил.
Estus Колба
1
@AlexS Я использовал утилиту CLI ln --copy. Что касается GUI, я предполагаю, что «Smart Copy» - это то, что вы ищете.
Estus Колба
3

Попробуйте заглянуть в Rsync для Windows. Поскольку rsync имеет возможность сохранять жесткие ссылки (флаг -H, --hard-links), он должен выполнять эту работу (источник: https://download.samba.org/pub/rsync/rsync.html ).

Вы можете попробовать что-то вроде cwRsync: https://www.itefix.net/cwrsync#, у этого есть GUI.

cwRsync - это пакет Rsync для Windows с клиентским графическим интерфейсом. Вы можете использовать cwRsync для быстрого удаленного резервного копирования и синхронизации файлов.

Мартинас Смильгявичюс
источник
1
Пожалуйста, соблюдайте осторожность при рекомендации программного обеспечения. Как написано, ваш ответ может рассматриваться как спам. Ваш ответ должен включать описание программного обеспечения и как оно решает вопрос. Дополнительная информация: Как я могу рекомендовать программное обеспечение в моих ответах?
bwDraco
1
Я не смог достичь этого с помощью rsync ранее (я думаю, что я использовал DeltaCopy для GUI). Это может быть связано с реализацией жестких ссылок NTFS и тем фактом, что rsync - это в первую очередь инструмент * nix. Некоторые разъяснения будут оценены.
Настой Эстус
1

Очень поздно на вечеринку здесь.

Клин клином вышибают. Так как robocopy позволил беспорядок, мы будем использовать robocopy, чтобы очистить его.

Создайте пустой каталог, затем используйте robocopy, чтобы скопировать пустой каталог в целевой каталог (который имеет супер длинные пути), используя опцию очистки.

md %temp%\foo
robocopy %temp%\foo target /purge
rd target
rd %temp%\foo

Это должно работать.

Роберт Рикеттс
источник