بلاگ/مدیریت دیسک با LVM روی سرور اختصاصی و VPS: افزایش فضا بدون Downtime
به‌روز شده

مدیریت دیسک با LVM روی سرور اختصاصی و VPS: افزایش فضا بدون Downtime

1405/06/200 بازدید
مدیریت دیسک با LVM روی سرور اختصاصی و VPS: افزایش فضا بدون Downtime

مدیریت دیسک با LVM روی سرور اختصاصی و VPS: افزایش فضا بدون Downtime

پر شدن پارتیشن ریشه، فضای داده یا مسیرهایی مثل /var یکی از مشکلات رایج در مدیریت سرور است. اگر دیسک با پارتیشن‌بندی سنتی آماده شده باشد، افزایش ظرفیت ممکن است به جابه‌جایی داده، تغییر جدول پارتیشن و حتی خاموش کردن سرویس منجر شود. LVM این فرایند را انعطاف‌پذیرتر می‌کند و در بسیاری از سناریوها اجازه می‌دهد فضای فایل‌سیستم را بدون توقف سرور افزایش دهید. در این راهنما ابتدا ساختار LVM را مرور می‌کنیم، سپس ساخت یک Volume جدید و دو سناریوی رایج افزایش ظرفیت را انجام می‌دهیم: بزرگ شدن دیسک فعلی VPS و اضافه شدن یک دیسک جدید به سرور. در پایان نیز روش توسعه فایل‌سیستم‌های ext4 و XFS را جداگانه بررسی می‌کنیم. نمای کلی لایه‌های دیسک، LVM و فایل‌سیستم در لینوکس

LVM چیست و چه مشکلی را حل می‌کند؟

LVM مخفف Logical Volume Manager است. این ابزار یک لایه میان دیسک‌های فیزیکی و فایل‌سیستم ایجاد می‌کند. به‌جای آنکه فایل‌سیستم مستقیماً روی یک پارتیشن ثابت قرار بگیرد، روی یک Logical Volume ساخته می‌شود. ظرفیت این Volume را می‌توان از فضای آزاد موجود در یک یا چند دیسک تأمین کرد. سه جزء اصلی LVM عبارت‌اند از: - Physical Volume یا PV: دیسک یا پارتیشنی که برای استفاده در LVM آماده شده است؛ مانند /dev/sdb یا /dev/sda3. - Volume Group یا VG: استخری از ظرفیت یک یا چند PV؛ برای مثال vg_data. - Logical Volume یا LV: فضای منطقی ساخته‌شده داخل VG؛ مانند /dev/vg_data/lv_app. فایل‌سیستم ext4 یا XFS روی LV ساخته می‌شود و سیستم‌عامل آن را روی مسیری مثل /srv/app یا /var/lib مانت می‌کند. اگر فضای بیشتری لازم باشد، ابتدا LV و سپس فایل‌سیستم توسعه داده می‌شود.

/dev/sdb ──┐
           ├── PV ── VG: vg_data ── LV: lv_app ── XFS/ext4 ── /srv/app
/dev/sdc ──┘

LVM جایگزین بکاپ نیست. خطای اپراتور، خرابی هم‌زمان دیسک‌ها یا حذف اشتباه LV همچنان می‌تواند باعث از دست رفتن داده شود. پیش از تغییر ساختار دیسک، از داده‌های مهم نسخه پشتیبان معتبر داشته باشید.

LVM چه تفاوتی با پارتیشن‌بندی سنتی دارد؟

انتخاب میان پارتیشن معمولی و LVM به نوع سرور و شیوه رشد داده بستگی دارد. برای یک ماشین ساده با ظرفیت ثابت، پارتیشن‌بندی سنتی کافی است. در سرورهایی که ظرفیت آن‌ها در طول زمان تغییر می‌کند، LVM مدیریت فضا را آسان‌تر می‌کند.

ویژگیپارتیشن‌بندی سنتیLVM
افزایش ظرفیتوابسته به فضای مجاور پارتیشنقابل تأمین از فضای آزاد VG
استفاده از چند دیسکنیازمند ابزار یا ساختار جداگانهافزودن چند PV به یک VG
افزایش آنلاین فایل‌سیستمدر بعضی چیدمان‌ها دشوارمعمولاً ساده‌تر
Snapshotبه‌صورت داخلی نداردپشتیبانی می‌شود، با محدودیت
پیچیدگی مدیریتکمتربیشتر
بازیابی در خطای مدیریتیساختار ساده‌ترنیازمند شناخت PV، VG و LV

