"क्लाइंट" मशीनों पर, स्थानांतरित करने का सुरक्षित तरीका /tmp
रीबूट करना है। यहाँ, क्लाइंट द्वारा, मेरा मतलब कुछ भी है जो प्रोग्राम चलाता है जो /tmp
विशेष रूप से एक्स सर्वर और स्क्रीन में सॉकेट डालता है ।
नए को /tmp
निश्चित रूप से सही अनुमति (1777) की आवश्यकता है, अन्यथा आप एक कार्य प्रणाली की उम्मीद नहीं कर सकते।
के लिए /tmp
, आप उतना किसी भी फाइल कॉपी नहीं कर सकते। ऐसा इसलिए है क्योंकि अधिकांश समय, प्रोग्राम जो /tmp
फाइलों को खोलने में सामान रखते हैं । यदि आप फ़ाइल की प्रतिलिपि बनाते हैं, तो वह सामग्री की प्रतिलिपि बनाता है, लेकिन प्रोग्राम में अभी भी पुरानी फाइलें खुली हैं। आप एक डिबगर ( ptrace
) के साथ उन तक पहुंचने में सक्षम हो सकते हैं , लेकिन यह रिबूटिंग की तुलना में बहुत अधिक जटिल होगा, और कई कार्यक्रमों के साथ आप जो भी करेंगे, उन्हें वैसे भी दुर्घटनाग्रस्त कर देगा।
यदि आपका /tmp
पेट भर गया है और आप एक नए लाइव पर स्विच करना चाहते हैं, तो आपको उन सभी कार्यक्रमों को फिर से शुरू करना होगा, जिनके पास फाइलें खुली हैं। चूंकि इसका मतलब है कि एक्स और स्क्रीन सत्र को फिर से शुरू करना, यह रिबूट करने से बेहतर नहीं है।
आपको नए कार्यक्रमों के लिए स्विच करने में सक्षम होना चाहिए लेकिन यूनियन माउंट का उपयोग करके मौजूदा खुली फाइलों को रखना चाहिए । (सिद्धांत ध्वनि है, लेकिन मैंने कभी कोशिश नहीं की है, इसलिए मेरे द्वारा अनपेक्षित मुद्दे हो सकते हैं।) यहां लिनक्स पर ऐसा करने का एक तरीका है।
/tmp
कुछ मैन्युअल रूप से चयनित बड़ी को छोड़कर सभी मौजूदा फ़ाइलों को रखें ।
- एक
/tmp.new
मोड बनाएं (मोड 1777)।
/tmp
एक अलग रास्ते पर बेनकाब mount --bind / /.root.only
:। यह आवश्यक है क्योंकि अगला चरण छाया होगा /tmp
। अलग-अलग यूनियन माउंट कार्यान्वयन हो सकते हैं जिन्हें इस चरण की आवश्यकता नहीं है।
- एक संघ के माउंट बनाने
/.root.only/tmp
और /tmp.new
, पर रखा /tmp
। इस तरह से बनाई गई नई फाइलें अंदर /tmp
लिखी जाएंगी /tmp.new
, लेकिन वे फाइलें /.root.only/tmp
भी नीचे दिखाई दे रही हैं /tmp
। एक संभावना यह है
unionfs-फ्यूज : unionfs-fuse /tmp.new:/.root.only/tmp /tmp
।
यदि आप यूनियन माउंट रूट पर नहीं जाना चाहते हैं (जैसे कि यह आपके प्लेटफ़ॉर्म पर उपलब्ध नहीं है, या क्योंकि यह बहुत अधिक परेशानी है), तो कम से कम पुरानी निर्देशिका को हटाएं नहीं। इसे स्थानांतरित करें , ताकि चलने वाले प्रोग्राम पुरानी निर्देशिका का उपयोग करते रहेंगे और नए प्रोग्राम नए का उपयोग करेंगे। (बेशक नए कार्यक्रम सॉकेट या पाइप के माध्यम से पुराने कार्यक्रमों के साथ संवाद करने में सक्षम नहीं होंगे, /tmp
जब तक कि आप सेट न करें TMPDIR
या अन्यथा उन्हें बताएं कि कहां देखना है।)
mv /tmp /tmp.old && mkdir /tmp