
/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
ハードリンクは、単にファイルを指す別のエントリをディレクトリに作成します(ここで、fileはディレクトリと同じファイルに似ています)。したがって、ハードリンクは他のファイルシステム上のファイルを参照できません。
この場合、ソフトリンクはあなたの友人です。使用ln -s
。ソフトリンクはファイルシステムにまたがる可能性があり、存在しないものを指すこともあります。