LVM به‌تنهایی افزونگی ایجاد نمی‌کند. اگر یک VG از چند دیسک مستقل ساخته شود و یکی از آن‌ها از کار بیفتد، ممکن است بخشی از داده‌های LV نیز از دسترس خارج شود. برای تحمل خرابی دیسک باید LVM را روی RAID یا ذخیره‌سازی دارای افزونگی قرار داد.

بررسی وضعیت فعلی دیسک و LVM

پیش از اجرای هر دستور تغییردهنده، وضعیت دیسک، فایل‌سیستم و مسیر مانت را ثبت کنید:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
df -hT
sudo pvs
sudo vgs
sudo lvs -a -o +devices

دستور lsblk رابطه دیسک، پارتیشن و LV را نشان می‌دهد. خروجی df -hT نیز نوع فایل‌سیستم و فضای مصرف‌شده را مشخص می‌کند. دانستن نوع فایل‌سیستم مهم است، زیرا ext4 با resize2fs و XFS با xfs_growfs توسعه پیدا می‌کند. برای دیدن فضای آزاد VG می‌توانید از دستور زیر استفاده کنید:

sudo vgs -o vg_name,vg_size,vg_free

اگر ستون VFree فضای کافی داشته باشد، نیازی به افزودن PV جدید نیست و می‌توانید مستقیماً LV را توسعه دهید. در غیر این صورت باید ظرفیت دیسک فعلی را به LVM معرفی کنید یا یک دیسک تازه به VG بیفزایید. نام دستگاه‌ها را از روی نمونه‌ها کپی نکنید. نام دیسک ممکن است در یک VPS برابر /dev/vda، روی سامانه دیگر /dev/sda و در سرور مجهز به NVMe چیزی شبیه /dev/nvme0n1 باشد.

ساخت اولیه LVM روی یک دیسک جدید

فرض کنیم دیسک خالی /dev/sdb به سرور اضافه شده و قرار است تمام آن به مسیر /srv/data اختصاص یابد. ابتدا مطمئن شوید دیسک درست را انتخاب کرده‌اید:

sudo lsblk -f /dev/sdb
sudo wipefs -n /dev/sdb

گزینه -n در wipefs فقط امضاهای موجود را نمایش می‌دهد و چیزی را پاک نمی‌کند. اگر دیسک حاوی داده است، ادامه ندهید. در این مثال، PV مستقیماً روی کل دیسک ساخته می‌شود:

sudo pvcreate /dev/sdb
sudo vgcreate vg_data /dev/sdb
sudo lvcreate -n lv_data -L 80G vg_data

سپس فایل‌سیستم را ایجاد و مانت می‌کنیم. برای ext4:

sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mkdir -p /srv/data
sudo mount /dev/vg_data/lv_data /srv/data

برای مانت پایدار، UUID را پیدا کنید:

sudo blkid /dev/vg_data/lv_data

سپس یک ورودی متناسب با UUID و نوع فایل‌سیستم به /etc/fstab اضافه کنید:

UUID=<uuid>  /srv/data  ext4  defaults  0  2

پیش از ریبوت، پیکربندی را آزمایش کنید:

sudo umount /srv/data
sudo mount -a
findmnt /srv/data

این آزمایش جلوی بخشی از خطاهای رایج fstab را می‌گیرد. مراحل تبدیل دیسک جدید به PV، افزودن آن به VG و ساخت LV

افزایش فضای دیسک سرور با LVM از فضای آزاد VG

ساده‌ترین حالت زمانی است که VG از قبل فضای آزاد دارد. فرض کنیم مسیر /srv/data روی LV با نام lv_data قرار دارد و می‌خواهیم ۲۰ گیگابایت به آن اضافه کنیم. ابتدا مسیر واقعی Volume را تأیید کنید:

findmnt /srv/data
sudo lvs

سپس LV را افزایش دهید:

sudo lvextend -L +20G /dev/vg_data/lv_data

علامت + مهم است. گزینه -L +20G یعنی ۲۰ گیگابایت به اندازه فعلی اضافه شود؛ بدون +، اندازه نهایی LV روی ۲۰ گیگابایت تنظیم می‌شود و اگر LV بزرگ‌تر باشد دستور خطا می‌دهد. اکنون باید فایل‌سیستم نیز فضای جدید را ببیند.

توسعه آنلاین ext4

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

sudo resize2fs /dev/vg_data/lv_data

ext4 معمولاً در حالت مانت‌شده قابل افزایش است. پس از پایان کار، نتیجه را بررسی کنید:

df -hT /srv/data
sudo lvs /dev/vg_data/lv_data

