খোলা রাখা মুছে ফেলা ফাইলগুলি থেকে ডিস্কের স্থান মুক্ত করার সর্বোত্তম উপায়


28

হাই, আমার অনেকগুলি ফাইল মুছে ফেলা হয়েছে তবে কোনও কারণে মুছে ফেলা ফাইলগুলির সাথে যুক্ত ডিস্কের স্থানটি ব্যবহার করা যায় না যতক্ষণ না আমি স্পষ্টভাবে ডিস্কের স্থান গ্রহণকারী ফাইলটির প্রক্রিয়াটি মেরে ফেলছি

$ lsof /tmp/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)

উপরের মুছে ফেলা ফাইলটির দ্বারা নেওয়া ডিস্কের জায়গার কারণে সমস্যা দেখা দেয় যেমন কোনও ফাইলের পথটি স্বয়ংক্রিয়ভাবে পূর্ণ করার জন্য ট্যাব কীটি ব্যবহার করার চেষ্টা করার সময় আমি ত্রুটি পেয়েছি bash: cannot create temp file for here-document: No space left on device

তবে আমি kill -9 1623পিআইডি-র জন্য জায়গা চালানোর পরে মুক্ত হয়ে গেছে এবং আমি ত্রুটিটি আর পাই না।

আমার প্রশ্নগুলি হ'ল:

  • ফাইলটি প্রথম মোছার সাথে সাথে কেন এই স্থানটি তাত্ক্ষণিকভাবে মুক্ত করা হয় না?
  • মুছে ফেলা ফাইলগুলির সাথে যুক্ত ফাইলের স্থানটি ফিরে পাওয়ার সর্বোত্তম উপায় কী?

এবং দয়া করে আমাকে যে কোনও ভুল পরিভাষা ব্যবহার করেছি বা এই পরিস্থিতি সম্পর্কিত কোনও প্রাসঙ্গিক এবং প্রাসঙ্গিক তথ্য আমাকে জানান।

উত্তর:


26

কোনও অ্যাকাউন্টে, ফাইলের নামগুলি কেবল পয়েন্টার (আইওনডস) থাকে যা মেমরিটিকে নির্দেশ করে যেখানে ফাইলটি থাকে (যা একটি হার্ড ড্রাইভ বা এমনকি একটি র্যাম-ব্যাকড ফাইল সিস্টেম হতে পারে)। প্রতিটি ফাইল এতে লিঙ্কের সংখ্যা রেকর্ড করে: লিঙ্কগুলি ফাইলের নাম হতে পারে (বহুবচন, যদি একই ফাইলের একাধিক হার্ড লিঙ্ক থাকে), এবং প্রতিবার একটি ফাইল খোলার সময়, প্রক্রিয়াটি আসলে "লিঙ্ক" ধারণ করে একই স্থান।

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

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


24

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

আপনি দুটি উপায়ে স্থান "বিনামূল্যে" করতে পারেন:

  1. উপরে উল্লিখিত হিসাবে - আপনি অ্যাপ্লিকেশন হত্যা করতে পারেন, যা ফাইল খোলায়।
  2. আপনি পারেন ... ফাইল কেটে ফেলুন। এমনকি যদি এটি মুছে ফেলা হয়:

আপনি যদি পিড জানেন - এই পিডের মাধ্যমে কী ফাইলগুলি খোলা আছে তা দেখুন: ls -l / proc / PID / fd আপনি এখানে লিঙ্কগুলি দেখতে পাবেন:

অপরিবর্তিত @ ইউএমএল: ~ s ls -l / proc / 18596 / fd
razem 0
lrwx ------ 1 অপরিবর্তিত অপরিশোধিত l৪ লুট 1 00:06 0 -> / dev / pts / 30
lrwx ------ 1 অপরিবর্তিত অপরিশোধিত l৪ লুট 1 00:06 1 -> / dev / pts / 30
lrwx ------ 1 অপরিবর্তিত অপরিশোধিত 64 লট 1 00:05 2 -> / dev / pts / 30
lr-x ------ 1 অপরিবর্তিত
lr-x ------ 1 অপরিবর্তিত অপরিশোধিত l৪ লুট 1 00:06 4 -> anon_inode: inotify

যেমন আপনি দেখুন - 3 fd মুছে ফেলা হয়। আপনি আদেশ দ্বারা এটি কেটে ফেলতে পারেন (উদাহরণস্বরূপ):

@ uML: u $:> / proc / 18596 / fd / 3 অপরিবর্তিত করুন
undefine @ ইউএমএল: ~ $ 

মনে রাখবেন যে অ্যাপ্লিকেশনটি এই ফাইলটি থেকে পড়ে - এটি তাদের পক্ষে বিপজ্জনক হতে পারে। তবে - যদি এটি কেবল একটি লগ ফাইল হয় - আপনি এটি নিরাপদে ছাঁটাই করতে পারেন।


