इनोड (ext4) की हार्ड लिंक कैसे बनाएं?


17

अगर मुझे किसी फाइल का इंडेक्स नोड (इनोड) पता है, लेकिन मुझे इसका रास्ता (या इसका कोई भी रास्ता) नहीं पता है, तो क्या सीधे उस इनोड की हार्ड लिंक बनाना संभव है?

मैं फ़ाइल का उपयोग कर पा सकता हूं sudo find / -inum 123546और फिर हार्डलिंक बना सकता हूं , लेकिन यह मेरे आवेदन के लिए बहुत धीमा होगा।

NB मैं एक ext4 फाइल सिस्टम का उपयोग कर रहा हूँ।


1
बारीकी से संबंधित: इसके इनोड के माध्यम से किसी फ़ाइल को निकालना या उसका नाम बदलना (दोनों जिनमें से सीधे-सीधे करना उतना ही असंभव है)।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


23

AFAIK, कर्नेल एपीआई के साथ नहीं। यदि ऐसा कोई इंटरफ़ेस मौजूद है, तो उसे सुपर-उपयोगकर्ता तक सीमित रखना होगा अन्यथा यह किसी को उन निर्देशिकाओं में फ़ाइलों को एक्सेस करने देगा, जिनकी उन्हें खोज एक्सेस नहीं है।

लेकिन आप debugfsइसे करने के लिए फ़ाइल सिस्टम पर उपयोग कर सकते हैं (एक बार यह अनमाउंट हो गया है) (यह मानते हुए कि आपके पास ब्लॉक डिवाइस पर लिखने की पहुंच है)।

debugfs -w / dev / block / डिवाइस

( /dev/block/deviceवास्तविक ब्लॉक डिवाइस के साथ बदलें फ़ाइल सिस्टम में रहता है)।

फिर, प्रॉम्प्ट पर debugfs, दर्ज करें

स्टेट < 123 >
(कोण कोष्ठक के साथ, 123 को प्रतिस्थापित करते हुए वास्तविक इनोड संख्या के साथ) यह जाँचने के लिए कि फ़ाइल मौजूद है (इनोड की लिंक संख्या 0 से अधिक है) और निर्देशिका नहीं है।

यदि सभी अच्छे हैं, तो दर्ज करें:

ln < 123 > पाथ / टू / न्यूफाइल
हार्डलिंक बनाने के लिए (ध्यान दें कि पथ फाइल सिस्टम के मूल के सापेक्ष है)। के बाद:

mi < 123 >
लिंक की संख्या बढ़ाने के लिए (लिंक Enterफ़ील्ड को छोड़कर सभी क्षेत्रों के लिए प्रेस करें जहां आप वर्तमान मूल्य में 1 जोड़ना चाहते हैं)।


6
इस तरह के एक इंटरफेस को यह भी जांचना होगा कि फ़ाइल में एक नॉनजरो लिंक काउंट है, अन्यथा हटाए गए-लेकिन-अभी भी खुली हुई फ़ाइल को फिर से जीवित करना संभव होगा, जिसे IIRC खारिज कर दिया गया था क्योंकि यह कर्नेल आवेगों का उल्लंघन करता है।
गिल्स एसओ- बुराई को रोकना '

2
@ संबंधित संबंधित: unix.stackexchange.com/a/499760/308316
मस्वी

1
@PhilipCouling, एक निर्देशिका पर निष्पादित अनुमति बिट खोज अनुमति के लिए अनुवाद करता है । मैंने पहले ही निर्देशिकाओं में कहा है कि खोज की पहुंच नहीं है
स्टीफन चेज़लस

3
@OrangeDog, खोज अनुमति POSIX मानक द्वारा उपयोग की जाने वाली शब्दावली है।
स्टीफन चेज़लस

1
@mosvy: उस चेक को कर्नेल से हटाया जा सकता है। यद्यपि आपको खुद को नली नहीं देना है, इसके लिए आपको VFS में कुछ स्थानों को पैच अप करना होगा। मैंने वर्षों पहले अपने थीसिस पर काम करते हुए इसे किया था।
जोशुआ

3

आपके उपयोग के मामले के आधार पर, एक और तरीका यह हो सकता है कि पहले सभी फ़ाइल उम्मीदवारों को एक निर्देशिका में इकट्ठा करके इसे कड़ी मेहनत से जमा किया जाए और फिर उन फ़ाइलों को कड़ी से कड़ी कर दिया जाए जिनकी आपको विशेष रूप से रुचि है।

जैसे कि

mkdir -pm 0700 by-inode/{0..999}
find <path> ! -type d -printf "%i/%p\0" |
  while IFS=/ read -rd '' i n; do
    ln "$n" "by-inode/$((i/1000))/$i"
  done

(यह मानते हुए कि आपके इनोड संख्याएं 1,000,000 से कम हैं, यदि आवश्यकता हो तो अधिक निर्देशिका बनाएं)।

बाद में, आपके इनोड्स को 1000-वार वर्गीकृत किया जाता है और by-inode/पेड़ में एकत्र किया जाता है। वहां से, आप उन्हें आवश्यकतानुसार लिंक कर सकते हैं।

ध्यान दें कि इसका मतलब है कि <path>उस अतिरिक्त हार्ड लिंक की वजह से फ़ाइलों को हटाने से स्थान पुनः प्राप्त नहीं होगा।

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