我知道禁止在目录上创建硬链接,因为这会导致内存错误,但我想绕过这个限制。可以做到吗?
我通过使用创建链接ln
,在我尝试做一些事情之后,ln dir1 dir2
我得到了ln: dir1: hard link not allowed for directory
答案1
无法在目录上创建硬链接的原因不是内存问题。而是因为它会在文件系统层次结构中创建一个循环,并且这是文件系统所禁止的。这是无法绕过的。
如果您想要目录链接,有以下几种选择:
- 符号链接(
ln -s
) - 绑定挂载(仅限 root)
- nfs 挂载(和其他网络文件系统)(仅限根,仅限导出的文件系统)
话虽如此,实际上可以间接地创建指向目录的硬链接。每个目录都有两个指向目录的硬链接 -.
一个链接到目录本身,..
另一个链接到父目录。因此,如果您检查目录中的硬链接数,就会发现其中有多少个子目录。您可以通过创建更多子目录来创建更多硬链接。(请注意,某些文件系统会动态生成这些链接,但实际上并不存储它们。)
答案2
debugfs
有可能,如果你选择的文件系统有类似或 的工具xfs_db
。使用它来创建指向你选择的 inode 号的目录条目。但是,文件系统检查可能每次都会继续尝试更正它。
如果您遇到链接需要进入/退出 chroot 或类似情况的情况,请改用绑定挂载。(大多数容器或沙箱工具已经知道如何设置绑定挂载。)
答案3
我做过一次,是在内核 0.95 Linux 软着陆系统发行版的 extfs 上。
之后我无法取消链接双重链接目录
答案4
正如您之前所说,出于某些原因,无法在目录上创建硬链接。我认为最重要的原因是,可能会意外创建具有无限深度的文件树结构。
但是,cp -lR <src-dir> <dest-dir>
您可以递归地为每个文件创建硬链接。这不完全是相同的语义,因为每个目录仍被复制且未硬链接,但每个文件都是如此,但我想这非常接近您可能需要的。