নোট করুন ফাইলটি কেটে দেওয়ার পরে , এটি ধারণ করে রাখা মূল প্রক্রিয়াটি এখনও শেষের সাথে সংযুক্ত হতে পারে (যেখানে এটি শেষের প্রত্যাশা করে)। ফলাফলটি আপাতদৃষ্টিতে বিশাল তবে স্পার্স ফাইল যা ডিস্কে কম স্থান নেয় (যদি ফাইল সিস্টেমটি বিরল ফাইলগুলিকে সমর্থন করে) এবং তারা এখনও বাড়তে থাকে!
törzsmókus

হ্যাঁ। যদি কিছু ফাইল লিখতে থাকে তবে তা ডিস্কে স্থান করে নেবে। ); এটা হার্ড Do আবেদন ডিস্কে যা লেখার বাঁধন ছাড়া এটা এড়ানোর এর
undefine

8

অন্যরা যেমন বলেছে lsofযে সমস্ত মুছে ফেলা ফাইলগুলি ফাইলের তালিকার জন্য ব্যবহার করা যেতে পারে যা ফাইলের বিবরণকারীদের জন্য ডিস্কে এখনও রয়েছে on তবে এটি খুব দীর্ঘ তালিকা হতে পারে। এখানে একটি আদেশ রয়েছে যা বাইটগুলিতে আরোহণ আকারের দ্বারা সাজানো এই ফাইলগুলির তালিকা দেয়:

sudo lsof -F sn0 | tr -d '\000' | grep deleted | sed 's/^[a-z]*\([0-9]*\)n/\1 /' | sort -n

এটি করার আরও একটি সাবলীল উপায় হতে পারে তবে উপরের কমান্ডটি আমার পক্ষে কাজ করেছে।


5

স্থানটি তাত্ক্ষণিকভাবে মুক্ত হয় না কারণ চলমান প্রক্রিয়াটির এখনও সবে-মোছা ফাইলটিতে একটি ওপেন ফাইল হ্যান্ডেল রয়েছে। সর্বোপরি, যদি কোনও প্রক্রিয়া এখনও কোনও ফাইল ব্যবহার করার চেষ্টা করে তবে আপনি সম্ভবত কার্নেলটি এটি (ফাইল) থেকে মুক্তি পেতে চান না। এটি প্রক্রিয়াটি কিছুটা বিচলিত করতে পারে। স্থানটি মুক্ত করার সর্বোত্তম (এবং কেবলমাত্র আমি জানি) উপায়টি আপনি যা করেছেন ঠিক তেমনই - প্রক্রিয়াটি মেরে ফেলুন।


সম্ভবত "কীভাবে এটি কাজ করে" এর চেয়ে আরও ভাল বাক্য "যদি কোনও প্রক্রিয়া এখনও ফাইল ব্যবহার করে তবে ইউনিক্স এটিকে ছাড়ানোর চেষ্টা করা উচিত নয়।"
ব্র্যাচলে

ভাল যুক্তি. আমি উত্তরে এটি যোগ করেছি।
জন

-1

(পুদিনা 17.1)

টি এল; ডিআর:

  • sudo baobab(ডিস্ক ব্যবহার বিশ্লেষক) দিয়ে পরিদর্শন করুন ।
  • rootব্যবহারকারীর ট্র্যাস সাফ করুন।

প্রসঙ্গ

আমি ক্রমাগত কমার জায়গাতে আটকে ছিলাম যখন আমি ক্রমাগত ফাইলগুলি মুছতাম। আমি trash-cliআবর্জনা খালি করতে প্যাকেজটি ইনস্টল করেছি , তবে এটি কোনও লাভ হয়নি। অবশেষে, আমি লক্ষ্য করেছি যে যখন আমি baobabডিস্কের স্থান কাঠামোটি পরীক্ষা করার জন্য (জিইউআইতে ডিস্ক ইউজ অ্যানালাইজার, কমপক্ষে ১৫ মিনিটে মিন্টে) দৌড়েছি তখন এটি একটি সতর্কতা দিয়েছিল যে কিছু ফোল্ডার অ্যাক্সেসযোগ্য নয়। সুতরাং আমি এটি rootব্যবহার হিসাবে চালানো sudo baobab। এটি সমস্যা প্রকাশ করেছে। মুছে ফেলা অনেকগুলি ফাইল rootব্যবহারকারীর ট্র্যাশবিনে ছিল , আমার নিজের ব্যবহারকারী নয়। সুতরাং, আমি স্থান খালি করতে পারিনি। তারপরে আমি রুট হিসাবে ব্যবহার করে ট্র্যাশটি খালি খালি করে ( sudo trash-cli) এবং আমার সমস্ত স্থান ফিরে আসল ।


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