افزایش حجم دیسک در لینوکس با LVM

برای افزایش حجم دیسک در لینوکس با LVM باید سه کار را به ترتیب انجام دهید: فضای جدید را به Volume Group اضافه کنید، Logical Volume را بزرگ کنید و در آخر فایل‌سیستم را به اندازه جدید برسانید. با دستور lvextend -r دو مرحله آخر یک‌جا انجام می‌شود و بیشتر وقت‌ها بدون خاموش کردن سرور و بدون پیاده کردن (unmount) پارتیشن کار می‌کند.

دو حالت رایج وجود دارد: یا دیسک جدیدی به سرور اضافه کرده‌اید، یا حجم دیسک موجود را در پنل مجازی‌ساز بالا برده‌اید. مراحل هر دو پایین آمده است. یک حالت سوم هم هست که در Ubuntu زیاد پیش می‌آید: نصب‌کننده فقط بخشی از دیسک را به Logical Volume داده و بقیه بی‌استفاده مانده است.

پیش از هر تغییر روی پارتیشن و دیسک، از داده‌های مهم بکاپ بگیرید. افزایش حجم معمولاً بی‌خطر است، ولی خطای تایپی در نام دیسک می‌تواند داده را پاک کند.

ساختار LVM را بشناسید

LVM سه لایه دارد. Physical Volume (PV) دیسک یا پارتیشنی است که به LVM داده شده. چند PV کنار هم یک Volume Group (VG) می‌سازند که مثل یک مخزن فضاست. از این مخزن، Logical Volumeها (LV) برش داده می‌شوند و روی هر LV فایل‌سیستم ساخته می‌شود، مثل / یا /var. چون LV از دیسک فیزیکی جداست، می‌توان آن را بزرگ کرد.

مرحله اول: وضعیت فعلی را ببینید

lsblk
sudo pvs
sudo vgs
sudo lvs
df -h

lsblk دیسک‌ها و پارتیشن‌ها را نشان می‌دهد. pvs، vgs و lvs به‌ترتیب PV، VG و LV را فهرست می‌کنند. در ستون VFree از خروجی vgs می‌بینید در VG چقدر فضای آزاد وجود دارد. اگر آنجا فضا هست، به مرحله «بزرگ کردن LV» بروید و نیازی به دیسک تازه نیست.

حالت اول: دیسک جدید اضافه کرده‌اید

فرض کنید دیسک جدید با lsblk به نام /dev/sdb دیده می‌شود و VG شما vg0 است. نام را حتماً از خروجی lsblk بخوانید، چون اشتباه گرفتن دیسک خطرناک‌ترین بخش کار است.

sudo pvcreate /dev/sdb
sudo vgextend vg0 /dev/sdb

حالا فضای دیسک جدید در VG آزاد است و می‌توانید LV را بزرگ کنید.

حالت دوم: حجم دیسک موجود را در پنل بالا برده‌اید

بعد از بزرگ کردن دیسک در Proxmox، VMware یا پنل ارائه‌دهنده، سیستم‌عامل باید از اندازه جدید باخبر شود. روی بیشتر سرورها بازخوانی دیسک کافی است:

echo 1 | sudo tee /sys/class/block/sda/device/rescan
lsblk

اگر دیسک دیگری مثل vda دارید، نام آن را بنویسید. اگر پارتیشنی که PV روی آن است (مثلاً sda3) آخرین پارتیشن دیسک باشد، آن را با growpart از بسته cloud-guest-utils بزرگ کنید و بعد PV را هماهنگ کنید:

sudo apt install cloud-guest-utils
sudo growpart /dev/sda 3
sudo pvresize /dev/sda3

در AlmaLinux و Rocky همین بسته با نام cloud-utils-growpart نصب می‌شود. شماره پارتیشن را از نتیجه lsblk بردارید؛ اگر عدد را اشتباه بدهید، پارتیشن دیگری را بزرگ می‌کنید. اگر دیسک شما پارتیشن‌بندی نشده و کل دیسک PV است، فقط pvresize /dev/sdb کافی است.

مرحله دوم: Logical Volume را بزرگ کنید

این دستور تمام فضای آزاد VG را به LV اضافه می‌کند و با گزینه -r فایل‌سیستم را هم بزرگ می‌کند. مسیر LV را از خروجی lvs یا df -h بردارید:

sudo lvextend -r -l +100%FREE /dev/vg0/root

