পটভূমি: শারীরিক সার্ভার, প্রায় দুই বছর বয়সী, W২০০-আরপিএম সটা ড্রাইভ 3 ওয়্যার রেড কার্ডের সাথে সংযুক্ত, ext3 এফএস মাউন্ট করা নোয়াটিম এবং ডেটা = অর্ডার করেছে, পাগলের লোডের নীচে নয়, কার্নেল ২.6.১৮-৯২.২২.২৫.el5, আপটাইম ৫৫৫ দিন । ডিরেক্টরিতে কোনও বৃহত্তর (কয়েকটি কেবি) ফাইল সহ কয়েক মিলিয়ন ছোট (~ 100 বাইট) ফাইল থাকে না sub
আমাদের এমন একটি সার্ভার রয়েছে যা গত কয়েক মাস ধরে কিছুটা কোকিল করে চলেছে, তবে আমরা কেবলমাত্র এটি অন্য দিনেই লক্ষ্য করেছি যখন এটি খুব বেশি ফাইল রয়েছে বলে কোনও ডিরেক্টরিতে লিখতে অক্ষম হয়ে পড়েছিল। বিশেষত, এটি / var / লগ / বার্তাগুলিতে এই ত্রুটিটি ছুঁড়তে শুরু করে:
ext3_dx_add_entry: Directory index full!
প্রশ্নযুক্ত ডিস্কে প্রচুর পরিমাণে ইনোড বাকী রয়েছে:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 60719104 3465660 57253444 6% /
সুতরাং আমি অনুমান করছি এর অর্থ আমরা ডিরেক্টরি ফাইলটিতে কতগুলি এন্ট্রি হতে পারে তার সীমাটি হিট করেছি। কতগুলি ফাইল হবে সে সম্পর্কে ধারণা নেই তবে এটি ত্রিশ লক্ষ বা তারও বেশি হিসাবে আপনি দেখতে পারেন। এটা যে ভাল না, মনে মনে! তবে এটি আমার প্রশ্নের একটি অংশ: ঠিক ওপরের সীমাটি কী? এটা কি ট্যুরেবল? আমি চিৎকার করতে অ্যাট আমি এটা সুর করতে চান নিচে ; এই বিরাট ডিরেক্টরিটি বিভিন্ন ধরণের সমস্যার কারণ হয়ে দাঁড়িয়েছে।
যাইহোক, আমরা কোডটিতে এই সমস্যাটি সন্ধান করেছি যা এই সমস্ত ফাইল তৈরি করেছিল এবং আমরা এটি সংশোধন করেছি। এখন আমি ডিরেক্টরি মুছে ফেলার সাথে আটকে আছি।
কয়েকটি বিকল্প এখানে:
rm -rf (dir)
আমি প্রথমে চেষ্টা করেছিলাম। এটি দেড় দিনের জন্য কোনও তাত্পর্যপূর্ণ প্রভাব ছাড়াই চলে যাওয়ার পরে আমি তা ছেড়ে দিয়েছিলাম এবং হত্যা করেছি।
- ডিরেক্টরিতে আনলিংক (2): অবশ্যই বিবেচনার জন্য মূল্যবান, তবে প্রশ্নটি হল যে আনইলিংক (2) এর মাধ্যমে মুছে ফেলার চেয়ে ডিরেক্টরিটির ভিতরে থাকা ফাইলগুলি fsck এর মাধ্যমে মুছে ফেলা আরও দ্রুত হবে কি না question এটি হ'ল এক উপায় বা অন্যভাবে আমি এই ইনোডগুলিকে অব্যবহৃত হিসাবে চিহ্নিত করেছি। এটি অবশ্যই ধরে নিয়েছে যে আমি fsck কে বলতে পারি / হারিয়ে + পাওয়া ফাইলগুলিতে এন্ট্রি না ফেলে! অন্যথায়, আমি আমার সমস্যা সরিয়েছি। অন্যান্য সমস্ত উদ্বেগের পাশাপাশি, আরও কিছুটা পড়ার পরে, দেখা যাচ্ছে যে আমাকে সম্ভবত কিছু অভ্যন্তরীণ এফএস ফাংশন কল করতে হবে, কারণ আমি যে লিঙ্কযুক্ত লিঙ্ক (২) আবিষ্কার করতে পারি তার কোনওটিই আমাকে কেবল নির্লিপ্তভাবে মুছতে দেয় না এটিতে এন্ট্রি সহ একটি ডিরেক্টরি। ঘৃণা।
while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; done )
এটি আসলে সংক্ষিপ্ত সংস্করণ; আমি যে আসল তা চালিয়ে যাচ্ছি, যা ফাইলগুলি মুছে ফেলার জন্য শেষ হয়ে গেলে কেবল কিছু অগ্রগতি-প্রতিবেদন এবং একটি ক্লিন স্টপ যুক্ত করে:
এক্সপোর্ট i = 0; সময় (যখন [সত্য]; কর ls -Uf | মাথা -n 3 | grep -qF '.png' || বিরতি; ls -Uf | মাথা -n 10000 | xargs rm -f 2> / dev / নাল; রফতানি i = ((($ i + 10000)); প্রতিধ্বনি "$ i ..."; সম্পন্ন )
এটি বরং ভাল কাজ করছে বলে মনে হচ্ছে। আমি যখন এটি লিখছি, এটি গত ত্রিশ মিনিট বা তারও বেশি সময় ধরে 260,000 ফাইল মুছে ফেলেছে।
- উপরে উল্লিখিত হিসাবে, প্রতি ডিরেক্টরি এন্ট্রি সীমা টিউনযোগ্য?
- কেন "রিয়েল 7m9.561s / ব্যবহারকারীর 0m0.001s / ss 0m0.001s" কেন এমন একটি ফাইল মুছে ফেলা হয়েছে যা তালিকার মধ্যে প্রথমটি ছিল যা ফিরে এসেছিল
ls -U
এবং এটির সাথে প্রথম 10,000 এন্ট্রি মুছতে দশ মিনিট সময় লেগেছিল # 3 এ কমান্ড, কিন্তু এখন এটি বেশ আনন্দের সাথে চলছে? এই বিষয়টির জন্য, এটি প্রায় ত্রিশ মিনিটের মধ্যে 260,000 মুছে ফেলেছিল, তবে এখন আরও 60,000 মুছতে আরও পনের মিনিট সময় লেগেছে। গতিতে বিশাল দোল কেন? - এই ধরণের কাজ করার আরও ভাল উপায় আছে? কোনও ডিরেক্টরিতে কয়েক মিলিয়ন ফাইল সঞ্চয় করবেন না; আমি জানি এটি নির্বোধ, এবং এটি আমার ঘড়িতে হত না। সমস্যাটি গুগল করা এবং এসএফ এবং এসও-এর মাধ্যমে সন্ধান করা বিভিন্ন প্রকারের
find
প্রস্তাব দেয় যা বেশ কয়েকটি স্ব-স্পষ্ট কারণে আমার পদ্ধতির চেয়ে উল্লেখযোগ্যভাবে দ্রুত হতে চলেছে না। তবে মুছুন-দিয়ে-fsck ধারণার কোনও পা আছে? না পুরোপুরি অন্য কিছু? আমি বাক্সের বাইরে (বা খুব ভাল-বক্সের ভিতরে-এর বাইরে) চিন্তাভাবনা শুনতে আগ্রহী।
চূড়ান্ত স্ক্রিপ্ট আউটপুট !:
2970000...
2980000...
2990000...
3000000...
3010000...
real 253m59.331s
user 0m6.061s
sys 5m4.019s
সুতরাং, তিন মিলিয়ন ফাইল চার ঘন্টার মধ্যে কিছুটা মুছে ফেলা হয়েছে।
rm -rfv | pv -l >/dev/null
। পিভি ইপেল সংগ্রহস্থলে উপলব্ধ থাকতে হবে ।