تصور کنید به سرور اوبونتویی تون، ssh میزنید و متوجه میشید که دیسکش در حال پر شدنه:

خب میخوایم مرحله به مرحله با هم دیگه پیش بریم ببینیم چه کار میتونیم بکنیم که هم ببینیم وضعیت چطوره و هم ببینیم چطور میتونیم جلوی پر شدن دیسک رو بگیریم و هم چطور اصلا بفهمیم چرا دیسک داره پر میشه! یعنی کدوم فایل یا دایرکتوری داره کل حجم رو میگیره.
اول بریم ببینیم چه block storage ها یا خودمونی ترش چه دیسک هایی به سرور یا کامپیوتر وصله. مثلا فلش دیسک ها یا هاردهای ssd مون یا هرچیز دیگه. تو این مرحله از کامند lsblk
استفاده میکنیم.

خب مرحله دوم باید بریم ببینیم روی این دیسک چقدر از فضاها گرفته شده و چقدر آزاده. توی این مرحله با یک کامند به اسم df
سروکار داریم. df
کارش اینه که بهمون میگه تو فایل سیستممون از لحاظ مصرف دیسک چه طوره اوضاع:

خب تو مرحله سوم کافیه بریم ببینیم توی این فایل سیستم چه دایرکتوری هایی بیشترین حجم رو گرفتن تا کمی به ریشه مشکل نزدیک تر بشیم. خب اینجاست که کامند du
وارد کار میشه. این کامند چند لایه بیشتر وارد فایل سیستم میشه و درباره وضعیت مصرف دیسک دایرکتوری ها و فایل ها بهمون میگه. بریم یک مثال ساده ازش با هم ببینیم:

خب بریم حالا یکم بیشتر با option هاش ور بریم تا بتونیم به حجیم ترین دایرکتوری سیستم برسیم (احتمالا باید دایرکتوری لاگ ها باشه یا شاید هم دایرکتوری که توش مدیاها ریخته میشه. حالا بریم ببینیم چی میشه.)
اگر اینو بزنیم:
sudo du / -h | less
توی دایرکتوری root تمام دایرکتوری ها رو لیست میکنه به صورت human-redable. اون اخر هم pipe کردیمش به کامند less
که یک دفعه تو ترمینال همه رو نمایش نده و اجازه بده که ما با اینتر زدن بتونیم توی لیست بریم پایین. همچین چیزی:

خب این لیست خیلی پراکنده و بزرگه. اصلا نمیشه از توش چیزی فهمید. بیاین یکم بهترش کنیم. مثلا sort اش کنیم. از بیشترین حجم تا کمترین حجم ها رو بهمون نمایش بده. پس کافیه کامند sort
رو هم وارد کار کنیم و اصطلاحا تو زنجیره pipe کردن هامون بهش پاس بدیم:
sudo du / -h -x -d 1 | sort -r -h | less
خب خب! الان کامل توضیح میدم این کامند چه میکنه. اولین گام کامند du
با یک سری آپشن اجرا میشه. برای فهمیدن این که هر کدوم از این آپشن ها چه میکنه کافیه توی man du
بخونین دربارش. ولی به صورت خلاصه -h میگه اعداد سایز فایل/دایرکتوریها رو به صورت آدمیزادی نمایش بده (چند مگابایت/گیگابایت و …)، بخش -x هم بود و نبودش زیاد تاثیری نداره ولی باعث میشه فقط و فقط توی همین فایل سیستم دنبال اطلاعات بگرده. اینجا درباره فلسفه اش بیشتر بخونین. همچنین -d هم میگه تا چه عمقی رو نمایش بده. برای فهمش کافیه عددشو از ۱ تا ۴ یا ۵ یا ۶ یا … عوض کنید. متوجه میشید کاربردش چیه. بعدش خروجی این دستوری pipe میشه به کامند sort
و اونجا هم دو تا آپشن داریم. یکیش یعنی -r میگه به صورت کاهشی سورت کنه. یعنی عددای گنده اول تر و عددای کوچکتر آخرتر! و -h هم میگه مرتب سازی رو بر اساس فیلد سایز توی دستور du
انجام بده. برای فهمیدنش بزنید man sort
و ببینید توضیحشو. در نهایت هم همه رو به less
پاس دادیم که یک دفعه اطلاعات همه اش تو صفحه نمایش چاپ نشه و بشه راحت با اینتر زدن بریم پایین تا به ته لیست برسیم. خب خروجی این میشه:

