/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
答案1
但我只能在/dev目录中创建硬链接,在其他目录中不可能。
如错误消息所示,无法跨不同文件系统创建硬链接;您只能创建软(符号)链接。
例如,如果您的/home
分区与根分区不同,您将无法硬链接/tmp/foo
到/home/user/
.
现在,正如 @RichardNeumann 指出的那样,/dev
通常安装为 devtmpfs 文件系统。看这个例子:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
因此,您只能创建指向/dev
内文件的硬链接/dev
。
答案2
硬链接不能用于实现您想要的目的,因为硬链接在文件系统之间不起作用。
但是,您可以通过命令实现您想要的目的mknod
。
运行
ls -l /dev/devicefile
。你应该看到如下输出:crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- 记下尺寸列 ( ) 中的数字
1, 9
。 - 运行命令
mknod /path/to/destination c 1 9
(替换您想要的值)。
为什么这有效?
设备文件实际上是指向由内核或内核驱动程序实现的抽象文件的硬链接。虽然您无法从另一个文件系统创建到文件系统对象的硬链接,但它们不是文件系统对象,因此,通过了解它们的主要和次要参考号,您可以从任何文件系统创建对它们的引用。
答案3
硬链接只是在目录中创建另一个条目,指向文件(其中文件是类似文件的东西,例如目录)。因此,硬链接不能引用另一个文件系统中的文件。
在这种情况下,软链接是你的朋友。使用ln -s
。软链接可以跨文件系统,甚至可以指向不存在的东西。