মারা যাওয়ার পরে খোলা ফাইল হ্যান্ডলগুলি কোথায় যায়?


15

মুছে ফেলা ফাইলগুলির যখন তাদের কাছে একটি ফাইল হ্যান্ডেল খোলা থাকে তখন তাদের কী হবে?

এমপিলেয়ারে খেলা চলাকালীন আমি কোনও ভিডিও ফাইল মুছতে পারি এবং এটি এখনও শেষ অবধি খেলতে পারার পরে আমি ভাবছিলাম । এটি কোথা থেকে তথ্য টানছে? এটি কি এখনও হার্ড ড্রাইভ থেকে আসছে? আমি ফাইলটি মুছে ফেলার পরে এটি কি র‍্যামের অনুলিপি হয়ে গেল?

এটি যদি এখনও হার্ড ড্রাইভে থাকে তবে প্রোগ্রামটি যখন অপ্রয়োজনীয় স্থান থেকে পড়া শুরু হচ্ছে তখন আমি ফাইল সিস্টেমটি পূরণ করি তবে কী হবে? যদি এটি র‌্যামে বাফার হয় তবে আমি বাফারগুলি ফ্লাশ করলে কী হবে?

ফাইলটি যদি কোনও এনএফএস শেয়ারে থাকে happens তা কি সার্ভারে সঞ্চিত থাকে? (এটি কি সুরক্ষা ঝুঁকি নয় tons টন খোলা রিমোট ফাইল হ্যান্ডলগুলি দিয়ে ডস?)

এরকম একটি lsof -n |grep '(deleted)'কখনও কখনও আকর্ষণীয় ফলাফল উৎপাদ; যদি আমি ভাগ করে নেওয়া লাইব্রেরি ফাইলগুলিকে সরিয়ে আনে এমন প্যাকেজগুলি আপগ্রেড করছি, তবে সেই লাইব্রেরিগুলি ব্যবহার করা প্রোগ্রামগুলি চলমানগুলি এখনও সেগুলি ব্যবহার করতে সক্ষম হবে যেন কিছুই পরিবর্তন হয়নি।

বোনাস প্রশ্ন: এই পরিস্থিতিতে মৃত থেকে ডেটা ফেরত পাওয়ার কোনও উপায় আছে কি?

উত্তর:


13

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

debugfs এবং অনুরূপ সরঞ্জামগুলি ইনোডগুলির সামগ্রী পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে।


10
এটি সঠিক, তবে যদি ফাইলটি এখনও খোলা থাকে তবে আপনি / proc / <PID> / fd এ গিয়ে ফিরে পেতে পারেন যেখানে পিআইডি এমন কোনও প্রোগ্রামের পিড যেখানে ফাইলটি এখনও খোলা আছে। এই ডিরেক্টরিতে প্রোগ্রামের সমস্ত ওপেন ফাইল বর্ণনাকারী রয়েছে এবং আপনি এগুলি সাধারণ ফাইলের মতো অ্যাক্সেস করতে পারেন, যাতে আপনি ফাইলটি 'পুনরুদ্ধার' করতে একটি হার্ড লিঙ্ক তৈরি করতে পারেন।
প্যাট্রিক

/procলিনাক্স-নির্দিষ্ট (যেমন আছে debugfs) নোট করুন ।
Ignacio Vazquez-Abram

1
সোলারিসের একটি / প্রোও রয়েছে এবং কৌশলটি ঠিক সূক্ষ্মভাবে কাজ করে। বিএসডি সম্পর্কে জানেন না।
প্যাট্রিক

2
আমাকে কেবল যুক্ত করতে হবে এটি দুর্দান্ত।
n0pe

1
@ পেট্রিক: আপনি কোনও ফাইল 'পুনরুদ্ধার' করতে একটি হার্ড লিঙ্ক তৈরি করতে পারবেন না /proc। হার্ড-লিঙ্কগুলি কেবল একই ফাইল সিস্টেমে কাজ করে, ফাইল-সিস্টেম জুড়ে নয় এবং যেহেতু /procএকটি পৃথক অ-লিখনযোগ্য ফাইল সিস্টেম আপনি এতে হার্ড লিঙ্ক তৈরি করতে পারবেন না। আপনি /procযদিও ফাইলটি অনুলিপি করতে পারেন ।
ক্যামহ

5

কার্নেলটি ইনোডের উল্লেখগুলিতে রেফারেন্স গণনা করে। আমার উত্তরটি দেখুন যখন আমি কোনও ফাইল বর্ণনাকারী বন্ধ করি তখন কী হয়?

খালি ফাইলগুলি মুছে ফেলা কেবলমাত্র ফাইল খোলার চেয়ে কোনও ডস প্রক্রিয়া কার্যকর নয়। ulimitফাইল খুলুন এই ডস প্রয়াস বিরুদ্ধে সুরক্ষা প্রদান করে। এটি মুছে ফেলা বা না থাকা সমস্ত উন্মুক্ত ফাইলের ক্ষেত্রে প্রযোজ্য।


5

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

ডেটাটি এখনও ড্রাইভে রয়েছে তবে ফাইলটি 0 এর লিঙ্ক গণনা হিসাবে চিহ্নিত হয়েছে। এটি কোনও মুছে ফেলা না হওয়া ফাইলের চেয়ে আর কোনও অস্বীকারের দিকে যায় না।

আমি যতদূর জানি স্টক লিনাক্স সিস্টেমে ফাইলের লিঙ্কটি পুনরায় তৈরি করতে পারবেন না (ফাইল সিস্টেম ড্রাইভারটি debugfsবা অনুরূপ পদ্ধতির সাহায্যে বাইপাস করা সংক্ষিপ্ত ), তবে আপনি সহজেই সামগ্রীগুলি পুনরুদ্ধার করতে পারবেন: cat /proc/12345/fd/42যেখানে 12345 প্রক্রিয়া আইডি যা ফাইলটি খোলা রয়েছে এবং 42 ফাইল বিবরণকারী নম্বর।

এনএফএসের ওপরে, আপনি যখন কোনও ক্লায়েন্টে এখনও খোলা একটি ফাইল মুছবেন তখন এনএফএস সার্ভার সার্ভারে ফাইলটির নাম পরিবর্তন করে তবে সমস্ত ক্লায়েন্ট ফাইলটি প্রকাশ না করা পর্যন্ত এটি মুছবে না। আমার অভিজ্ঞতায়, নতুন নামটি .nfs…, যদিও সমস্ত এনএফএস বাস্তবায়নে নামটি একই কিনা তা আমি জানি না।

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