![创建旧式“慢速”符号链接](https://linux22.com/image/178092/%E5%88%9B%E5%BB%BA%E6%97%A7%E5%BC%8F%E2%80%9C%E6%85%A2%E9%80%9F%E2%80%9D%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5.png)
ln -s
创建“快速”符号链接。如果您将它们(及其目标)复制到例如光学介质,它们就会损坏。我相信旧式的“慢速”符号链接可以工作,但是我如何创建它们?ln
我找不到任何标志或其他命令。
一些上下文信息,来自符号链接的维基百科页面:
符号链接的早期实现将符号链接信息作为数据存储在常规文件中。该文件包含对链接目标的文本引用,文件模式位指示文件的类型是符号链接。
这种方法很慢,并且在小型系统上对磁盘空间的利用效率低下。一项称为快速符号链接的改进允许在用于在磁盘(索引节点)上存储文件信息的数据结构内存储目标路径。该空间通常存储分配给文件的磁盘块地址列表。因此,可以快速访问具有短目标路径的符号链接。如果目标路径超出可用的索引节点空间,具有快速符号链接的系统通常会回退到使用原始方法。原始样式被追溯称为慢符号链接。它还用于与其他或旧版本操作系统的磁盘兼容性。
答案1
没有办法告诉ln
创建“快”或“慢”符号链接,文件系统决定它如何存储符号链接。
处理光学介质上的符号链接表示取决于处理转换的程序或提供对介质的访问的文件系统驱动程序,而不是由源文件系统决定。例如,mkisofs
可以使用 Rock Ridge 扩展或TRANS.TBL
文件来表示符号链接。它还可以处理硬链接。
答案2
您关于“快”和“慢”符号链接行为不同的假设是不正确的。两者都只是将目标路径存储为文本。这里的优化是使用目录条目中的空间来存储该文本(如果它足够短)。如果路径太长,文件系统将透明地使用另一个块来存储路径,就像使用另一个块来存储文件的内容一样。这比较慢,因为它需要从磁盘读取两次,但实际上您很少会注意到其中的差异。如果您有 SSD 或 NVMe 驱动器,则尤其如此。
您可以改为使用符号链接的相对路径。当您将文件复制到另一个磁盘时,只要源和目标彼此具有相同的关系,符号链接就会继续按预期工作。作为奖励,相对路径可能比绝对路径短,因此更有可能适合目录条目。
答案3
也许你的意思是“硬”和“软”链接?只有“软”链接是象征性的。硬链接将 inode 引用工作到目录中,就像“常规”文件一样。
理论上“硬”链接速度更快,但“软”链接的优点是能够跨文件系统。
如果想要硬链接,该命令ln
不带-s
标志,并且存在无法创建链接的情况。使用该-s
标志,将创建一个软链接或包含其他文件(以特殊格式)的路径的文件。此符号链接较慢,但仅慢一点点;因为,操作系统需要打开文件来读取新的路径,然后在读取的路径上重新请求文件。使用硬链接时,目录项直接指向文件,因此不会发生上面的多步操作,它只是直接进入文件的第一个块。
至于“慢”/“快”符号链接,它们现在已经成为历史了。大多数文件系统的目录索引节点表中都有空间。如果文件小到足以容纳 inode 表本身,则不会使用自己的块号创建文件,而是在 inode 表中设置一个标志,并将文件的内容直接存储在 inode 条目中。这只适用于非常小的文件,符号链接就是此类文件之一。
由于您无法告诉操作系统如何在此级别的文件系统中存储数据,因此强制采用一种或另一种存储方法的方式是有限的。例如,您可以使用非常长的路径来确保溢出 inode 条目存储。同样,您可以编写一个绕过常规文件系统库修改磁盘块的程序(当然,您还必须解决相同的操作系统管理问题,因为它会尝试拒绝此类操作,因为更新文件系统是操作系统的责任)