سعی میکنم حجیم ترین فایل موجود داخل این دایرکتوری یعنی var رو پیدا کنم. برای این کار باید از دستور find کمک بگیریم. دستور find یکی از باحالترین دستورهاییه که دیدم. حالا تو مطلب جدایی درباره این دستور و کاربردهاش بیشتر مینویسم. کامندمون این شکلی میشه:
sudo find /var -type f -exec du -h {} \; | sort -h -r | less
خب فقط بخش اولشو توضیح میدم یعنی find. به دستور find گفتیم که بروی توی دایرکتوری var و تمام چیزهایی که از جنس فایل هستند (type f) رو پیدا کن و نمایشش بده اطلاعاتشونو. اون -exec رو اگر متوجه نمیشین قضیه اش چیه، بهترین کار دیدن مثال و توضیحات خود دستور توی man find
عه. ولی خلاصه اش این که به ازای هر فایلی که این دستور پیدا میکنه پاسش میده به به اون دستور du -h که حجم فایل رو بهمون نمایش بده. اینجا بیشتر دربارش بخونین. خروجی این میشه:

حالا اگر اینجا یک فایل حجیم باشه که نیاز نداشته باشمش میتونم پاکش کنم. ولی دقت کنید، شما به عنوان کاربر یک سیستم یا یک مدیر سیستم باید بدونید دارید چی رو پاک میکنید! پس چیز اشتباهی رو پاک نکنید! من همیشه قبل از اجرای کامند های rm از خودم میپرسم که دقیقا دارم چه کار میکنم و الان اگر اینتر بزنم چی میشه. چون تجربیات تلخی ازش دارم 🙂
خب بعد از یک پاکسازی رو این سرور نتیجه این شد:

چند تا نکته:
- برای حل هر مسئله به اندازه همه آدم ها راه حل وجود داره. پس ممکنه شما هم راه حل دیگه ای داشته باشید که خوشحال میشم ببینم تو نظرات. سعی میکنم راه حل هاتونو تو خود پست هم بزارم تو بخش آپدیت های پست.
- تو دنیای واقعی موقع لاگین کردن به سرور نباید بفهمین استوریجتون داره پر میشه. بلکه باید سیستم های مانیتورینگ بفهمن که الان ۶۰ درصد استوریج پر شده و بهتون خبر بدن، الان ۸۰ درصد پر شده و هشدار بدن. و اگر بالای ۹۰ درصد پر شد یک سری اقدامات مشخص رو شروع کنن به انجام و …
- تو لاگ کردن ها همیشه باید rotate ها فعال باشه. هم باعث میشه یک فایل خیلی گنده نداشته باشیم و هم بتونیم مثلا ۱ هفته اخیر رو نگه داریم. همه نرم افزارهای استانداردی که لاگ میندازن این قابلیت رو به صورت دیفالت باید داشته باشند و دارند. اگر هم نداشته باشند باید خودمون با ابزارهای لینوکسی این قابلیت رو بهشون بدیم. مثال برای nginx: لینک
- موقع استفاده از کامند rm خیلی مراقب باشید. ابزارهای مثل safe-rm هم بهتون کمک میکنن که اگر اشتباه کردین جلوشو بگیرن! یا این مدل ابزارهای دیگه: لینک
- من معمولا آپشن های کامند ها یادم میره و همیش توی
man
زدن ها دوباره به یادشون میارم. پس استفاده ازman
رو هیچ وقت فراموش نکنین.