در Ubuntu Server نصب‌کننده معمولاً VG را ubuntu-vg و LV را ubuntu-lv می‌نامد، پس دستور این شکل را دارد:

sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

اگر فقط می‌خواهید ۲۰ گیگابایت اضافه کنید، به‌جای درصد از -L +20G استفاده کنید:

sudo lvextend -r -L +20G /dev/vg0/var

بعد از اجرا با df -h ببینید فضای پارتیشن بیشتر شده است.

اگر گزینه r کار نکرد: بزرگ کردن دستی فایل‌سیستم

بسته به نوع فایل‌سیستم، دستور متفاوت است. نوع آن را در ستون FSTYPE از lsblk می‌خوانید:

فایل‌سیستمدستورورودی
ext4sudo resize2fs /dev/vg0/rootمسیر LV
XFSsudo xfs_growfs /نقطه mount، نه مسیر LV

XFS پیش‌فرض AlmaLinux و Rocky است و ext4 پیش‌فرض Ubuntu. یک تفاوت مهم: هر دو را می‌توان آنلاین بزرگ کرد، ولی XFS را اصلاً نمی‌شود کوچک کرد.

کوچک کردن LV: فقط وقتی لازم است و با احتیاط

کوچک کردن LV خطرناک‌تر از بزرگ کردن است. باید اول فایل‌سیستم کوچک شود و بعد LV، و اگر ترتیب را عوض کنید، داده از بین می‌رود. ext4 فقط در حالت unmount کوچک می‌شود و برای پارتیشن ریشه (/) باید با Live CD یا حالت rescue اقدام کنید. XFS اصلاً قابلیت کوچک شدن ندارد و راهش بکاپ‌گیری، ساخت LV کوچک‌تر و بازگرداندن داده است. اگر لازم نیست، این کار را نکنید و فضای آزاد را در VG نگه دارید.

خطاهای رایج

پیام یا نشانهعلت و راه حل
Insufficient free spaceدر VG فضای آزاد نیست؛ اول PV جدید اضافه کنید یا PV را با pvresize بزرگ کنید
Device /dev/sdb excluded by a filterروی دیسک امضای قدیمی یا پارتیشن وجود دارد؛ مطمئن شوید دیسک درست است و بعد با wipefs پاک‌سازی کنید
فضای df تغییر نکرده ولی lvs بیشتر شدهفایل‌سیستم بزرگ نشده؛ resize2fs یا xfs_growfs را اجرا کنید
growpart خطای NOCHANGE می‌دهدپارتیشن از قبل تمام دیسک را گرفته؛ دیسک واقعاً بزرگ نشده یا بازخوانی نشده است
دیسک جدید در lsblk دیده نمی‌شودبا دستور rescan بازخوانی کنید یا سرور را ری‌استارت کنید

دستور wipefs همه امضاهای دیسک را پاک می‌کند و باید فقط روی دیسک خالی و تأییدشده استفاده شود.

نکته‌هایی برای سرور واقعی

سوالات متداول

آیا برای افزایش حجم LVM باید سرور را خاموش کرد؟

معمولاً نه. بزرگ کردن LV و فایل‌سیستم ext4 یا XFS روی سیستم روشن انجام می‌شود. فقط اگر دیسک جدید را به‌صورت فیزیکی به سرور اضافه می‌کنید و سرور قابلیت hot-add ندارد، لازم است سرور را برای نصب دیسک خاموش کنید.

فرق lvextend با lvresize چیست؟

lvextend فقط بزرگ می‌کند، پس برای کار روزمره امن‌تر است. lvresize می‌تواند کوچک هم بکند و اگر اندازه را اشتباه بدهید، ممکن است LV را کوچک‌تر از فایل‌سیستم کند و داده را خراب کند.

چرا بعد از نصب Ubuntu فقط بخشی از دیسک استفاده شده است؟

نصب‌کننده Ubuntu Server در حالت LVM گاهی فقط یک اندازه ثابت را به LV ریشه می‌دهد و بقیه فضا در VG آزاد می‌ماند. با sudo vgs ستون VFree را ببینید؛ اگر فضا هست، همان lvextend -r -l +100%FREE کافی است.

آیا پارتیشن ریشه را می‌شود روی سیستم روشن کوچک کرد؟

نه. کوچک کردن پارتیشن ریشه باید در حالت unmount انجام شود و برای XFS اصلاً ممکن نیست. اگر چنین نیازی دارید، بکاپ بگیرید و LV کوچک‌تر بسازید.

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

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