LVM چیست؟
LVM ابزاری در لینوکس است که به شما اجازه میدهد فضای ذخیرهسازی را بدون نیاز به خاموش کردن سرور یا از دست دادن داده، تغییر اندازه دهید، ترکیب کنید و مدیریت کنید.
تعریف
وقتی یک هارددیسک یا SSD را پارتیشنبندی میکنید، اندازه هر پارتیشن معمولاً ثابت است. اگر فضای یکی از پارتیشنها تمام شود، تغییر دادن آن کار سختی است و ممکن است دادهها از بین بروند.
LVM مثل یک لایه هوشمند بین دیسک و سیستمعامل عمل میکند. با LVM میتوانید:
- فضای یک پارتیشن را بزرگتر کنید بدون اینکه سرور را خاموش کنید
- چند دیسک را با هم ترکیب کنید و یک فضای بزرگتر بسازید
- فضای ذخیرهسازی را منعطفتر مدیریت کنید
LVM (Logical Volume Manager) یک لایه انتزاعی بین Block Deviceها (دیسکها یا پارتیشنها) و File System است که در سطح Kernel لینوکس کار میکند.
LVM امکان مدیریت پویای فضای ذخیرهسازی را فراهم میکند؛ از جمله:
- Online Resize (بزرگ و کوچک کردن Volume بدون Downtime)
- Aggregation (ترکیب چند Physical Volume در یک Volume Group)
- Snapshot (گرفتن تصویر لحظهای از یک Volume)
- Thin Provisioning (تخصیص بیش از ظرفیت واقعی)
- Striping و Mirroring در سطح نرمافزاری
چرا LVM به وجود آمد؟
قبل از LVM، مدیریت فضای ذخیرهسازی در لینوکس محدودیتهای جدی داشت:
| مشکل | توضیح |
|---|---|
| اندازه ثابت پارتیشن | بعد از ساخت پارتیشن، تغییر اندازه آن بسیار دشوار بود |
| محدودیت تعداد پارتیشن | در MBR حداکثر 4 پارتیشن Primary قابل ایجاد بود |
| عدم امکان ترکیب دیسکها | نمیشد چند دیسک را بهسادگی با هم ترکیب کرد |
| ریسک بالای تغییرات | هر تغییر در ساختار دیسک نیاز به Downtime و ریسک از دست رفتن داده داشت |
LVM این مشکلات را حل کرد و مدیریت ذخیرهسازی را پویا و انعطافپذیر کرد.
معماری LVM
LVM از سه لایه اصلی تشکیل شده است:
توضیح هر لایه
| لایه | نام کامل | توضیح ساده | توضیح فنی |
|---|---|---|---|
| PV | Physical Volume | دیسک یا پارتیشنی که به LVM معرفی شده | Block Device که با pvcreate برای استفاده در LVM آماده میشود |
| VG | Volume Group | یک استخر بزرگ از فضا که از یک یا چند PV ساخته شده | مجموعهای از PVها که فضای آنها را تجمیع میکند و به واحدهای PE (Physical Extent) تقسیم میشود |
| LV | Logical Volume | فضایی شبیه پارتیشن که سیستمعامل از آن استفاده میکند | بخشی از VG که با lvcreate ساخته میشود و میتوان روی آن File System ایجاد کرد |
یک مثال ساده
فرض کنید یک سرور دارای دو Logical Drive است:
- Logical Drive 1: ظرفیت 500GB
- Logical Drive 2: ظرفیت 500GB
بدون LVM، هر Logical Drive فقط بهصورت جداگانه قابل استفاده است. اما با LVM:
مرحله ۱: هر دو Logical Drive را بهعنوان PV معرفی میکنید.
مرحله ۲: هر دو PV را در یک VG قرار میدهید. حالا یک استخر 1TB دارید.
مرحله ۳: از این استخر، هر تعداد LV که نیاز دارید میسازید.
مثلاً:
| Logical Volume | اندازه | Mount Point | کاربرد |
|---|---|---|---|
lv-root | 100GB | / | سیستمعامل |
lv-var | 200GB | /var | Logها و دادههای متغیر |
lv-data | 600GB | /data | ماشینهای مجازی و دادهها |
| آزاد | 100GB | — | برای نیاز آینده |
با LVM نیازی نیست همه فضا را از ابتدا تخصیص دهید. میتوانید بخشی از فضا را آزاد نگه دارید و در آینده هر LV را بزرگتر کنید.
LVM در مقابل پارتیشنبندی سنتی
| ویژگی | پارتیشنبندی سنتی | LVM |
|---|---|---|
| تغییر اندازه آنلاین | ❌ معمولاً نیاز به Downtime دارد | ✅ بزرگ کردن آنلاین بدون Downtime |
| ترکیب چند دیسک | ❌ ممکن نیست | ✅ چند PV در یک VG |
| Snapshot | ❌ پشتیبانی نمیشود | ✅ قابلیت Snapshot دارد |
| Thin Provisioning | ❌ پشتیبانی نمیشود | ✅ تخصیص بیش از ظرفیت واقعی |
| پیچیدگی | ✅ سادهتر | ⚠️ نیاز به یادگیری و دقت |
| عیبیابی | ✅ مستقیمتر | ⚠️ لایه اضافی عیبیابی را پیچیدهتر میکند |
عملیات رایج LVM
ساخت ساختار LVM از صفر
# مرحله ۱: ساخت Physical Volume
pvcreate /dev/sdb
# مرحله ۲: ساخت Volume Group
vgcreate vg-data /dev/sdb
# مرحله ۳: ساخت Logical Volume
lvcreate -L 200G -n lv-data vg-data
# مرحله ۴: ساخت File System
mkfs.xfs /dev/vg-data/lv-data
# مرحله ۵: Mount کردن
mount /dev/vg-data/lv-data /data
بزرگ کردن یک LV (بدون Downtime)
# افزایش اندازه LV به میزان 100 گیگابایت اضافی
lvextend -L +100G /dev/vg-data/lv-data
# بزرگ کردن File System (برای XFS)
xfs_growfs /data
# بزرگ کردن File System (برای ext4)
resize2fs /dev/vg-data/lv-data
اضافه کردن دیسک جدید به VG
# معرفی دیسک جدید بهعنوان PV
pvcreate /dev/sdc
# اضافه کردن PV جدید به VG موجود
vgextend vg-data /dev/sdc
با اضافه کردن یک دیسک جدید به VG، بدون هیچ Downtimeای ظرفیت استخر ذخیرهسازی افزایش مییابد و میتوان LVهای موجود را بزرگتر کرد.
بررسی وضعیت LVM
# نمایش Physical Volumeها
pvs
pvdisplay
# نمایش Volume Groupها
vgs
vgdisplay
# نمایش Logical Volumeها
lvs
lvdisplay
LVM Snapshot
یکی از قابلیتهای مهم LVM، امکان گرفتن Snapshot است.
Snapshot یک تصویر لحظهای از وضعیت یک LV در یک لحظه مشخص است.
کاربردهای Snapshot
- پشتیبانگیری بدون Downtime: قبل از Backup، یک Snapshot بگیرید و Backup را از روی Snapshot انجام دهید
- تست تغییرات: قبل از بهروزرسانی یا تغییر، Snapshot بگیرید. اگر مشکلی پیش آمد، به حالت قبل برگردید
- محیط توسعه: از Snapshotها برای ساخت محیطهای تست استفاده کنید
مثال ساخت Snapshot
# ساخت Snapshot از lv-data با اندازه 50 گیگابایت
lvcreate -s -L 50G -n lv-data-snap /dev/vg-data/lv-data
Snapshot فضای اضافی مصرف میکند. اگر فضای اختصاص داده شده به Snapshot پر شود، Snapshot بهصورت خودکار غیرمعتبر میشود. اندازه مناسب را با توجه به حجم تغییرات انتخاب کنید.
Thin Provisioning
در حالت عادی LVM، وقتی یک LV با ظرفیت مثلاً 500GB بسازید، این فضا بلافاصله از VG رزرو میشود حتی اگر هنوز دادهای روی آن ننوشته باشید.
Thin Provisioning این مشکل را حل میکند:
| ویژگی | LVM معمولی (Thick) | LVM Thin |
|---|---|---|
| رزرو فضا | بلافاصله کل فضا رزرو میشود | فقط فضای واقعاً استفادهشده اشغال میشود |
| Over-Provisioning | ❌ ممکن نیست | ✅ میتوان بیشتر از ظرفیت واقعی تخصیص داد |
| کارایی | ✅ کمی بهتر | ⚠️ اندکی Overhead دارد |
| نیاز به مانیتورینگ | عادی | ⚠️ مانیتورینگ دقیق فضا ضروری است |
در Thin Provisioning اگر فضای واقعی Pool تمام شود و مانیتورینگ مناسبی وجود نداشته باشد، ممکن است از دست رفتن داده یا توقف سرویس رخ دهد.
جایگاه LVM در ساختار ذخیرهسازی
برای درک بهتر جایگاه LVM در کل ساختار، به این دیاگرام توجه کنید:
Logical Volume در LVM با Logical Drive در RAID Controller تفاوت دارد.
- Logical Drive توسط RAID Controller از دیسکهای فیزیکی ساخته میشود
- Logical Volume توسط LVM در سطح سیستمعامل ساخته میشود
این دو مفهوم در لایههای متفاوتی قرار دارند و نباید با هم اشتباه گرفته شوند.
نقش LVM در پلایوید
در معماری پلایوید، استفاده از LVM در اکثر سناریوها توصیه میشود.
ساختار پیشنهادی متداول:
| VG | LV | Mount Point | کاربرد |
|---|---|---|---|
vg-os | lv-root | / | سیستمعامل و فایلهای سیستمی |
vg-os | lv-swap | swap | حافظه Swap |
vg-var | lv-var | /var | Logها و دادههای متغیر |
vg-data | lv-data | /data | ماشینهای مجازی و Workloadها |
مزایای این طراحی
- انعطافپذیری: در آینده اگر فضای
/varیا/dataکم شد، بدون Downtime بزرگتر میشود - جداسازی Workload: دادههای سیستمعامل از دادههای کاری جدا هستند
- مدیریت آسانتر: هر VG میتواند روی یک Logical Drive مجزا باشد
- Snapshot: امکان گرفتن Snapshot از LVهای حساس قبل از عملیاتهای مهم
هنگام نصب پلایوید، توصیه میشود ۱۰ تا ۲۰ درصد فضای هر VG را خالی نگه دارید. این فضای آزاد برای عملیات Snapshot، بزرگ کردن LVها و مدیریت بحران بسیار ارزشمند است.
نکات مهم برای کارشناسان آیتی
انتخاب File System مناسب
| File System | بزرگ کردن آنلاین | کوچک کردن | مناسب برای |
|---|---|---|---|
| XFS | ✅ بله | ❌ خیر | Workloadهای سنگین، Datastore |
| ext4 | ✅ بله | ✅ بله (با احتیاط) | عمومی، سیستمعامل |
اگر احتمال میدهید در آینده نیاز به کوچک کردن یک LV داشته باشید، از ext4 استفاده کنید. XFS فقط قابل بزرگ شدن است.
PE Size (Physical Extent)
- اندازه پیشفرض PE در اکثر توزیعها 4MB است
- برای VGهای بزرگ (چند ترابایتی)، افزایش PE Size میتواند مدیریت را سادهتر کند
- PE Size بعد از ساخت VG قابل تغییر نیست
عملکرد LVM
- LVM یک لایه نرمافزاری اضافه میکند، اما Overhead آن در اکثر سناریوها ناچیز است
- در سناریوهای I/O بسیار سنگین، مطمئن شوید که Alignment درست انجام شده
- استفاده از LVM Cache میتواند ترکیبی از SSD و HDD را برای بهبود Performance ممکن کند
جمعبندی
LVM ابزاری قدرتمند برای مدیریت انعطافپذیر فضای ذخیرهسازی در لینوکس است.
اگر بخواهیم خیلی ساده بگوییم:
- بدون LVM: اندازه فضا ثابت است و تغییر آن سخت و پرریسک است
- با LVM: فضا را میتوان بدون Downtime بزرگ کرد، چند دیسک را ترکیب کرد و Snapshot گرفت
| مفهوم | چیست؟ | توسط چه چیزی ساخته میشود؟ |
|---|---|---|
| Physical Disk | دیسک واقعی داخل سرور | سختافزار |
| Logical Drive | دیسک منطقی ساختهشده توسط RAID | RAID Controller |
| PV | دیسکی که به LVM معرفی شده | pvcreate |
| VG | استخر فضا از یک یا چند PV | vgcreate |
| LV | فضای قابل استفاده شبیه پارتیشن | lvcreate |
| File System | ساختار فایل روی LV | mkfs |
در نتیجه، در زیرساختهای حرفهای، استفاده از LVM نه یک انتخاب بلکه یک ضرورت برای مدیریت پویا و مطمئن فضای ذخیرهسازی است.