2

我的硬盘上有多个相同的文件存储在多个位置。我想我可以通过硬链接它们指向同一个文件来节省大量的磁盘空间。我有点担心可能会产生灾难性的副作用。

我猜它不会影响权限,因为它们存储在各自的目录中,就像文件名一样,对吧?(更新:显然,我猜错了,权限是共享的,正如卡尔在他的回答中所展示的)

最大的担忧是对一个文件的更改无意中也更改了其他文件。只读文件应该是安全的。并且可以更改的文件也可以,如果不是在现有文件中更新,而是写入一个新文件。我相信大多数应用程序都是这样工作的,但可能不是全部。

还有什么要考虑的吗?

我在 OS X / HFS+ 上。

4

4 回答 4

2

如果您希望对一个文件的更改不反映在其他文件中,请不要使用硬链接。这就是硬链接的全部意义——同一个文件的多个目录条目(磁盘上的相同块)。更改硬链接名称之一的权限会同时更改它们:

$ touch file
$ ln file link
$ ls -l
total 0
-rw-r--r--  2 owner group  0 Nov 11 16:44 file
-rw-r--r--  2 owner group  0 Nov 11 16:44 link
$ chmod 444 file
$ ls -l
total 0
-r--r--r--  2 owner group  0 Nov 11 16:44 file
-r--r--r--  2 owner group  0 Nov 11 16:44 link

ln手册页:

文件的硬链接与原始目录条目无法区分;对文件的任何更改实际上都独立于用于引用文件的名称。

于 2009-11-12T00:42:20.647 回答
1

我写了一个小脚本来做到这一点。如果您的备份跨越多个用户或系统文件,我只会关心权限。

我在 CD 和 DVD 上有一堆旧备份,其中很多都有很多冗余数据。我没有筛选所有这些信息并删除重复项,而是采用 Time Machine 路线并在所有匹配文件之间建立了硬链接(真正匹配的内容,我对它们进行了 SHA1 校验和)。

现在我所有的备份卷看起来都像以前一样,并且大多数冗余文件都是历史记录。一个小问题是许多媒体文件在文件内容中存储元数据,因此每个版本都略有不同。有关 python 代码,请参阅本文。无担保!!!

确保你mdimport your_backup_dir/事后做:当你进行大量数据操作时,Spotlight 和 Finder 会有点慌张。我以这种方式对我的 240 GB 备份文件夹进行了重复数据删除,大约需要 45 分钟。

另请注意,大多数 OSX 应用程序会破坏您的硬链接并保存在新的 inode 中,大多数 UNIX 应用程序可能会保留硬链接(我听说,emacs 除外)。

于 2010-03-09T04:41:45.743 回答
0

硬链接通常不是最佳实践。普通的旧软/符号链接(ln -s)也应该同样有效。

于 2009-11-12T00:42:54.343 回答
0

如果您的主要目标是如您在其中一个评论中提到的“重复 Time Machine 备份”,那么避免您的一些担忧的另一个选项是使用Time Machine 首选项消除 Time Machine 中的重复数据。您可以在目录或文件级别排除。

于 2012-11-26T16:13:56.270 回答