मैं अन्य डिवाइसों से / देव निर्देशिका में डिवाइस फ़ाइल से हार्ड लिंक क्यों नहीं बना सकता?


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

लेकिन मैं केवल / देव निर्देशिका में एक कड़ी बना सकता था और यह अन्य निर्देशिकाओं में संभव नहीं था।

जैसा कि त्रुटि संदेश द्वारा दिखाया गया है, विभिन्न फाइल सिस्टमों में कड़ी बनाना संभव नहीं है; आप केवल नरम (प्रतीकात्मक) लिंक बना सकते हैं।

उदाहरण के लिए, यदि आपके /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


3
विभाजन मुद्दा नहीं है। यह है, जैसा कि आपने क्रॉस-फाइलसिस्टम सीमा कहा था। /devआमतौर पर एक devtmpfsफाइलसिस्टम के रूप में माउंट किया जाता है । इस प्रकार आप केवल फाइलों में हार्डलिंक बना सकते /devहैं /dev। आप जैसे भी करने के लिए hardlinks नहीं बना सकते /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। सॉफ्टलिंक्स फाइल सिस्टम में जा सकते हैं, और यहां तक ​​कि ऐसी चीज की ओर भी इशारा कर सकते हैं जो वहां नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.