تجربیات کامند لاینی – شماره دو – دیسکی که سرریز میشود.

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

پیام خوش آمدگویی دیفالت اوبونتو سرور

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


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

من یک دیسک 5 گیگاباتی دارم که توی دایرکتوری root فایل سیستم سرورم mount شده.

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

به این کامند گفتیم برامون وضعیت فایل سیتم root رو به صورت human-readable نمایش بده. همون طور که میبینیم فقط 791 مگابایت در اختیار داریم و به زودی storage سرریز میشه!

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

برای نمونه الان حجم یک فایل رو با این کامند میتونیم ببینیم.

خب بریم حالا یکم بیشتر با option هاش ور بریم تا بتونیم به حجیم ترین دایرکتوری سیستم برسیم (احتمالا باید دایرکتوری لاگ ها باشه یا شاید هم دایرکتوری که توش مدیاها ریخته میشه. حالا بریم ببینیم چی میشه.)

اگر اینو بزنیم:

sudo du / -h | less

توی دایرکتوری root تمام دایرکتوری ها رو لیست میکنه به صورت human-redable. اون اخر هم pipe کردیمش به کامند less که یک دفعه تو ترمینال همه رو نمایش نده و اجازه بده که ما با اینتر زدن بتونیم توی لیست بریم پایین. همچین چیزی:

لیستی از تمام دایرکتوری های فایل سیستم root و حجمی که از disk گرفتن.

خب این لیست خیلی پراکنده و بزرگه. اصلا نمیشه از توش چیزی فهمید. بیاین یکم بهترش کنیم. مثلا 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 پاس دادیم که یک دفعه اطلاعات همه اش تو صفحه نمایش چاپ نشه و بشه راحت با اینتر زدن بریم پایین تا به ته لیست برسیم. خب خروجی این میشه:

همونطور که میبینید بیشترین حجم ها رو دایرکتوری های usr و var و lib گرفتن. من از var بررسی رو شروع میکنم.

سعی میکنم حجیم ترین فایل موجود داخل این دایرکتوری یعنی 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 رو هیچ وقت فراموش نکنین.

بازدیدها: 6

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *