یکی از شرکتهایی که در گذشته توش کار میکردم دچار مشکل کمبود دیسک توی یکی از ماشینها شده بود و ازم کمک خواستن:
چطوری میتونیم دیسک رو به سرور اضافه کنیم؟ از طریق VMware Vsphere دیسک اضافه کردیم ولی توی سرور تغییری ایجاد نشده و دیسک قابل استفاده نیست.
این موضوع باعث شد که یه متنی راجع به این قضیه اینجا بنویسم.
قبل از اینکه سراغ حل مشکل بریم، میخوام با یه مقدمه شروع کنم که LVM چیه؟
در حالت عادی (بدون استفاده از LVM) وقتی شما یه دیسک به سرور اضافه میکنید، اونو باید توی پارتیشن جدا اضافه کنید و نمی تونید پاریتشن فعلی رو با استفاده از اون دیسک گسترش بدید. مثلا روی دیسک شماره یک دایرکتوریهای مربوط به خود سیستم عامل (از جمله var و etc و bin و ..) هست و دیسک شماره دو توی دایرکتوریای به اسم storage اضافه میشه.
حالا فرض کنید که یه اپلیکیشن روی این سرور بالا اوردید. این پروژه توی مسیر /var/www قرار داره و حالا بعد از گذشت یک سال از راه اندازی ماشین، کل حجم دیسک پر شده و شما میخواید فضایی که اپلیکیشن میتونه استفاده کنه رو افزایش بدید. بدیهیه که اضافه کردن دیسک به مسیری غیر از /var/www برای شما آوردهای نداره و این مسیر با دیسک اول اشغال شده. پس باید چکار کنیم؟
اینجاست که LVM به کمکتون میاد. هدف LVM اینه که پیچیدگیها و محدودیتهای سختافزاری رو از دید لایه اپلیکیشن حذف کنه. در واقع از دید لایه اپلیکیشن شما می تونید فقط پارتیشن داشته باشید و این LVM باشه که وظیفه ذخیرهسازی روی لایه سختافزار رو به عهده بگیره.
حالا برگردیم به مشکلی که داشتیم.من زمانی که توی اون شرکت کار میکردم ماشین رو تنظیم کرده بودم که از LVM استفاده کنه، پس الان کافیه که دیسک جدید رو به LVM بشناسونیم. (LVM باید زمان نصب لینوکس تنظیم شده باشه وگرنه روی سرور فعال نمیتونید ازش استفاده کنید)
اول از همه باید اسم دیسک جدید رو پیدا کنیم:
fdisk -l
کامند بالا لیست همه دیسکها (و پارتیشنها) رو بهتون میده. برای اینکه ببینید کدوم دیسکها در حال حاضر توی LVM استفاده شدن باید کامند زیر رو بزنید:
pvscan
توی ماشینی که من داشتم روش کار میکردم، کامند fdisk دیسکهای زیر رو نشون میداد (خروجی کامند خیلی شلوغه ولی با یکم دقت به خروجی میتونید اسم دیسکها رو از توش پیدا کنید):
/dev/sda /dev/sdb /dev/sdc /dev/sdd
و کامند pvscan هم این دیسکها رو نشون میداد:
/dev/sda /dev/sdb /dev/sdc
پس دیسک sdd جدید اضافه شده و باید به LVM شناسونده بشه.
حالا باید دیسک sdd رو فرمت و پارتیشن بندی کنیم تا بتونیم ادامه مراحل رو بریم:
کامند زیر دیسک رو فرمت میکنه، پس دقت کنید که حتما از روشی که گفتیم دیسک درست رو شناسایی کرده باشید!
fdisk /dev/sdd
با زدن کامند بالا یه سری سوال در مورد نحوه فرمت کردن دیسک از شما پرسیده میشه. اگر خیلی از این کامند سر در نمیارید نترسید، سوال اول رو با n و سوال دوم رو با p جواب بدید. ما بقی سوالها رو هم بدون وارد کردن چیزی فقط Enter بزنید تا رد شن. وقتی سوالها تموم شد در آخر w رو وارد کنید و Enter بزنید که عملیات فرمت کردن شروع بشه.
وقتی دیسک sdd رو به روش بالا فرمت کنیم، یه پارتیشن به اسم sdd1 ساخته میشه که در ادامه ازش استفاده میکنیم.
حالا نیازه که ما یه Physical Volume بسازیم (توضیح مفاهیم مربوط به LVM از جمله Physical Volume، Volume Group و Logical Volume خارج از این پست هست و پست رو طولانی میکنه). برای این کار از کامند pvcreate استفاده میکنیم:
pvcreate /dev/sdd1
همونطور که میبینید باید اسم پارتیشن رو به pvcreate بدیم، نه دیسک.
حالا که ما یه Physical Volume داریم، باید اونو به Volume Group اضافه کنیم. ولی قبل از اون باید اسم Volume Group فعال رو پیدا کنیم (به طور پیشفرض فقط یه Volume Group فعال وجود داره مگر اینکه خودتون تعداد بیشتری ساخته باشید):
vgscan
کامند بالا براتون اسم Volume Group رو چاپ میکنه. اسم Volume Group من ubuntu-vg بود پس در ادامه از این اسم توی کامندهام استفاده میکنم.
برای اضافه کردن پارتیشن sdd1 به Volume Group این کامند رو اجرا میکنیم:
vgextend ubuntu-vg /dev/sdd1
و حالا نیاز هست Logical Volume رو به اندازه دیسکی که اضافه کردیم گسترش بدیم. برای این کار باید اسم Logical Volume فعال رو بدست بیاریم:
lvscan
در اینجا من آدرس زیر رو به عنوان خروجی گرفتم:
/dev/ubuntu-vg/ubuntu-lv
فرض کنید که حجم دیسکی که اضافه کردیم 70G هست، با این فرض کامند گسترش Logical Volume رو به این صورت باید بنویسیم:
lvextend -L+70G /dev/ubuntu-vg/ubuntu-lv
در آخر برای اینکه نیاز به Restart کردن سرور نباشه کامند زیر رو میزنیم:
resize2fs /dev/ubuntu-vg/ubuntu-lv
تموم شد. حالا فضای خالی سرورتون باید به اندازه 70G زیاد شده باشه.