मूल समस्या
मेरे पास एक फाइल सिस्टम पर एक फाइल है: /data/src/file
और मैं इसे कड़ी से कड़ी करना चाहता हूँ: /home/user/proj/src/file
लेकिन /home
एक डिस्क पर है, और /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
बाइंड माउंट डायरेक्टरी से इनकोड एक्सेस कर सकता हूं, इसलिए या तो बाइंड माउंट उसी विभाजन पर होना चाहिए /data
, या हार्ड लिंक डिवाइसों पर काम कर रहा है, जो कि अवैध होना चाहिए, लेकिन वैसे भी काम करता है। मैं क्या खो रहा हूँ?