জায়গা ফুরিয়ে যাওয়া হলো কোনো অসৎ উদ্দেশ্য ছাড়াই সার্ভারের কাজ বন্ধ করে দেওয়ার সবচেয়ে প্রচলিত কারণ। সাইট 500 ফেরায়, ডেটাবেস লিখতে পারে না, মেইল বেরোয় না — আর df -h এদিকে কয়েক গিগাবাইট ফাঁকা জানায়। চলুন এমনটা ঘটে যে তিনটি ক্ষেত্রে, সেগুলো আর SMART সম্পর্কে যা জানার তা দেখে নিই।

প্রথম ক্ষেত্র: inode ফুরিয়েছে

ফাইল সিস্টেমে দুটি সীমিত সম্পদ থাকে: বিষয়বস্তুর জায়গা আর ফাইল সম্পর্কে এন্ট্রি। দ্বিতীয়টি প্রথমটির থেকে স্বাধীনভাবে ফুরোয়:

df -h
df -i

দ্বিতীয় কমান্ডে IUse% 100 হলে সমস্যা inode-এর। জায়গা আছে, কিন্তু একটাও ফাইল তৈরি করা যায় না, ফাঁকাও নয়।

দোষী সবসময় একই: লাখ লাখ ছোট ফাইল। /var/lib/php/sessions-এ PHP সেশন যাদের আবর্জনা সংগ্রহ ভেঙে গেছে। অ্যাপ্লিকেশনের ক্যাশ যা কখনও পরিষ্কার হয় না। আটকে থাকা মেইল সারি। থাম্বনেইলের ডিরেক্টরি। এদের এভাবে খুঁজে বের করা যায়:

sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20

কমান্ডটি সবচেয়ে বেশি ফাইলযুক্ত ডিরেক্টরির তালিকা দেয়। বড় সিস্টেমে এটি মিনিট ধরে চলে — এটা স্বাভাবিক।

দ্বিতীয় ক্ষেত্র: ফাইল মুছেছে আর জায়গা ফেরেনি

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

sudo lsof +L1

কমান্ডটি এমন ফাইল দেখায় যাদের ফাইল সিস্টেমে শূন্য সংযোগ কিন্তু কোনো প্রক্রিয়া এখনও ধরে আছে। নিরাময় হলো সেই প্রক্রিয়াটি পুনরায় চালু করা বা নরমভাবে লোড করা, «গিগাবাইট কোথায় গেল» খোঁজা নয়।

এ থেকেই নিয়ম: বেড়ে যাওয়া লগ মোছা হয় না, ছেঁটে ফেলা হয়, যাতে খোলা descriptor কাজের থাকে:

sudo truncate -s 0 /var/log/huge.log

আর সঙ্গে সঙ্গেই ঘূর্ণন সাজান — নইলে এই সবটাই এক সপ্তাহে পুনরাবৃত্তি হবে।

তৃতীয় ক্ষেত্র: লগ খেয়ে ফেলেছে

জায়গা ঠিক কোথায় গেল তা স্তরে স্তরে নেমে দেখা যায়:

sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h

-x পতাকা একে অন্য ফাইল সিস্টেমে ঘুরে বেড়ানো থেকে আটকায়; সেটা ছাড়া গণনা /proc ও নেটওয়ার্ক মাউন্টে ঢুকে পড়ে। এসব ncdu-তে বেশি আরামদায়ক, যদি সেটি থাকে।

চেনা ভক্ষকরা:

  • journald। একটা কমান্ডেই সব মীমাংসা: journalctl --disk-usage। এটি সীমিত হয় /etc/systemd/journald.conf-এ SystemMaxUse=500M লাইন দিয়ে আর journalctl --vacuum-size=200M দিয়ে একবার পরিষ্কার হয়;
  • নিরাপত্তা সরঞ্জামের লগ। Suricata তার আদর্শ ব্যবস্থায় ত্রিশ ধরনের ঘটনা লেখে আর নিজের জন্য ঘূর্ণন সাজায় না — বাস্তব সার্ভারে সেটি দুই দিনে 15 GB বানিয়েছে। একই ঘটনা audit.log-এর সঙ্গে আর nginx-এর ডিবাগ লগের সঙ্গে;
  • ব্যাকআপ যা একই ডিস্কে লেখা হয় আর কখনও সরানো হয় না;
  • apt-এর ক্যাশapt clean মাঝেমধ্যে দুয়েক গিগাবাইট ফিরিয়ে দেয়।

/boot নিয়ে দুটি কথা

ছোট একটা পার্টিশন যা পুরনো কার্নেলে ভরে যায়। এটি নিজে থেকে সাইট ফেলে দেয় না, কিন্তু হালনাগাদ পুরোপুরি থামিয়ে দেয়: নতুন কার্নেল বসবে না, আর পুরো প্যাকেজ সারি তার পেছনে আটকে যায়। নিরাময় apt autoremove --purge, আর প্রতিরোধ হলো স্বয়ংক্রিয় হালনাগাদের সেটিংসে অব্যবহৃত কার্নেলের স্বয়ংক্রিয় অপসারণ চালু করা।

SMART: কোন বৈশিষ্ট্য গুরুত্বপূর্ণ

আগে একটা সতর্কতা: ভার্চুয়াল সার্ভারে SMART সাধারণত পাওয়া যায় না — ডিস্ক ভার্চুয়াল আর তার নিচের ভৌত ডিস্ক আপনি দেখেন না। এটা ত্রুটি নয়, কেবল তথ্যই নেই। পরের সবটাই ডেডিকেটেড সার্ভার আর নিজের যন্ত্রপাতি নিয়ে।

sudo smartctl -a /dev/sda

SMART overall-health self-assessment test result: PASSED লাইনটি নিশ্চিন্ত হওয়ার কারণ নয়: সেটি ড্রাইভ মরে যাওয়া পর্যন্ত কার্যত সবুজ থাকে। দেখার মতো হলো নির্দিষ্ট গণনাগুলো:

  • 5, Reallocated_Sector_Ct — পুনর্বণ্টিত সেক্টর। শূন্য না হওয়া মানে ড্রাইভ আগে থেকেই ক্ষয়ে যাচ্ছে; সময়ের সঙ্গে বাড়া মানে দেরি না করে বদলান;
  • 197, Current_Pending_Sector — যেসব সেক্টর পড়া যায় না আর সিদ্ধান্তের অপেক্ষায়। এদের মধ্যে সবচেয়ে উদ্বেগজনক: সাধারণত এর মানে তথ্যের একটা অংশ ইতিমধ্যেই অপুনরুদ্ধারযোগ্য;
  • 198, Offline_Uncorrectable — একই, যাচাইয়ে নিশ্চিত;
  • SSD: Percentage Used / Media_Wearout_Indicator — লেখার ক্ষয়ে যাওয়া সহনশীলতা। পূর্বানুমেয় সংখ্যা, আর যার সাপেক্ষে প্রতিস্থাপনের পরিকল্পনা হয়।

অন্যদিকে তাপমাত্রা ও চালু থাকার ঘণ্টা নিজে থেকে কিছুই বলে না: পাঁচ বছর চলা আর ত্রুটির গণনা শূন্য এমন ড্রাইভ বৈশিষ্ট্য 197-এ 1 থাকা নতুন ড্রাইভের চেয়ে বেশি নির্ভরযোগ্য।

নজরদারির অর্থ

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