توسعه آنلاین XFS

در XFS دستور توسعه باید روی مسیر مانت اجرا شود، نه روی دستگاه:

sudo xfs_growfs /srv/data

سپس ظرفیت جدید را ببینید:

df -hT /srv/data

XFS به‌صورت آنلاین بزرگ می‌شود، اما کوچک کردن آن پشتیبانی نمی‌شود. اگر احتمال می‌دهید بعداً نیاز به کاهش ظرفیت داشته باشید، این محدودیت را هنگام طراحی در نظر بگیرید. می‌توان افزایش LV و فایل‌سیستم را در برخی توزیع‌ها با گزینه -r یک‌جا انجام داد:

sudo lvextend -r -L +20G /dev/vg_data/lv_data

این گزینه از fsadm یا ابزار مناسب فایل‌سیستم استفاده می‌کند. برای کارهای حساس، اجرای جداگانه دو مرحله شفاف‌تر است و عیب‌یابی را ساده‌تر می‌کند.

افزایش ظرفیت پس از بزرگ کردن دیسک VPS

در پنل ارائه‌دهنده VPS معمولاً اندازه دیسک مجازی را افزایش می‌دهید، اما لینوکس بلافاصله فضای جدید را داخل LV نمایش نمی‌دهد. لایه‌های دیسک باید به‌ترتیب توسعه پیدا کنند: 1. شناسایی اندازه جدید دیسک 2. بزرگ کردن پارتیشن حامل PV 3. توسعه PV 4. توسعه LV 5. توسعه فایل‌سیستم فرض کنیم دیسک /dev/vda بزرگ شده و PV روی پارتیشن سوم، یعنی /dev/vda3، قرار دارد. ابتدا وضعیت را بررسی کنید:

sudo lsblk
sudo pvs

اگر کرنل هنوز اندازه جدید را نمی‌بیند، در بعضی محیط‌ها اسکن دوباره یا ریبوت لازم می‌شود. روش Rescan به نوع کنترلر و پلتفرم بستگی دارد؛ دستور نامناسب را بدون بررسی مستندات ارائه‌دهنده اجرا نکنید. برای بزرگ کردن پارتیشن می‌توان از growpart استفاده کرد:

sudo growpart /dev/vda 3
sudo partprobe /dev/vda

عدد 3 شماره پارتیشن است. پس از تأیید اندازه جدید /dev/vda3، PV را توسعه دهید:

sudo pvresize /dev/vda3
sudo pvs
sudo vgs

اکنون می‌توانید تمام فضای آزاد VG را به LV بدهید:

sudo lvextend -l +100%FREE /dev/vg_name/lv_name

در پایان، برای ext4 دستور resize2fs و برای XFS دستور xfs_growfs را اجرا کنید. استفاده از +100%FREE تمام ظرفیت آزاد VG را مصرف می‌کند. اگر قرار است بعداً LV دیگری بسازید یا برای عملیات نگهداری فضای ذخیره داشته باشید، مقدار مشخصی مانند -L +50G انتخاب کنید.

افزایش ظرفیت با اضافه کردن دیسک جدید

در سرور اختصاصی یا VPS ممکن است به‌جای بزرگ کردن دیسک فعلی، یک دیسک جدید مانند /dev/sdc اضافه شود. پس از اطمینان از خالی بودن دیسک، آن را به PV و سپس عضو VG تبدیل کنید:

sudo pvcreate /dev/sdc
sudo vgextend vg_data /dev/sdc
sudo pvs
sudo vgs

اکنون فضای دیسک جدید در VG موجود است. برای افزودن ۱۰۰ گیگابایت به LV:

sudo lvextend -L +100G /dev/vg_data/lv_data

فایل‌سیستم را نیز متناسب با نوع آن توسعه دهید:

# برای ext4
sudo resize2fs /dev/vg_data/lv_data
# برای XFS؛ فقط دستور متناسب با فایل‌سیستم خود را اجرا کنید
sudo xfs_growfs /srv/data

آیا واقعاً Downtime لازم نیست؟

