元の問題
1つのファイルシステムにファイルがあります。 /data/src/file
そして私はそれをハードリンクしたいと思います: /home/user/proj/src/file
しかし/home
、1つのディスク上にあり/data
、別のディスク上にあるため、エラーが発生します。
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
さて、デバイス間でハードリンクできないことを学びました。理にかなっています。
手元の問題
だから私は空想を得て、のファイルシステムsrc
上にあるフォルダーをバインドマウントすると思いました/data
:
$ mkdir -p /data/other/src
$ cd /home/user/proj
$ sudo mount --bind /data/other/src src/
$ cd src
$ # (now we're technically on `/data`'s file system, right?)
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
なぜこれがまだ機能しないのですか?
回避策
/data
バインドされたディレクトリではなく「実際の」ディレクトリにいる限り、ハードリンクを作成できるので、私はこの設定が正しいことを知っています。
$ cd /data/other/src
$ ln /data/src/file .
$ # OK
$ cd /home/user/proj/src
$ ls -lh
total 35M
-rw------- 2 user user 35M Jul 17 22:22 file
$
一部のシステム情報
$ uname -a
Linux <host> 4.10.0-24-generic #28-Ubuntu SMP Wed Jun 14 08:14:34 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ findmnt
.
.
.
├─/home /dev/sdb8 ext4 rw,relatime,data=ordered
│ └─/home/usr/proj/src /dev/sda2[/other/src]
│ ext4 rw,relatime,data=ordered
└─/data /dev/sda2 ext4 rw,relatime,data=ordered
$ mountpoint -d /data
8:2
$ mountpoint -d /home/usr/proj/src/
8:2
注:状況をわかりやすくするためにファイルとディレクトリの名前を手動で変更したため、コマンドの読み取りにタイプミスがある場合があります。
/data
、バインドマウントディレクトリからiノードにアクセスできるので、バインドマウントはと同じパーティション上にある必要があります/data
。または、ハードリンクがデバイス間で機能していて、これは違法ですが、とにかく機能します。何が欠けていますか?