复制到另一个NTFS磁盘并保留硬链接


10

我必须将目录结构从一个本地NTFS磁盘复制到另一个(Windows 7+),并保留该目录结构内存在的硬链接。

可以接受的解决方案是在复制之前用(相对)符号链接替换硬链接,但是我不确定这是否可行。

这里有什么选择?


根据superuser.com/questions/624811/…的说法,一个名为“影子复制克隆”的软件可以做到这一点。
Vojtech

1
@Vojtech它不是免费软件,似乎不可用。但是另一方面,ln.exe可以满足我的需求。但是,我宁愿使用GUI替代。
Estus Flask

1
@PJMahoney是的,这些都是硬链接,复制结点和符号不会有问题,后者可以在以后进行复制和修复。我不打算克隆它,只是将目录结构(它是整个磁盘的一部分)复制到另一个非空磁盘。
Estus Flask

Answers:


9

跨单独的磁盘分区复制硬链接的工具

LN-命令行硬链接

命令: ln --copy x:\dir\dir2 y:\dir\newdir

在上面的示例中,x:\ dir \ dir2下的目录和文件被复制到y:\ dir \ newdir,并且x:\ dir \ dir2内的所有硬链接/连接/符号链接都被复制/绑在y下的新位置:\ dir \ newdir。

资源: http : //schinagl.priv.at/nt/ln/ln.html

下载: http : //schinagl.priv.at/nt/ln/ln.html#contact

注意: 看来您只是从ZIP文件以及vcredist(Visual C ++ Redistributable)下载了适用于CPU架构的软件,然后安装了该软件。然后,只需将ZIP文件中的文件和文件夹提取到某处的新文件夹中即可(例如C:\Temp。)。在命令行中,只需转到该[directory]文件夹,然后为驱动器位置运行所需的命令,如上面的示例所示。运行ln --help显示帮助详细信息,但是上面的命令示例应该hard links按照文档进行复制。


链接外壳扩展

资源: http : //schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

下载: http : //schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact

该软件感兴趣的部分或功能

  • Smart Mirror
  • Clone
  • Smart Copy

ln-命令行硬链接-下载屏幕快照 在此处输入图片说明

链接外壳扩展-下载屏幕快照 在此处输入图片说明


有趣的笔记

它似乎hard links被锁定在同一磁盘分区上,以用于其文件指针等,并且不能跨多个分区使用。另外,hard links在NTFS分区上,分区是Master File Table记录的一部分(或至少是计数的属性),因此,MFT如果您不在分区级别逐字节地克隆字节,则将它们复制到拥有它自己的现有磁盘上似乎是个问题。至少。


4

命令行实用程序可以rsync完成您的要求。

假设您的旧数据在位置A上,而新数据在B上,请执行以下操作:

rsync -ahPruvz --hard-links A B

引用rsync手册:

这告诉rsync在源中查找硬链接的文件,并将目标上的相应文件链接在一起。

如何获得rsync和使用它?Windows有2种简单的替代方法:

第一种选择:使用cygwin。这是Windows软件。安装它,rsync在选择软件包的步骤中添加。保留所有其他默认设置。安装后,请使用其外壳键入命令。如果需要,您可以使用完整路径,/usr/bin/rsync而不仅仅是rsync。如果要访问Windows驱动器,请使用“ / cygwin / drives”之类的路径,并始终尝试使用TAB自动完成。

第二种选择:如果是台式计算机,请使用实时GNU / Linux发行版。准备活动的USB映像,从中启动,安装所需的磁盘并调用rsync。如果没有实时图像rsync,请安装它。(apt-get install rsync在Debian及其衍生版本中。​​)如果您还没有Linux生态系统的经验,cygwin可能会更容易。


感谢您澄清这一点。我已经检查了rsync,它确实在硬链接上起作用(/ cygwin / driveletter和斜杠会引起一些不适,但它可以工作)。
Estus Flask 2015年

注意:如果A是目录,则该目录B应为该目录将在目标上使用的名称(cp例如,最后一个参数是父目录的情况除外)
MM

@estus-您尝试了哪些方法,它是如何工作的?您看到并最喜欢的结果是什么?
Alex S

@AlexS我不记得了,但最终可能会ln像另一个答案中所示。rsync正如我提到的,来自此答案的Cygwin 也可能起作用。
Estus Flask,

1
@AlexS我使用了CLI实用程序ln --copy。至于GUI,我假设您正在寻找“智能副本”。
Estus Flask,

3

尝试查看Windows的rsync。由于rsync具有保留硬链接(标志-H,-hard-links)的选项,因此它应该完成此工作(源:https ://download.samba.org/pub/rsync/rsync.html )。

您可以尝试研究类似cwRsync的内容:https : //www.itefix.net/cwrsync#这具有GUI。

cwRsync是带有客户端GUI的Windows Rsync的打包。您可以使用cwRsync进行快速的远程文件备份和同步。


1
推荐软件时请小心。按照书面规定,您的答案可能被视为垃圾邮件。您的答案应包括对该软件的描述以及它如何解决该问题。详细信息:如何在答案中推荐软件?
bwDraco

1
我以前无法通过rsync实现此功能(我相信我已经将DeltaCopy用于GUI)。这可能与NTFS硬链接的实现以及rsync主要是* nix工具有关。一些澄清将不胜感激。
Estus Flask

1

在这里参加聚会很晚。

用火扑灭。由于robocopy允许混乱,因此我们也将使用robocopy对其进行清理。

创建一个空目录,然后使用robocopy使用purge选项将空目录复制到目标(具有超长路径)。

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

那应该工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.