使用硬链接重复数据删除相同的文件

时间:2009-11-12 00:40:12

标签: macos filesystems symlink hardlink

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

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

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

还有什么需要考虑的吗?

我在OS X / HFS +上。

4 个答案:

答案 0 :(得分: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手册页:

  

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

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

硬链接通常不是最佳做法。普通的旧软/符号链接(ln -s)应该同样适用。

答案 3 :(得分:0)

如果您的主要目标是在其中一条评论中提到“重复使用Time Machine备份”,那么另一个避免您担心某些问题的选项就是使用Time Machine preferences消除Time Machine中的欺骗行为。您可以在目录或文件级别排除。