আমি কেন / ডিভ ডিরেক্টরি ছাড়া ডিভাইস ফাইল থেকে একটি হার্ড লিঙ্ক তৈরি করতে পারি না?


11

আমি যখন রুট মোডে আমার /homeডিরেক্টরিতে একটি হার্ড লিঙ্ক তৈরি করতে চেয়েছিলাম , লিনাক্স নিম্নলিখিত ত্রুটি বার্তাটি দেখিয়েছিল:

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?

উত্তর:


21

তবে আমি কেবল / dev ডিরেক্টরিতে একটি হার্ড লিঙ্ক তৈরি করতে পারি এবং অন্যান্য ডিরেক্টরিতে এটি সম্ভব ছিল না।

ত্রুটি বার্তায় প্রদর্শিত হিসাবে, বিভিন্ন ফাইল সিস্টেমের মধ্যে একটি হার্ড লিঙ্ক তৈরি করা সম্ভব নয়; আপনি কেবল নরম (প্রতীকী) লিঙ্ক তৈরি করতে পারেন।

উদাহরণস্বরূপ, আপনি যদি আপনার /homeমূল পার্টিশনের চেয়ে আলাদা পার্টিশনে থাকেন তবে আপনি এর সাথে হার্ড লিঙ্ক /tmp/fooকরতে সক্ষম হবেন না /home/user/

এখন, @ রিচার্ডনিউম্যান নির্দেশিত হিসাবে, /devসাধারণত একটি ডেভটিএমপিএস ফাইল সিস্টেম হিসাবে মাউন্ট করা হয়। এই উদাহরণটি দেখুন:

[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


3
পার্টিশনটি ইস্যু নয়। এটি যেমন আপনি ক্রস-ফাইল সিস্টেমের সীমাবদ্ধতার কথা বলেছেন। /devসাধারণত একটি devtmpfsফাইল সিস্টেম হিসাবে মাউন্ট করা হয় । সুতরাং আপনি কেবলমাত্র এর /devমধ্যে ফাইলগুলিতে হার্ডলিঙ্ক তৈরি করতে পারবেন /dev। আপনি উদাহরণস্বরূপ এমনকি এর /dev/nullমধ্যে হার্ডলিঙ্ক তৈরি করতে পারবেন না /dev/pts, কারণ এটি devptsএকটি ভিন্ন ফাইল সিস্টেম হিসাবে মাউন্ট করা হয়েছে ।
রিচার্ড নিউমান

1
পুনঃটুইট আমি আমার উত্তর সংশোধন করেছিলাম যা কেবল আংশিকভাবে সঠিক ছিল।
dr_

11

আপনি যা চান তা অর্জন করতে একটি হার্ড লিঙ্ক ব্যবহার করা যাবে না, কারণ হার্ড লিঙ্কগুলি ফাইল সিস্টেমের মধ্যে কাজ করে না।

তবে আপনি mknodকমান্ডটি দিয়ে যা চান তা অর্জন করতে পারেন ।

  1. চালান ls -l /dev/devicefile। আপনার এইরকম একটি আউটপুট দেখতে হবে:

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. আকার কলামে নম্বর নোট করুন ( 1, 9)।
  3. কমান্ডটি চালান mknod /path/to/destination c 1 9(আপনি যে মানগুলি চান তা প্রতিস্থাপন করে)।

কেন এই কাজ করে?

ডিভাইস ফাইলগুলি কার্যকরভাবে কার্নেল বা কার্নেল ড্রাইভার দ্বারা প্রয়োগ করা একটি বিমূর্ত ফাইলের জন্য শক্ত লিঙ্কগুলি। আপনি অন্য ফাইল সিস্টেম থেকে ফাইল সিস্টেমের জন্য শক্ত লিঙ্কগুলি তৈরি করতে পারবেন না, এগুলি ফাইল সিস্টেম অবজেক্ট নয় এবং তাই, তাদের প্রধান এবং ছোটখাট রেফারেন্স সংখ্যাগুলি জেনে আপনি যে কোনও ফাইল সিস্টেম থেকে তাদের কাছে একটি রেফারেন্স তৈরি করতে পারেন।



2

হার্ড লিঙ্কগুলি কেবল একটি ডিরেক্টরিতে অন্য একটি এন্ট্রি তৈরি করে একটি ফাইলের দিকে নির্দেশ করে (যেখানে ফাইলটি কোনও ফাইলের মতো ডিরেক্টরি, যেমন ডিরেক্টরি)। সুতরাং হার্ড-লিঙ্কগুলি অন্য ফাইল-সিস্টেমে কোনও ফাইলকে উল্লেখ করতে পারে না।

এই ক্ষেত্রে নরম-লিঙ্কগুলি আপনি বন্ধু। ব্যবহার ln -s। সফটলিঙ্কগুলি ফাইল সিস্টেমগুলি জুড়ে যেতে পারে এবং এমন কিছুতেও নির্দেশ করতে পারে যা সেখানে নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.