在 cygwin cp -al 中,ext2 驱动器上“无法创建到 Y 的硬链接 X:不允许操作”

在 cygwin cp -al 中,ext2 驱动器上“无法创建到 Y 的硬链接 X:不允许操作”

/cygdrive/d/ 是格式化为 ext2 的 USB 硬盘,并安装有ext2fsd

当我尝试cp -al /cygdrive/d/X /cygdrive/d/Y将 X 作为文件时,出现标题中的错误。

我尝试过/验证过的事情

我这样做了chmod -R 777 /cygdrive/d,但仍然得到相同的结果。

我以本地管理员的身份运行,我是 /cygdrive/d 的所有者。

X 是一个文件,而不是目录。

截至今日,Windows Server 2012 R2 正在运行 cygwin64。

例如,它是 ext2,因为我可以,touch /cygdrive/d/filename_with_a_colon:in_it而且它可以工作,我可以用 看到它ls。更不用说,ext2fsd 和 Windows 磁盘管理器中也这么说。

具有讽刺意味的是,NTFS 驱动器上的相同语法运行良好并创建 NTFS 硬链接。

我也尝试将驱动器重新格式化为 ext3,结果相同。我由于 ext2 比 ext3/4 更旧,因此更有可能得到完全支持,但我想这没什么区别。

问题

如何使用 cygwin 创建简单的 ext2 硬链接?

答案1

Windows 确实支持硬链接。但是,CreateHardLink说明了一切:

该功能仅支持NTFS文件系统

这个限制可能是硬编码的。因为 ext2fsd 显然不是 NTFS,所以 Windows 将拒绝在其上创建硬链接。

Cygwin 在 Windows API 之上提供了 POSIX API 兼容性(某种程度上)。这意味着它最终也会调用CreateHardLink并受到mklink与其他 Windows 软件相同的限制。

e2fsprogs软件包中的许多工具(例如mke2fs、、、...)直接在磁盘上操作,而不依赖于文件系统驱动程序。这就是为什么在使用它们更改内容之前必须卸载文件系统的原因。这也是为什么它们可以在 Windows(本机)无法访问 ext2/3/4 的情况下工作的原因。e2fsckresize2fs

相关内容