افزایش LV و بزرگ کردن ext4 یا XFS معمولاً هنگام مانت بودن فایل‌سیستم انجام می‌شود. در نتیجه سرویس می‌تواند حین عملیات فعال بماند. بااین‌حال، «بدون Downtime» به کل زنجیره زیرساخت وابسته است. افزودن دیسک مجازی اغلب آنلاین انجام می‌شود، ولی بعضی ارائه‌دهندگان برای تغییر اندازه دیسک به خاموش کردن VPS نیاز دارند. دیسک فیزیکی نیز تنها در صورت پشتیبانی کنترلر و شاسی از Hot Swap بدون خاموشی اضافه می‌شود. همچنین اگر سیستم‌عامل اندازه جدید دیسک را تشخیص ندهد، ممکن است ریبوت لازم باشد. بار ورودی و خروجی را هم در نظر بگیرید. عملیات توسعه معمولاً سریع است، اما اجرای هم‌زمان آن با بکاپ سنگین، Import پایگاه داده یا ترافیک بالا می‌تواند زمان پاسخ سرویس را افزایش دهد. بهتر است تغییر در ساعت کم‌ترافیک انجام شود و وضعیت I/O، لاگ‌ها و فضای فایل‌سیستم پایش شود.

خطاهای رایج هنگام توسعه LVM

یکی از خطاهای رایج این است که فقط lvextend اجرا می‌شود و مدیر انتظار دارد df اندازه جدید را نشان دهد. lvextend اندازه Block Device را تغییر می‌دهد؛ فایل‌سیستم تا اجرای resize2fs یا xfs_growfs همچنان با اندازه قبلی کار می‌کند. اشتباه دیگر اجرای xfs_growfs روی مسیر دستگاه است. این ابزار مسیر مانت را می‌خواهد:

sudo xfs_growfs /srv/data

انتخاب PV اشتباه خطر بیشتری دارد. اجرای pvcreate روی دیسکی که داده یا امضای فایل‌سیستم دارد می‌تواند بازیابی را دشوار کند. همیشه خروجی lsblk، blkid، pvs و wipefs -n را پیش از تغییر بررسی کنید. کاهش اندازه نیز با افزایش آن یکسان نیست. XFS قابل کوچک کردن نیست و کاهش ext4 به Unmount، بررسی فایل‌سیستم و ترتیب دقیق عملیات نیاز دارد. هرگز ابتدا LV را کوچک نکنید؛ اگر فایل‌سیستم هنوز بزرگ‌تر از LV باشد، داده قطع می‌شود. برای کاهش ظرفیت، برنامه مهاجرت یا دستورالعمل جداگانه و بکاپ آزمایش‌شده لازم است.

چک‌لیست امن برای افزایش آنلاین فضا

پیش از شروع، این موارد را کنترل کنید: - بکاپ اخیر دارید و روش بازیابی آن آزمایش شده است. - نام دیسک، پارتیشن، PV، VG و LV را از خروجی واقعی سرور برداشته‌اید. - نوع فایل‌سیستم را با findmnt یا df -T مشخص کرده‌اید. - فضای آزاد VG یا ظرفیت دیسک جدید کافی است. - Snapshotهای قدیمی LVM و مصرف فضای آن‌ها بررسی شده‌اند. - سرویس مانیتورینگ فضای دیسک و I/O فعال است. - پس از هر مرحله، خروجی همان لایه را بررسی می‌کنید. یک توالی مناسب برای کنترل نتیجه چنین است:

sudo pvs
sudo vgs
sudo lvs
findmnt /srv/data
df -hT /srv/data

اگر برای اجرای سرویس به منابع قابل ارتقا نیاز دارید، می‌توانید مشخصات سرور مجازی ابری آریاسرویس را بررسی کنید. پیش از سفارش یا افزایش دیسک، درباره امکان توسعه آنلاین Volume و نیاز احتمالی به خاموش کردن ماشین سؤال کنید.

جمع‌بندی

برای افزایش فضای دیسک سرور با LVM باید لایه‌ها را به ترتیب توسعه دهید. اگر VG فضای آزاد دارد، کار از lvextend شروع می‌شود. اگر دیسک فعلی VPS بزرگ شده است، ابتدا پارتیشن و PV با ابزارهایی مانند growpart و pvresize توسعه پیدا می‌کنند. هنگام افزودن دیسک جدید نیز باید با pvcreate و vgextend ظرفیت آن را وارد VG کرد. مرحله آخر همیشه توسعه فایل‌سیستم است: resize2fs برای ext4 و xfs_growfs برای XFS. این عملیات در بیشتر پیکربندی‌ها آنلاین انجام می‌شود، اما امکان اجرای کاملاً بدون Downtime به پلتفرم مجازی‌سازی، شناسایی آنلاین دیسک و شرایط سخت‌افزار نیز بستگی دارد. بکاپ، شناسایی دقیق نام دستگاه‌ها و بررسی نتیجه پس از هر مرحله، سه کنترل اصلی برای جلوگیری از خطا هستند.