当我想以root/home
模式在我的目录中创建硬链接时,Linux 显示以下错误消息:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
上面的错误信息如下所示:
# cd /home/user/
# ln /dev/sda1 my_sdb
但是我只能在目录中创建硬链接,/dev
在其他目录中是不可能的。
现在,我想知道如何从目录(或其他目录)sdb1
中的现有设备文件(如)创建硬链接?/home
如错误消息所示,无法跨不同文件系统创建硬链接;您只能创建软(符号)链接。
例如,如果您
/home
的分区与根分区不同,您将无法硬链接/tmp/foo
到/home/user/
.现在,正如@RichardNeumann 指出的那样,
/dev
通常作为 devtmpfs 文件系统挂载。看这个例子:因此,您只能在 .in 中创建指向文件的硬
/dev
链接/dev
。硬链接不能用来实现你想要的,因为硬链接在文件系统之间不起作用。
mknod
但是,您可以使用该命令实现您想要的。运行
ls -l /dev/devicefile
。你应该看到这样的输出:1, 9
) 中的数字。mknod /path/to/destination c 1 9
(替换您想要的值)。为什么这行得通?
设备文件实际上是指向由内核或内核驱动程序实现的抽象文件的硬链接。虽然您不能从另一个文件系统创建到文件系统对象的硬链接,但这些不是文件系统对象,因此,通过了解它们的主要和次要参考号,您可以从任何文件系统创建对它们的引用。
硬链接只是在目录中创建另一个条目,指向一个文件(其中文件是类似文件的东西,例如目录)。因此硬链接不能引用另一个文件系统中的文件。
在这种情况下,软链接是你的朋友。使用
ln -s
. 软链接可以跨越文件系统,甚至可以指向不存在的东西。