আসল সমস্যা
একটি ফাইল সিস্টেমে আমার একটি ফাইল রয়েছে: /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
, বা হার্ড লিঙ্কটি ডিভাইসগুলিতে কাজ করছে যা অবৈধ হওয়া উচিত, তবে যে কোনওভাবে কাজ করে। আমি কী মিস করছি?