কীভাবে ইনোড ব্যবহার মুক্ত করবেন?


274

আমার একটি ডিস্ক ড্রাইভ আছে যেখানে ইনোডের ব্যবহার 100% ( df -iকমান্ড ব্যবহার করে )। তবে ফাইলগুলি যথেষ্ট পরিমাণে মুছে ফেলার পরেও, ব্যবহারটি 100% থেকে যায়।

এটি করার সঠিক উপায় কী?

কীভাবে সম্ভব যে কম ডিস্ক স্পেস ব্যবহারের সাথে একটি ডিস্ক ড্রাইভের উচ্চতর ডিস্ক স্থান ব্যবহারের সাথে ডিস্ক ড্রাইভের চেয়ে উচ্চতর ইনোড ব্যবহার থাকতে পারে?

যদি আমি প্রচুর ফাইল জিপ করি তবে এটি ব্যবহৃত ইনোডের গণনা হ্রাস করে?


4
এই প্রশ্নের জন্য আপনি 50 পয়েন্ট দিতে চান। আমি কিভাবে করব! :)
সোফি

@ সোফি তা করবেন না আপনি স্বয়ংক্রিয়ভাবে নিষিদ্ধ হবেন
স্টিভেন লু

1
@ স্টিভেনলু আপনার তথ্যের জন্য আপনাকে ধন্যবাদ! আমি তাকে কৃতিত্ব দিতে চাই কারণ আমি আমার সমস্যা সমাধানের জন্য কয়েক দিন ব্যয় করেছি। তবে এই সমস্যাটি আমাকে সহায়তা করতে পারে। আবার ধন্যবাদ,
সোফি

1
@ সোফি: কেন এসও-র জন্য অফ-টপিক কিছু দেওয়া? :) এটি অবশ্যই কোনও প্রোগ্রামিংয়ের প্রশ্ন নয়, যতই না এটি লাভ হয়।
Tink

খালি ডিরেক্টরিগুলি ইনোড গ্রহণ করে। এগুলি মুছে ফেলা কিছু ইনোড মুক্ত করতে পারে। কিছু ব্যবহার ক্ষেত্রে এই সংখ্যাটি উল্লেখযোগ্য হতে পারে। আপনি এর সাথে খালি ডিরেক্টরি মুছতে পারেন: সন্ধান করুন। -type d -mpty -delete
রূচিত প্যাটেল

উত্তর:


170

ডিস্কটি খুব পরিপূর্ণ না হলেও এমনকি ডিস্কের জন্য প্রচুর পরিমাণে ইনোড ব্যবহার করা বেশ সহজ।

একটি ইনোড কোনও ফাইলের জন্য বরাদ্দ করা হয়, তাই আপনার যদি গাজিলিয়ন ফাইল থাকে, সমস্ত 1 টি বাইট, আপনি ডিস্কের বাইরে চলে যাওয়ার অনেক আগে ইনোডের বাইরে চলে যাবেন।

এটিও সম্ভব যে ফাইলগুলি মুছে ফেলা হলে ইনডের গণনা হ্রাস হবে না যদি ফাইলে একাধিক হার্ড লিঙ্ক থাকে। আমি আগেই বলেছি, inodes ফাইল, অন্তর্গত না ডিরেক্টরির এন্ট্রি। যদি কোনও ফাইলের সাথে দুটি ডিরেক্টরি এন্ট্রি যুক্ত থাকে তবে একটি মুছলে ইনোডটি মুক্ত হবে না।

অতিরিক্তভাবে, আপনি একটি ডিরেক্টরি এন্ট্রি মুছতে পারেন তবে, যদি কোনও চলমান প্রক্রিয়াটিতে এখনও ফাইলটি খোলা থাকে তবে ইনোডটি মুক্ত হবে না।

আমার প্রাথমিক পরামর্শটি হ'ল আপনি পারবেন এমন সমস্ত ফাইল মুছুন, তারপরে কোনও ফাইল প্রক্রিয়া খোলা থাকবে না তা নিশ্চিত করতে বক্সটি পুনরায় বুট করুন।

