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


11

ルートモードで/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ディレクトリ(または他のディレクトリ)の既存のデバイスファイル(など)からハードリンクを作成する方法を知りたいですか?

回答:


21

しかし、私は/ devディレクトリにのみハードリンクを作成でき、他のディレクトリではそれができませんでした。

エラーメッセージに示されているように、異なるファイルシステム間でハードリンクを作成することはできません。ソフト(シンボリック)リンクのみを作成できます。

たとえば/home、ルートパーティションとは別のパーティションにいる場合、にハードリンク/tmp/fooすることはできません/home/user/

今、@ /devRichardNeumannが指摘したように、通常は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


3
パーティションは問題ではありません。あなたが述べたように、クロスファイルシステムの制限です。/dev通常はdevtmpfsファイルシステムとしてマウントされます。したがって、/dev内のファイルへのハードリンクのみを作成できます/dev。たとえば、異なるファイルシステムとしてマウントされているため、/dev/nullwithin へのハードリンクを作成することさえできません。/dev/ptsdevpts
リチャードノイマン

1
@RichardNeumann良い点。私は部分的にしか正しくなかった私の答えを修正しました。
dr01

11

ハードリンクはファイルシステム間では機能しないため、ハードリンクを使用して目的を達成することはできません。

ただし、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(必要な値に置き換えます)。

なぜこれが機能するのですか?

デバイスファイルは、カーネルまたはカーネルドライバーによって実装される抽象ファイルへの効果的なハードリンクです。別のファイルシステムからファイルシステムオブジェクトへのハードリンクを作成することはできませんが、これらはファイルシステムオブジェクトではないため、それらのメジャーおよびマイナー参照番号を知ることにより、任意のファイルシステムからそれらへの参照を作成できます。



2

ハードリンクは、ファイルを指すディレクトリに別のエントリを作成するだけです(ファイルはディレクトリなどのようなファイルです)。したがって、ハードリンクは別のファイルシステムのファイルを参照できません。

この場合、ソフトリンクはあなたの友達です。を使用しln -sます。ソフトリンクはファイルシステムを行き来することができ、そこにないものを指すことさえできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.