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
など)からハードリンクを作成する方法を知りたいですか?
しかし、私は/ 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
内のファイルへのハードリンクのみを作成できます。
ファイルシステム間ではハードリンクが機能しないため、ハードリンクを使用して目的を達成することはできません。
ただし、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
を実行します(必要な値に置き換えます)。デバイスファイルは、カーネルまたはカーネルドライバーによって実装される抽象ファイルへの効果的なハードリンクです。別のファイルシステムからファイルシステムオブジェクトへのハードリンクを作成することはできませんが、これらはファイルシステムオブジェクトではないため、それらのメジャーおよびマイナー参照番号を知ることにより、任意のファイルシステムからそれらへの参照を作成できます。
ハードリンクは、ファイルを指すディレクトリに別のエントリを作成するだけです(ファイルはディレクトリなどのファイルのようなファイルです)。したがって、ハードリンクは別のファイルシステムのファイルを参照できません。
この場合、ソフトリンクはあなたの友達です。使用する ln -s
。ソフトリンクはファイルシステムを行き来することができ、そこにないものを指すことさえできます。