যদি আপনি এটি করেন এবং আপনার এখনও সমস্যা থাকে তবে আমাদের জানান।

যাইহোক, আপনি যদি প্রচুর ফাইল যুক্ত ডিরেক্টরিগুলি সন্ধান করেন তবে এই স্ক্রিপ্টটি সাহায্য করতে পারে:

#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

12
অবশ্যই, >/tmp/count_em_$$যদি আপনার পক্ষে এটির জন্য জায়গা থাকে তবে ইচ্ছাশক্তিই কাজ করবে ... যদি এটি হয় তবে @ সাইমন এর উত্তর দেখুন।
alxndr

1
@ অ্যালেক্সেন্ডার, এ কারণেই আপনার ফাইল সিস্টেমগুলি পৃথক রাখা প্রায়শই ভাল ধারণা - এই জাতীয় কিছু পূরণ করা /tmpআপনার অন্য ফাইল সিস্টেমে প্রভাব ফেলবে না।
paxdiablo

আপনার উত্তরটি "সিস্টেম মুছে ফেলা থাকলে পুনরায় বুট করার পরে ফাইলটি ব্যবহার করবে না" এর জন্য পুরোপুরি উপযুক্ত। তবে প্রশ্নটি জিজ্ঞাসা করা হয়েছিল "ইনোড পয়েন্টার মোছার পরে কীভাবে ইনোডগুলি পুনরায় দাবি করতে বা পুনরায় ব্যবহার করতে হয়?" মূলত লিনাক্স কার্নেল যখনই তৈরি হবে কোনও ফাইলের জন্য একটি নতুন ইনোড তৈরি করে এবং আপনি যখনই কোনও ফাইল মুছবেন তখন স্বয়ংক্রিয়ভাবে ইনোডটিকে পুনরায় দাবি করবেন না।
মোহনরাজ

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

2
আমি মনে করি আপনি ls -Aপরিবর্তে চান ls -a। কেন আপনি গণনা করতে চান। এবং ..?
jarno

205

আপনি যদি খুব দুর্ভাগ্য হন তবে আপনি সমস্ত ইনোডের প্রায় 100% ব্যবহার করেছেন এবং স্কিপটি তৈরি করতে পারবেন না। আপনি এটি দিয়ে পরীক্ষা করতে পারেন df -ih

তাহলে এই বাশ আদেশটি আপনাকে সহায়তা করতে পারে:

sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

এবং হ্যাঁ, এতে সময় লাগবে, তবে আপনি সর্বাধিক ফাইল সহ ডিরেক্টরিটি সনাক্ত করতে পারেন।


8
কৌতুকটি করে আমার সমস্যাটি ছিল / lib / php / সেশন ডিরেক্টরিতে অবিশ্বাস্য পরিমাণ সেশনগুলি।
কারওরও

2
কারও এই সন্ধান, কাটা, ইউনিটকে একটি একক এড কমান্ডে নতুন করে লিখতে হবে!
মোগসি

5
@ অ্যালেক্সেন্ডার awkগ্যাজিলিয়ন লাইন একক করে না বাছাই করে ডিরেক্টরি এবং ফাইলগুলির গণনা রাখতে পারে। এটি বলেছিল, সম্ভবত এখানে একটি উন্নতি হয়েছে: find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n- এটি কেবল সর্বশেষ তালিকাটিকে সাজায়।
মোগসি

12
আপনি যদি কোনও ফাইল তৈরি করতে না পারেন তবে তা ব্যর্থওsort হতে পারে কারণ মেমরির সমস্ত কিছু রাখতে ব্যর্থ হতে পারে এবং একটি অস্থায়ী ফাইল লেখার জন্য স্বয়ংক্রিয়ভাবে পিছিয়ে পড়ার চেষ্টা করবে। একটি প্রক্রিয়া যা স্পষ্টতই ব্যর্থ হবে ...
মিক্কো রেন্টালাইনেন

