برای افزایش حجم دیسک در لینوکس با 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 -hlsblk دیسکها و پارتیشنها را نشان میدهد. 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 میخوانید:
| فایلسیستم | دستور | ورودی |
|---|---|---|
| ext4 | sudo resize2fs /dev/vg0/root | مسیر LV |
| XFS | sudo 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 همه امضاهای دیسک را پاک میکند و باید فقط روی دیسک خالی و تأییدشده استفاده شود.
نکتههایی برای سرور واقعی
- در Proxmox، LV پیشفرض سیستم با lvm-thin کار میکند و روش بزرگ کردنش متفاوت است؛ روش آن در کانفیگ سرور Proxmox VE و مقایسهاش با پلتفرمهای دیگر در مقایسه Proxmox و ESXi و KVM آمده است.
- بزرگ کردن LV جای اضافه کردن دیسک مطمئن را نمیگیرد. اگر دیسکهای فیزیکی RAID ندارند و یکی خراب شود، کل VG از دست میرود. درباره سطحهای RAID در RAID چیست نوشتهایم.
- پر شدن دیسک را قبل از کامل شدن از طریق مانیتورینگ ببینید. دستورهای بررسی در دستورات مانیتورینگ سرور لینوکس و چکلیستهای دورهای در چک لیست نگهداری سرور آمده است.
- پیش از اقدام روی سرور اصلی، بکاپ بگیرید و بازیابی آن را امتحان کنید؛ طرح کامل در بکاپ گیری سرور و بازیابی بحران است.
سوالات متداول
آیا برای افزایش حجم 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 کوچکتر بسازید.





