/ devディレクトリ外のデバイスファイルからハードリンクを作成できないのはなぜですか?

/ devディレクトリ外のデバイスファイルからハードリンクを作成できないのはなぜですか?

/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

  1. 走るls -l /dev/devicefile。次の出力が表示されます。

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. 測定基準列の数字()を確認してください1, 9
  3. コマンドを実行しますmknod /path/to/destination c 1 9(必要な値を変更します)。

これがうまくいくのはなぜですか?

デバイスファイルは、実際にはカーネルまたはカーネルドライバによって実装された抽象ファイルへのハードリンクです。他のファイルシステムからファイルシステムオブジェクトへのハードリンクを作成することはできませんが、ファイルシステムオブジェクトではありません。

答え3

ハードリンクは、単にファイルを指す別のエントリをディレクトリに作成します(ここで、fileはディレクトリと同じファイルに似ています)。したがって、ハードリンクは他のファイルシステム上のファイルを参照できません。

この場合、ソフトリンクはあなたの友人です。使用ln -s。ソフトリンクはファイルシステムにまたがる可能性があり、存在しないものを指すこともあります。

関連情報