تغییر اندازه و گسترش پارتیشن های لینوکس با فضای unallocated

گاهی وقتا پیش میاد که میخواید فضای دیسک و ظرفیت پارتیشن خودتون رو توی لینوکس افزایش بدید.مثلا توی vmware یا virtual box یا حتی esxi ظرفیت اضافی به لینوکس خودتون دادید و لینوکس اون فضای اضافی رو unallocated تشخیص میده.شما نمیخواهید که پارتیشن جدید بسازید بلکه میخواید اون پارتیشنی که محدودیت فضا داره رو افزایش بدید.نکته:قبل از انجام این روش از داده های خود و یا سیستم عامل حتما بکاپ یا اسنپ شات بگیرید.چون یک حرکت اشتباه ممکنه باعث از دست رفتن داده هاتون بشه.این روش روی اکثر لینوکس ها از جمله CentOS, RHEL, Ubuntu, Debian و... جواب میده.استفاده از فضای unallocated روی لینوکس و تخصیص اون به یک پارتیشن خاص یکی از معضل های مدیران و ادمین های لینوکسی هست خصوصا که وقتی بحث فضای مجازی سازی (VM) مطرح باشه.سناریو زیر رو در نظر بگیرید.بازدن دستور cfdisk توی ترمینال لینوکسی میتونید تصویر بالا رو ببینید .(البته fdisk -l هم بهتون اطلاعات مشابهی رو میده )تصویر بالا داره میگه که:حجم 512 مگابایت برای بوت پارتیشن تون در نظر گرفته شده (sda1)حجم 6.8 گیگابایت اختصاص داده شده به سیستم عامل لینوکس و پکیج هاش (sda2)حجم حدود 100 گیگابایت فضای آزاد و تخصیص داده نشده داریم (unallocated)خیلی خوب میشد اگه این 100 گیکابایت رو به حافظه 6.8 گیگی خودمون اضافه کنیم ، در اینصورت سیستم عامل ما 106.8 گیگابایت فضا داشت.توی این آموزش ما همین کار رو خواهیم کرد.برای این آموزش ما از ابزار های خود لینوکس و بدون نصب ابزار خارجی (در centos ) استفاده خواهیم کرد.خود لینوکس ابزارهای خوبی از جمله fdisk , pvresize , lvdisplay , lvextend در اختیار ما گذاشته و این ابزار ها در اکثر توزیع ها مثل CentOS 5.x, CentOS 6.x, CentOS 7.x, RHEL, Ubuntu, Debian و... در دسترس هستند.1-تغییر جدول پارتیشن (partition table) :اول ما نیاز داریم که پارتیشن تیبل sda2 خودمون رو تغییر بدیم تا تمام ظرفیت موجود و خالی دیسک رو بگیره.نگران نباشید این در این مرحله داده های موجود در پارتیشن sda2 و کلا داده هاتون رو از دست نمیدید.در این مرحله ما نیاز داریم تا سیستم عامل مون رو reboot کنیم تا تغییرات لحاظ بشه و بعد از بالا آمدن تغییرات را مشاهده خواهیم کرد.بیایید شروع کنیم.اول دستور زیر رو بزنید تا وارد محیط برنامه fdisk بشیم:fdisk /dev/sda بعد از زدن دستور بالا p را درکیبورد بفشارید تا پارتیشن تیبل موجود در sda را نمایش دهد.این نکته مهمه که مقدار عددی dev/sda2 در ستون های START و END رو یادداشت کنید .تا بعد از تغییرات مقایسه شون کنیم با مقدار جدیدی که گرفته اند.(اگه مقدارشون کمتر باشه یعنی توی مراحل بعد اشتباه کردید و مقداری داده از دست میره پس دقت کنید)سپس کلید d را بفشارید تا به حالت پاک کردن پارتیشن تیبل وارد بشید.توی سناریو ما عدد 2 همون پارتیشنی هست که قراره جدولش به روز بشه.بازم میگم انجام این دستور باعث از دست رفتن داده ما نمیشه.بلکه جدول map کننده ادرس ها از partition table پاک میشه و داده سرجاش هست.سپس n را بزنید تا یک پارتیشن جدید اضافه کنید.دقت کنید که مدل پارتیشن تون مثل قبلی باشه (توی این سناریو primary هست).سپس مقدار START فضای ادرس دهی را که از مرحله قبل یادداشت برداری کردید، وارد کنید(البته خود سیستم به صورت پیش فرض همون عدد رو باید پیشنهاد بده)همینطور دقت کنید که مقدار END هم پیشفرض خود سیستم باشه.در پایان این مرحله ما نیاز داریم که نوع پارتیشن رو از Linux به Linux LVM تغییر بدیم.برای این کار کلید t را بفشارید تا وارد partition mode شوید عدد 2 را بزنید تا پارتیشن مورد نظر ما (برای افزایش حجم) انتخاب شود.سپس مقدار 8e (عدد مربوط به Linux LVM) را وارد کنید تا این نوع پارتیشن انتخاب شود.اکنون میتوانید p را بزنید تا ببینید که مقدار ستون START دقیقا مثل قبل است و مقدار ستون END تغییر کرده و افزایش حجم داشته ایم.نکته:اگر اشتباهی رخ داد با زدن کلید d میتوانیم تغییرات را پاک کرده و از اول ادامه دهیم.تازمانی که کلید w را نزنیم "هیچ" تغییری در سیستم ما انجام نخواهد شد.(خیالتون راحت)اگه همه چی اوکی بود و درست پیش رفتید میتونید کلید w رو بزنید تا تغییرات لحاظ بشه.2- سیستم خود را راه اندازی مجدد کنید (Reboot)درست بعد از این تغییرات پیامی از سیستم مشاهده خواهید کرد که میگه: the partition table couldn’t be accessedو نمیتونه داده ازش بخونه.سیستم رو ری استارت کنید.3- توسعه دادن پارتیشن تغییر داده شده (LVM Partition)صبر کنید سیستم بالا بیاد و سپس دستور زیر را بزنید.pvresize /dev/sda2 سپس فرمان cfdisk را بزنید اگه همه چی درست باشه باید مثل تصویر زیر رو ببینید.تصویر بالا نشون میده که حافظه sda2 به حجم 106.8 گیگابایتی گسترش پیدا کرده.ری استارت (reboot) دوم لازمه تا تغییرات سرویس ها روی حافظه جدید اعمال بشه.4- گسترش مقدار حجم منطقی پارتیشن (Logical Volume)مورد بعدی اینه که ما باید بدونیم که این حجم (فضا) منطقی رو به کجا توسعه بدیم برای این منظور باید مسیرش رو بدونیم .با استفاده از فرمان زیر میتونیم مسیر رو پیدا کنیم.lvdisplay -v معمولا باید اولین گزینه از لیست خروجی فرمان بالا باشه.با این حال با نگاه کردن به حجم شون میشه مسیر رو پیدا کرد .توی مثال ما /dev/vg/lv_root هست.حالا که مسیر رو داریم با فرمان زیر میتونیم حجم رو افزایش بدیم.lvextend -l +100%FREE /dev/vg/lv_root 5-افزایش فایل سیستم (Extend the File System)حالا که تمام فضای unallocated رو به logical volume خود اضافه کردیم نیاز داریم که مقادیر file system ما با logical volume یکی بشه و هر دو یک مقدار رو نشون بدند.با استفاده از دستور ساده زیر میتونید این کار رو بکنید.البته بستگی داره که شما از EXT4 (این روزا اکثرا همه از همین استفاده میکنند) یا XFS یکی از دو فرمان زیر رو بزنید.برای EXT4 فرمان:resize2fs /dev/vg/lv_root برای XFS فرمان:xfs_growfs /root بزنید.نکته برای فهمیدن اینکه کدام یک از EXT4 یا XFS رو انتخاب کنید از دستور زیر استفاده کنید تا اطلاعات کافی رو بدست بیارید. df -Thامیدوارم که این روش بدردتون خورده باشه.منبع: https://www.ryadel.com/en/resize-extend-disk-partition-unallocated-disk-space-linux-centos-rhel-ubuntu-debian/