در آموزش تغییر اندازه پارتیشن و فایلسیستم ext4 در لینوکس، نحوه افزایش و کاهش حجم پارتیشن و فایلسیستم را بررسی میکنیم. این کار به ویژه روی سرورهای لینوکس و سرورهای مجازی برای استفاده از فضای جدید دیسک یا مدیریت فضای ذخیرهسازی کاربرد دارد. در این فرایند باید توجه داشت که تغییر اندازه پارتیشن و تغییر اندازه فایلسیستم دو عملیات جداگانه هستند و ترتیب انجام آنها در افزایش و کاهش حجم متفاوت است.
یکی از کارهای رایج در مدیریت سرورهای لینوکس، افزایش فضای یک پارتیشن بدون نصب مجدد سیستمعامل است. برای مثال ممکن است دیسک یک سرور مجازی از 50 گیگابایت به 100 گیگابایت افزایش پیدا کرده باشد، اما فایلسیستم همچنان همان 50 گیگابایت قبلی را نشان دهد.
در این شرایط باید دو مرحله را از یکدیگر تفکیک کنیم:
- افزایش اندازه پارتیشن
- افزایش اندازه فایلسیستم
برای فایلسیستم ext4 معمولا از ابزار resize2fs استفاده میشود. نکته مهم این است که اجرای resize2fs به تنهایی همیشه کافی نیست. ابتدا باید فضای بیشتری در اختیار پارتیشن قرار گرفته باشد، سپس فایلسیستم را برای استفاده از فضای جدید گسترش دهیم.
تفاوت پارتیشن و فایلسیستم چیست؟
پارتیشن بخشی از فضای دیسک است که برای یک کاربرد مشخص اختصاص داده میشود، در حالی که فایلسیستم ساختاری است که امکان ذخیره و مدیریت فایلها را روی آن پارتیشن فراهم میکند.
برای مثال ممکن است وضعیت دیسک به شکل زیر باشد:
/dev/sda 100G └─ /dev/sda2 50G /
در این مثال دیسک 100 گیگابایت است، اما پارتیشن dev/sda2/ فقط 50 گیگابایت حجم دارد.
حتی اگر پارتیشن را به 100 گیگابایت افزایش دهیم، ممکن است فایلسیستم ext4 هنوز 50 گیگابایت باشد. در این حالت باید با resize2fs فایلسیستم را هم گسترش دهیم.
بررسی وضعیت دیسک و پارتیشنها
قبل از هر تغییری، ابتدا وضعیت دیسکها، پارتیشنها و فایلسیستمها را بررسی کنید.
دستور lsblk یکی از بهترین ابزارها برای مشاهده ساختار دیسک است:
lsblk
برای مشاهده نوع فایلسیستم و نقاط اتصال:
lsblk -f
خروجی ممکن است چیزی شبیه این باشد:
NAME FSTYPE FSVER LABEL UUID MOUNTPOINTS sda ├─sda1 ext4 ... /boot └─sda2 ext4 ... /
برای مشاهده فضای استفادهشده و آزاد فایلسیستم نیز از df استفاده کنید:
df -h
مثلا:
Filesystem Size Used Avail Use% Mounted on /dev/sda2 50G 32G 16G 67% /
در این مرحله باید مشخص باشد که دقیقا کدام پارتیشن را میخواهید افزایش دهید.
قبل از تغییر اندازه پارتیشن، بکاپ بگیرید
تغییر اندازه پارتیشن عملیاتی حساس است. یک اشتباه در تعیین پارتیشن، اندازه یا نقطه شروع آن میتواند باعث از دست رفتن اطلاعات شود.
قبل از انجام عملیات روی سرور واقعی:
- از اطلاعات مهم بکاپ تهیه کنید
- نام دقیق دیسک و پارتیشن را بررسی کنید
- مطمئن شوید فضای جدید در ادامه همان پارتیشن قرار گرفته است
- در صورت امکان عملیات را ابتدا روی یک ماشین آزمایشی انجام دهید
به ویژه هنگام تغییر اندازه پارتیشن با ابزارهایی مانند fdisk، نباید نقطه شروع پارتیشن موجود تغییر کند.
افزایش اندازه دیسک در سرور مجازی
فرض کنیم دیسک سرور از 50 گیگابایت به 100 گیگابایت افزایش یافته است.
ابتدا وضعیت جدید دیسک را بررسی کنید:
lsblk
ممکن است نتیجه به شکل زیر باشد:
sda 100G ├─sda1 1G └─sda2 50G
در این وضعیت 50 گیگابایت فضای جدید در انتهای دیسک وجود دارد، اما هنوز در اختیار /dev/sda2 قرار نگرفته است.
ابتدا باید پارتیشن را گسترش دهیم.
افزایش اندازه پارتیشن با fdisk
برای مشاهده جدول پارتیشن میتوان از fdisk استفاده کرد:
sudo fdisk -l /dev/sda
سپس برای ویرایش جدول پارتیشن:
sudo fdisk /dev/sda
در محیط fdisk ابتدا با p جدول پارتیشنها را مشاهده کنید:
Command (m for help): p
شماره پارتیشنی که قصد افزایش آن را دارید مشخص کنید.
اگر پارتیشن موردنظر مثلا dev/sda2/ است، هنگام حذف و ایجاد مجدد پارتیشن باید دقیقا همان Start Sector قبلی را وارد کنید و فقط مقدار End Sector را افزایش دهید.
این نکته بسیار مهم است.
در واقع ما اطلاعات فایلسیستم را حذف نمیکنیم، بلکه جدول پارتیشن را طوری تنظیم میکنیم که همان پارتیشن قبلی فضای بیشتری داشته باشد.
پس از اعمال تغییرات، جدول پارتیشن را ذخیره کنید.
اگر در مورد Start Sector مطمئن نیستید، عملیات را ادامه ندهید. تغییر اشتباه نقطه شروع میتواند دسترسی به اطلاعات پارتیشن را از بین ببرد.
بررسی پارتیشن بعد از تغییر اندازه
پس از تغییر جدول پارتیشن، دوباره وضعیت را بررسی کنید:
lsblk
اکنون باید اندازه پارتیشن افزایش یافته باشد.
برای مثال:
sda 100G ├─sda1 1G └─sda2 99G
اما ممکن است df -h هنوز حجم قبلی فایلسیستم را نشان دهد:
/dev/sda2 50G 32G 16G 67% /
این طبیعی است. در این مرحله پارتیشن بزرگ شده، اما فایلسیستم هنوز از فضای جدید استفاده نمیکند.
اگر به یک محیط لینوکس پایدار برای میزبانی و اجرای سرویسها نیاز دارید، خرید سرور مجازی ابری میتواند گزینه مناسبی باشد.
افزایش اندازه فایلسیستم ext4 با resize2fs
برای گسترش فایلسیستم ext4 از resize2fs استفاده میکنیم:
sudo resize2fs /dev/sda2
اگر فایلسیستم روی پارتیشن root قرار داشته باشد، در بسیاری از شرایط ext4 امکان افزایش اندازه به صورت Online را فراهم میکند و نیازی به Unmount کردن فایلسیستم برای افزایش حجم نیست.
پس از پایان عملیات، دوباره حجم فایلسیستم را بررسی کنید:
df -h
اکنون باید فضای جدید قابل استفاده باشد:
Filesystem Size Used Avail Use% Mounted on /dev/sda2 99G 32G 63G 34% /
در نتیجه، برای افزایش حجم فایلسیستم ext4، ابتدا باید فضای دیسک افزایش پیدا کند، سپس اندازه پارتیشن افزایش یابد و در ادامه با استفاده از دستور resize2fs فایلسیستم را گسترش دهیم. در پایان نیز با دستور df -h وضعیت و حجم جدید فایلسیستم را بررسی میکنیم.
آیا همیشه باید اندازه فایلسیستم را مشخص کنیم؟
خیر. اگر بخواهید فایلسیستم از تمام فضای موجود پارتیشن استفاده کند، کافی است دستور زیر را اجرا کنید:
sudo resize2fs /dev/sda2
اما میتوان اندازه مشخصی هم برای فایلسیستم تعیین کرد. برای مثال:
sudo resize2fs /dev/sda2 80G
در این حالت فایلسیستم به اندازه مشخصشده تغییر خواهد کرد.
برای افزایش اندازه فایلسیستم معمولا استفاده از اندازه پیشفرض، یعنی استفاده از تمام فضای قابل دسترس پارتیشن، سادهتر و مناسبتر است.
بررسی نوع فایلسیستم قبل از resize2fs
resize2fs مخصوص فایلسیستمهای خانواده ext مانند ext2، ext3 و ext4 است.
بنابراین قبل از استفاده، نوع فایلسیستم را بررسی کنید:
lsblk -f
یا:
df -T
اگر خروجی چیزی مانند زیر باشد:
/dev/sda2 ext4
میتوان از resize2fs استفاده کرد.
اما اگر فایلسیستم xfs باشد، resize2fs ابزار مناسبی نیست و باید از ابزارهای مخصوص XFS استفاده شود.
بررسی فایلسیستم با e2fsck
در صورتی که قرار است فایلسیستم را کوچک کنیم، شرایط متفاوت است.
برای کاهش اندازه فایلسیستم ext4، ابتدا باید فایلسیستم بررسی شود و سپس اندازه آن کاهش پیدا کند. برای این کار معمولا باید فایلسیستم Unmount باشد:
sudo umount /dev/sda2
سپس:
sudo e2fsck -f /dev/sda2
بعد از آن میتوان اندازه فایلسیستم را کاهش داد:
sudo resize2fs /dev/sda2 40G
و در مرحله بعد، اندازه پارتیشن را کاهش داد.
ترتیب عملیات در افزایش و کاهش حجم
ترتیب انجام عملیات هنگام تغییر اندازه بسیار مهم است. برای افزایش حجم ابتدا باید اندازه پارتیشن افزایش پیدا کند و سپس فایلسیستم گسترش داده شود. اما هنگام کاهش حجم، این ترتیب برعکس است و ابتدا باید حجم فایلسیستم کاهش یابد و سپس اندازه پارتیشن کم شود. بنابراین، هنگام افزایش حجم ابتدا باید اندازه پارتیشن افزایش پیدا کند و سپس فایلسیستم گسترش داده شود. در مقابل، هنگام کاهش حجم ابتدا باید اندازه فایلسیستم کاهش یابد و سپس حجم پارتیشن کم شود. رعایت این ترتیب برای جلوگیری از آسیب به فایلسیستم و از دست رفتن اطلاعات ضروری است.
این تفاوت بسیار مهم است. اگر ابتدا پارتیشن را کوچک کنید و بخشی از اطلاعات فایلسیستم خارج از محدوده جدید قرار بگیرد، احتمال از دست رفتن داده وجود دارد.
بررسی فضای جدید بعد از افزایش حجم
بعد از اجرای resize2fs بهتر است چند دستور برای اطمینان از وضعیت جدید اجرا کنید:
lsblk
سپس:
df -h
و برای مشاهده نوع فایلسیستم:
df -T
اگر اندازه پارتیشن و فایلسیستم با یکدیگر هماهنگ شده باشند، فضای جدید باید در df -h قابل مشاهده باشد.
اگر resize2fs خطا داد چه کنیم؟
اگر با خطایی هنگام اجرای resize2fs مواجه شدید، ابتدا وضعیت فایلسیستم و پارتیشن را بررسی کنید:
lsblk -f df -hT
همچنین مشخص کنید پارتیشن موردنظر واقعا فضای آزاد بیشتری در اختیار دارد یا خیر.
برای بررسی جدول پارتیشن:
sudo fdisk -l
اگر اندازه پارتیشن افزایش پیدا نکرده باشد، اجرای resize2fs نمیتواند فضای جدید دیسک را در اختیار فایلسیستم قرار دهد.
به زبان ساده، resize2fs نمیتواند خودش فضای جدیدی به پارتیشن اضافه کند. این ابزار فقط فایلسیستم ext4 را برای استفاده از فضای موجود در پارتیشن گسترش میدهد.
افزایش حجم در LVM
اگر سرور از LVM استفاده میکند، روند افزایش حجم با پارتیشنبندی معمولی متفاوت است. در این ساختار، دیسک معمولا شامل یک Physical Volume، یک Volume Group و یک Logical Volume است و فایلسیستم ext4 روی Logical Volume قرار دارد.
در چنین شرایطی، ابتدا فضای Logical Volume را با دستور lvextend افزایش میدهیم و سپس فایلسیستم را گسترش میدهیم. برای مثال، پس از افزایش فضای Logical Volume میتوان فایلسیستم ext4 را با resize2fs افزایش داد.
بنابراین، در LVM معمولا ابتدا Logical Volume افزایش پیدا میکند و سپس فایلسیستم روی آن گسترش داده میشود.
برای مثال:
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-root
سپس:
sudo resize2fs /dev/mapper/ubuntu--vg-root
البته نام Logical Volume در هر سرور متفاوت است و نباید این مسیر را بدون بررسی روی سیستم واقعی وارد کرد.
جمعبندی
افزایش حجم فایلسیستم ext4 در لینوکس، به ویژه روی سرورهای مجازی، یکی از کارهای رایج در مدیریت سیستم است. نکته مهم این است که افزایش اندازه پارتیشن و افزایش اندازه فایلسیستم دو عملیات جداگانه هستند.
برای بررسی وضعیت دیسک و فایلسیستم میتوان از ابزارهایی مانند lsblk و df استفاده کرد. در حالت معمول، ابتدا پارتیشن را گسترش میدهیم و سپس با استفاده از resize2fs فایلسیستم ext4 را برای استفاده از فضای جدید آماده میکنیم.
برای افزایش حجم، ابتدا پارتیشن و سپس فایلسیستم را گسترش دهید. در مقابل، برای کاهش حجم باید ابتدا فایلسیستم را کوچک کنید و سپس اندازه پارتیشن را کاهش دهید.
پیش از تغییر اندازه پارتیشنهایی که حاوی اطلاعات مهم هستند، حتما نسخه پشتیبان معتبر تهیه کنید و هنگام کار با ابزارهای پارتیشنبندی، مقدار Start Sector پارتیشن را با دقت بررسی کنید. یک اشتباه در این مرحله میتواند باعث آسیب به فایلسیستم و از دست رفتن اطلاعات شود.