我必须将目录结构从一个本地 NTFS 磁盘复制到另一个本地 NTFS 磁盘(Windows 7+)并保留该目录结构中存在的硬链接。
一个可接受的解决方案是在复制之前用(相对)符号链接替换硬链接,但我不确定这是否可行。
请注意,这些是硬链接,复制连接点和符号链接不会有问题,后者可以稍后复制和修复。我不打算克隆它,只是将目录结构(整个磁盘的一部分)复制到另一个非空磁盘。
这里有什么选项?
答案1
跨独立磁盘分区复制硬链接的工具
LN——命令行硬链接
示例命令:
ln --copy x:\dir\dir2 y:\dir\newdir
在上面的例子中,x:\dir\dir2 下面的目录和文件被复制到 y:\dir\newdir,并且 x:\dir\dir2 内的所有硬链接/连接/符号链接都被复制/绑定到 y:\dir\newdir 下的新位置。
基本说明
- 从适用的 zip 文件以及
vcredist
(Visual C++ Redistributable)下载适合您的 CPU 架构的软件并安装它。 - 然后只需将 zip 文件中提取文件和文件夹到某个新文件夹(例如
C:\Temp
)。 - 在命令提示符下,更改为该 [目录] 文件夹(例如
cd /d C:\Temp
),然后按照上述步骤运行驱动器位置所需的命令示例命令显示。
笔记:运行ln --help
显示帮助详细信息,但上述命令示例应该hard links
按照文档进行复制。
潜在相关功能
其他说明
看起来,hard links
它们的文件指针被锁定到同一个磁盘分区,不能跨多个分区使用。此外,hard links
在 NTFS 上,分区是记录的一部分Master File Table
(或至少是计数的属性),因此,如果您至少不在分区级别逐字节克隆,则将它们复制到具有自己的现有磁盘MFT
可能会有问题。
答案2
命令行实用程序rsync
将执行您所要求的程序。
假设您的旧数据在位置 A,而新数据在 B,请执行以下操作:
rsync -ahPruvz --hard-links A B
引用 rsync 手册:
这告诉 rsync 在源中寻找硬链接文件并将目标上的相应文件链接在一起。
如何获取rsync
和使用它?Windows 有两种简单的替代方法:
第一种选择:使用cygwin
。这是一个 Windows 软件。安装它,rsync
在选择软件包的步骤中添加。其他一切都保留默认设置。安装后,使用它的 shell 输入命令。如果您愿意,可以使用完整路径,/usr/bin/rsync
而不仅仅是rsync
。如果您想访问 Windows 驱动器,请使用“/cygwin/drives”之类的路径,并始终尝试使用 TAB 自动完成。
第二种选择:如果是台式计算机,请使用实时 GNU/Linux 发行版。准备一个实时 USB 映像,从中启动,安装所需的磁盘并调用 rsync。如果实时映像没有rsync
,请安装它。(apt-get install rsync
在 Debian 及其衍生产品中。)如果您还没有 Linux 生态系统的经验,cygwin 可能会更容易。
答案3
尝试查看适用于 Windows 的 rsync。由于 rsync 有一个保留硬链接的选项(标志 -H、--hard-links),它应该可以完成这项工作(来源:https://download.samba.org/pub/rsync/rsync.html)。
您可以尝试研究类似 cwRsync 的东西:https://www.itefix.net/cwrsync#这个有GUI。
cwRsync 是 Rsync 的 Windows 版本,带有客户端 GUI。您可以使用 cwRsync 进行快速远程文件备份和同步。
答案4
如果要复制大量数据,可能需要使用快速复制。我尝试了两者ln
,rsync
在尝试之前;ln
工作了一段时间,但在消耗了 3 GB 的 RAM 并堵塞了单个 CPU 核心一小时后,就停止了任何有用的工作;rsync
工作了,但速度非常慢。
请注意,使用 FastCopy 时,您需要打开该选项重现硬链接在主要设置→复制选项。