我同意硬链接文件夹/目录如果不小心可能会导致问题,但它们有一个非常明确的优势 - 时间机器就是一个完美的例子。如果没有它们,它根本就不实用,因为文件的冗余版本的重复甚至会很快消耗最大的磁盘。
只要您遵循 Amit Singh 的六个规则,Snow Leopard 就可以创建目录的硬链接:
- 文件系统必须采用 HFS+ 日志记录。
- 源目录和目标目录的父目录必须不同。
- 源的父目录不能是根目录。
- 目标不得位于根目录中。
- 目标不能是源的后代。
- 目标不得有任何目录硬链接的祖先。
因此,雪豹已经失去了创建硬链接的能力是完全不正确的
文件夹。
我刚刚验证了链接/取消链接在 Snow Leopard 上确实有效 - 只要您遵循六个
规则。我刚刚尝试过,它在我的 Snow Leopard 10.6.6 系统上运行良好 - 在启动卷和单独的 USB 外部卷上尝试过,在两种情况下都运行良好。
这是“hunlink.c”程序:
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
if (argc != 2)
return 1;
int ret = unlink(argv[1]);
if (ret != 0)
perror("unlink");
return ret;
}
gcc -o hunlink hunlink.c
因此,尝试时要小心 - 记住遵循规则并使用 hlink 创建这些硬链接,然后使用 hunlink 删除硬链接。并且不要忘记记录
您以后所做的事情或为其他可能需要知道这一点的人所做的事情。
我刚刚了解到这些文件夹的“硬链接”的另一个“陷阱”。当您创建它们时,Mac OS X 的“幕后”确实发生了很多事情。一个非常重要的问题是您创建链接的文件夹实际上被移动到了一个名为 /.HFS+ 的超级神奇的超级隐藏文件夹Private Directory Data%000d/dir_xxx 其中 xxx 是“source_folder”的 inode 号 - 请记住命令的格式是
hlink source_folder target_folder
因此,您必须小心不要在“source_folder”中打开任何文件,因为如果您这样做,它们就会被移动到超级神奇的文件夹中,如果您尝试保存任何更改,您可能会遇到问题到“source_folder”中打开的那些文件。这种情况在我身上发生过几次,直到我明白发生了什么,而且解决方案非常简单。我注意到,您无法再执行“ls -la”命令,而不会在原始“source_folder”中的所有文件夹/目录中出现有趣的错误,但您可以执行“ls”命令,并且一切看起来都很好。
如果您在“磁盘实用程序”程序中运行“验证磁盘”,您会注意到它可能会抱怨并给出“卷位图需要对孤立块进行小修”,这就是创建超级神奇文件夹时发生的情况,并且将“source_folder”移动到它。
如果您确实发现自己处于这种“孤立块”的情况,请首先将更改的文件保存到不在包含“source_folder”树的卷中的其他临时位置,然后使用“磁盘工具”卸载并重新装载包含该文件的卷。 “source_folder”或只是重新启动计算机。然后将您保存到临时位置的文件复制回其原始位置,您就可以恢复正常工作了。这对我有用,所以不能保证这也对你有用。因此,在您拥有良好备份的卷上尝试此操作可能是一个好主意,以防万一。
看起来很奇怪,所有这些开销只是为了创建文件夹硬链接的简单任务而发生的。有谁知道为什么 Mac OS X 会付出如此多的努力来创建文件夹的硬链接?这与这是一个“日志式”文件系统有关吗?
我通过阅读 Amit Singh 对他的“hfsdebug”实用程序的解释,发现了有关超级神奇、超级隐藏位置的信息。如果您想了解更多详细信息,请访问他的网站:Amit Singh 的 hfsdebug 实用程序 https://web.archive.org/web/20200910033812/https://osxbook.com/blog/2008/11/09/hfsdebug-40-and-new-hfs-features/。这是一个非常有趣的软件,会告诉您许多有关 HFS+ 文件系统的详细信息。它是免费的,我鼓励您下载并尝试一下。它不再受支持,但仍然适用于 Snow Leopard 和 Leopard - 基本上任何 HFS+ 支持的系统。你不能用它真正造成任何伤害,因为它是一个“只读”工具 - 所以它非常适合用来查看文件系统的一些细节。
关于这些“文件夹的硬链接”的另一个问题 - 一旦您创建了一个并且超级神奇的超级秘密隐藏文件夹被创建,它就永远存在。即使您取消链接最初创建它的文件夹,这个神奇的文件夹仍然存在。不知道为什么,但确实如此。如果您想尝试一下,可以使用“hfsdebug”来找出答案。您还可以使用“hfsdebug”来查明驱动器上存在多少个“文件夹硬链接”。有关这些详细信息,请参阅 Amit 关于“hfsdebug”实用程序的文章。
他还有另一个受支持但收费的新实用程序。它称为 fileXray,一个人在同一家庭中任意数量的计算机上购买个人非商业类型许可证的费用为 79 美元。它有一份长达 173 页的详细用户指南,您可以在购买之前下载该指南以了解它的功能。不幸的是,没有试用版,因此请阅读手册并查看网站以获取更多详细信息,看看它是否可以帮助您摆脱困境。在他们的网站上了解有关它的所有详细信息 - 请参阅fileXray 网站 https://web.archive.org/web/20200103162305/https://filexray.com/了解更多信息。
使用这些文件夹硬链接时,您应该注意几个问题。如果创建它们的卷安装到远程客户端,则可能会出现严重问题,具体取决于它们的安装方式。如果您使用 AFP 将卷安装到远程客户端,则会出现大问题,因为任何当前具有硬链接或曾经有一个但后来被删除的文件夹将无法用作所有较低级别的文件夹(但文件除外)将无法从 Finder 或终端窗口访问。如果您尝试执行简单的“ls -lR”命令,它将失败并为所有较低级别的文件夹提供“ls:xxx:没有这样的文件或目录”错误消息。如果您使用 Finder 窗口遍历远程卷的目录树,则当您第一次单击文件夹名称时,具有硬链接的文件夹中的文件夹将消失,不会出现任何错误。
如果您使用 NFS 挂载远程客户端(并假设系统上有一个 NFS 服务器,且该卷具有本地 HFS+ 文件系统),则似乎不会出现这些问题(错误消息除外)。这里不详细介绍如何使用 NFS 挂载卷。我使用了 Marcel Bresink 博士提供的一个名为“NFS Manager”的优秀程序来帮助在服务器和客户端上安装 NFS。您可以从他的网站上获取它 - 只需在您最喜欢的搜索引擎中搜索“Bresink NFS Manager”,但他有免费试用版,因此您可以在购买前试用。如果您想学习如何进行 NFS 安装,这并不是什么大问题,但“NFS 管理器”使设置和调整所有不同设置以帮助优化它变得非常容易。他还有其他几个简洁的 Mac OS X 实用程序,价格非常合理 - 一个称为“硬件监视器”,可让您监视和绘制各种内容,例如电源使用情况、CPU 温度、风扇速度以及许多其他变量。长时间(从几分钟到几天)本地和远程 Mac 系统。如果您喜欢方便的实用程序,绝对值得一试。
我注意到的一件事是 NFS 文件传输比通过 AFP 慢大约 20%,但你的“里程可能会有所不同”,所以不能保证一种方式或另一种方式,但我宁愿拥有一些可以工作的东西,即使我有与什么都不做相比,付出 20% 的性能损失。
Apple 意识到硬链接和远程 AFP 文件系统的问题,他们将其称为 AFP 客户端的“实现限制” - 我更喜欢称其为我真正看到的那样 - 一个 BUG!我只能希望 Mac OS X 的下一个版本能够解决这个问题,因为我真的很喜欢能够在有意义的情况下使用文件夹的硬链接。
这些注释是我个人的观点,我不对其正确性做出任何保证,因此使用它们的风险由您自行承担。在使用这些“文件夹硬链接”之前,请做好备份,以防发生意外情况。但如果您决定更多地了解 Mac OS X 的这个有趣方面,我希望您能玩得开心。