10
sortআমার জন্য ব্যর্থ হয়েছে, তবে আমি --buffer-size=10Gযা দিতে পেরেছি তা দিতে সক্ষম হয়েছি ।
ফ্রেডরিক নর্ড

69

আমার অবস্থাটি ছিল যে আমি আইওনডের বাইরে ছিলাম এবং আমি যা করতে পারি তার সব কিছু আমি ইতিমধ্যে মুছে ফেলেছি।

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361     11  100% /

আমি একটি উবুন্টু 12.04LTS এ আছি এবং পুরানো লিনাক্স কার্নেলগুলি সরাতে পারিনি যা প্রায় 400,000 ইনোড নিয়েছিল কারণ প্যাকেজ অনুপস্থিত থাকার কারণে অ্যাপটি ভেঙে গেছে। এবং আমি নতুন প্যাকেজটি ইনস্টল করতে পারিনি কারণ আমি ইনডসের বাইরে ছিলাম তাই আমি আটকে গিয়েছিলাম।

আমি প্রায় 10,000 ইনোড মুক্ত করার জন্য হাতে কয়েক পুরানো লিনাক্স কার্নেলগুলি মুছে ফেলেছি

$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*

এটি তখন আমার অনুপস্থিত প্যাকেজটি ইনস্টল করতে এবং আমার অ্যাপ্লিকেশনটি ঠিক করার জন্য যথেষ্ট ছিল

$ sudo apt-get install linux-headers-3.2.0-76-generic-pae

এবং তারপরে এপিটি সহ পুরানো লিনাক্স কার্নেলগুলি অপসারণ করুন

$ sudo apt-get autoremove

জিনিস এখন অনেক ভাল

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361 434719   54% /

3
এটি একই পরিস্থিতিতে আমার নিজস্ব পদ্ধতির নিকটতম ছিল। এটি লক্ষণীয় যে আরও বেশি সতর্ক দৃষ্টিভঙ্গি হেল্প.বুন্টু
কমিনিউটি /

আমার কেস ঠিক! তবে অগ্রগতিতে "sudo apt-get autoremove -f" ব্যবহার করতে হয়েছিল
টনি সেপিয়া

এটি করা কি নিরাপদ:, sudo rm -rf /usr/src/linux-headers-3.2.0-2*যদি আমি নিশ্চিত যে আমি সেই কার্নেলটি ব্যবহার করছি না?
মঙ্গল লি 20

@ মার্সলি আপনি বর্তমানে পরীক্ষা করতে পারবেন কোন কার্নেলটি বর্তমানে "
আনমে

$ sudo apt-get autoremoveএকা ডাকে , আমার জন্য ট্রিক করল।
মর্টেন গ্রাম

49

আমার সমাধান:

এটি কোনও আইনের সাথে সমস্যা কিনা তা জানার চেষ্টা করুন:

df -ih

বড় বড় ইনোড গণনা সহ রুট ফোল্ডারগুলি সন্ধান করার চেষ্টা করুন:

for i in /*; do echo $i; find $i |wc -l; done

নির্দিষ্ট ফোল্ডারগুলি সন্ধান করার চেষ্টা করুন:

for i in /src/*; do echo $i; find $i |wc -l; done

যদি এটি লিনাক্স শিরোলেখ হয় তবে এর সাথে সর্বাধিক প্রাচীন সরিয়ে ফেলার চেষ্টা করুন:

sudo apt-get autoremove linux-headers-3.13.0-24

ব্যক্তিগতভাবে আমি এগুলিকে একটি মাউন্ট ফোল্ডারে স্থানান্তরিত করেছি (কারণ আমার জন্য শেষ কমান্ডটি ব্যর্থ হয়েছে) এবং এর সাথে সর্বশেষটি ইনস্টল করেছি:

sudo apt-get autoremove -f

এটি আমার সমস্যার সমাধান করেছে।


1
আমার ক্ষেত্রে বিষয়টি ছিল SpamAssasin-Tempfind /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -fকাজটি করেছেন :) ধন্যবাদ!
জয়স্টিক

4
আমার জন্য, এটি কয়েক ঘন্টা সময় নিচ্ছিল। যাইহোক, একটি সহজ সমাধান রয়েছে: যখন দ্বিতীয় কমান্ড কোনও নির্দিষ্ট ডিরেক্টরিতে স্তব্ধ হয়ে যায়, তখন বর্তমান কমান্ডটি মেরে ফেলুন এবং যে ডিরেক্টরিতে এটি ঝুলছিল তা / * পরিবর্তন করে পুনরায় চালু করুন। আমি অপরাধীর কাছে <মিনিটে ড্রিল করতে সক্ষম হয়েছি।
মাইকেল টেরি

আমি একই লাইনে নম্বরগুলি মুদ্রণের জন্য আপনার আদেশের এই রূপটি ব্যবহার করেছি: for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
cscracker

for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10শীর্ষ 10 বৃহত্তম ডিরেক্টরি প্রদর্শন করুন
মার্ক সাইমন

12

আমার একই সমস্যা ছিল, পিএইচপি এর ডিরেক্টরি সেশনগুলি সরিয়ে এটি ঠিক করেছিলাম

rm -rf /var/lib/php/sessions/

/var/lib/php5আপনি যদি কোনও পুরানো পিএইচপি সংস্করণ ব্যবহার করছেন তবে এটির অধীনে হতে পারে ।

নিম্নলিখিত অনুমতি নিয়ে এটি পুনরায় তৈরি করুন

mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/

ডেবিয়ান ডিরেক্টরিতে ডিফল্টরূপে অনুমতি দেখানো হয়েছে drwx-wx-wt(1733)


1
কোন ধারণা কেন এমন হয়?
সিবিধরণ

1
@ সিবিধরণ আমার ক্ষেত্রে এটি ছিল কারণ পুরানো পিএইচপি সেশনগুলি সাফ করার জন্য পিএইচপি ক্রোন কাজ কাজ করছে না।
ভয়ানক

3
rm -rf /var/lib/php/sessions/*সম্ভবত এটি একটি ভাল কমান্ড হতে পারে - এটি সেশন ডিরেক্টরিটি সরিয়ে ফেলবে না, কেবল এটির বিষয়বস্তু ... তারপরে আপনাকে এটি পুনরায় তৈরি করার বিষয়ে চিন্তা করতে হবে না
শ্যাডো

আমার পিএইচপি সেশন ছিল না তবে ম্যাজেন্টো সেশন ইস্যু, এটির মতো। দিকনির্দেশের জন্য ধন্যবাদ।
মোহিত

পিএইচপি সেশনগুলি ক্রোন জবসের

2

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

/usr/local/cpanel/bin/purge_dead_comet_files

2

আপনি বিপুল সংখ্যক ফাইল মুছে ফেলার জন্য আরএসওয়াইএনসি ব্যবহার করতে পারেন

rsync -a --delete blanktest/ test/

এতে 0 টি ফাইল দিয়ে ফাঁকা ফোল্ডার তৈরি করুন এবং কমান্ড আপনার পরীক্ষার ফোল্ডারগুলি প্রচুর সংখ্যক ফাইলের সাথে সিঙ্ক করবে (আমি এই পদ্ধতিটি ব্যবহার করে প্রায় 5 এম ফাইল মুছে ফেলেছি)।

ধন্যবাদ http://www.slashroot.in/ which- is- the- fastest- method-to- delete-files- in- linux


নিবন্ধ / মন্তব্যগুলি থেকে আমি যা বলতে পারি তা থেকে, rm *ওয়াইল্ডকার্ডটি প্রসারিত করার কারণে এবং প্রতিটি যুক্তি পাস / প্রক্রিয়াকরণের কারণে এটি প্রচুর ফাইলের চেয়ে দ্রুত , তবে প্রচুর rm test/ফাইলযুক্ত test/ফোল্ডার মুছে ফেলার জন্য এটি ঠিক ।
mwfearnley

শীর্ষস্থানীয়, এটি ভাল কাজ করে তবে নিশ্চিত হয়ে নিন যে আপনি অনুমতিগুলি সঠিকভাবে ফাঁকা ডিরেক্টরিতে সেট করেছেন! আমি এটি করিনি এবং অজান্তেই আমার পিএইচপি সেশন ডিরেক্টরিতে অনুমতিগুলি পরিবর্তন করেছি। আমি কী পেঁচিয়েছি তা বের করতে দুই ঘন্টা সময় নিয়েছে।
aecend

1

ইক্যসিলারেটর সমস্যা সৃষ্টি করতে পারে কারণ এটি পিএইচপি ব্লকে সংকলন করে ... ভারী ভারী কোনও সাইটে আমার একটি অ্যামাজন এডাব্লুএস সার্ভারে এই সমস্যাটি ছিল। আপনার যদি সমস্যা অব্যাহত থাকে তবে / ভেরি / ক্যাশে / ই্যাকসিলেরেটরে ই্যাকসিলেরেটর ক্যাশে মোছার মাধ্যমে আইনডগুলি মুক্ত করুন।

rm -rf /var/cache/eaccelerator/*

(বা আপনার ক্যাশে দির যাই হোক না কেন)


1

আমরা সম্প্রতি অনুরূপ সমস্যার মুখোমুখি হয়েছি, যদি কোনও প্রক্রিয়া মুছে ফেলা ফাইলকে বোঝায়, তবে ইনোডটি প্রকাশিত হবে না, সুতরাং আপনাকে lsof / পরীক্ষা করতে হবে, এবং প্রক্রিয়াটি মেরে ফেলতে হবে / পুনরায় চালু করতে হবে ইনডগুলি মুক্তি দেবে।

এখানে ভুল হলে আমাকে সংশোধন করুন।


1

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


0

দেরীতে উত্তর: আমার ক্ষেত্রে এটি আমার সেশন ফাইলগুলির অধীনে ছিল

/var/lib/php/sessions

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

<?php
// Note: This script should be executed by the same user of web server 
process.

// Need active session to initialize session data storage access.
session_start();

// Executes GC immediately
session_gc();

// Clean up session ID created by session_gc()
session_destroy();
?>

আপনি যদি ভাবছেন যে আমি কীভাবে আমার ক্রন্টব খুলতে পেরেছি, তবে ভাল, আমি সিএলআইয়ের মাধ্যমে কিছু সেশন ম্যানুয়ালি মুছে ফেলেছি।

আশাকরি এটা সাহায্য করবে!


0

আপনি এই তথ্য দেখতে পারে

for i in /var/run/*;do echo -n "$i "; find $i| wc -l;done | column -t

-2

এখনও পর্যন্ত এইটির একটি উত্তর এবং উপরের সমস্তগুলি কংক্রিট বলে মনে হচ্ছে। আমি মনে করি আপনি statপাশাপাশি চলার মাধ্যমে আপনি নিরাপদ থাকবেন , তবে ওএস নির্ভর করে আপনি কিছু ইনোড ত্রুটি আপনার উপর উঠে যেতে পারে। সুতরাং কোনও ওভারফ্লো সমস্যা এড়াতে আপনার নিজের statকল কার্যকারিতা বাস্তবায়ন 64bitমোটামুটি সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে।


আমরা এখানে উদাহরণগুলি পছন্দ করি;)
বোহনে

-3

আপনি যদি ডকার ব্যবহার করেন তবে সমস্ত চিত্র সরিয়ে ফেলুন। তারা অনেক জায়গা ব্যবহার করেছে ....

সমস্ত পাত্রে বন্ধ করুন

docker stop $(docker ps -a -q)

সমস্ত পাত্রে মুছুন

docker rm $(docker ps -a -q)

সমস্ত চিত্র মুছুন

docker rmi $(docker images -q)

আমার কাজ করে


এটি "অনেক বেশি ইনোড" সমস্যা কিনা তা সনাক্ত করতে সহায়তা করে না।
মার্ক স্টসবার্গ

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