پارتیشن بندی LVM
LVM نوعی از پارتیشن بندی است که مهم ترین فایده آن منعطف کردن مدیریت فضای سرور است. به این صورت که شما در هر زمانی می توانید به هر پارتیشن فضای اضافی بدهید بدون اینکه دیتای شما اسیب ببیند. همان طور که در شکل زیر هم به صورت شماتیک میبینید هر سرور از یک یا چند دیسک تشکیل شده است که برای تبدیل کردن به LVM ابتدا باید ان را تبدیل به Physical Volume که از این به بعد PV خواهیم گفت، کنیم. سپس این pv ها را به pool یا Volume Group که از این به بعد VG خواهیم اضافه می کنیم. بعد از ان می توانیم از طریق این vg پارتیشن یا LV ایجاد کنیم. مرحله اخر مشخص کردن نوع فایل سیستم است که بیشتر مواقع ext4 خواهد بود (با دستور blkid می توانیم فایل سیستم را مشاهده کنیم).
با دستور lsblk میتوانیم دیسک های موجود را مشاهده کنیم. تصویر زیر متعلق به یک سرور مجازی هست که به صورت lvm پارتیشن بندی شده است. در این تصویر sda3 و 4 را مشاهده می کنیم که پارتیشن های 3 و 4 را تشکیل داده اند اما به صورت lvm هستند و باهم داخل یک vg هستند و از طریق این vg دو پارتیشن با نام های root و swap وجود دارد.
اکستند (Extend)
1.اکستند با اضافه کردن پارتیشن
گاها شما به سرور خودتان حجمی را اضافه می کنید اما با دستور df -h مشاهده نمی کنید. در این صورت دو اتفاق می تواند افتاده باشد. با دستور lsblk فضای اضافه شده را در مجموع دیسک می توانید مشاهده کنید یا به کل نمایش داده نمی شود. اگر نمایش داده نشود می توانیم سرور را ریبوت دهیم اما این کار مخاطرات خاص خود را دارد. با استفاده از دستور زیر دیسک اسکن شده و فضای شما به مجموع دیسک اضافه می شود:
echo 1 > /sys/block/sda/device/rescan
پس از اضافه شدن فضای جدید حالت اولی که گفته شد را داریم. یعنی با دستور df -h فضا به روت تخصیص داده نشده اما با دستور lsblk فضا قابل مشاهده است. با استفاده از parted ابتدا print را وارد می کنیم تا مشخصات کامل دیسک نمایش داده شود و سپس دستور زیر را تایپ میکنیم:
mkpart
در مورد سوال نرم افزار fix پاسخ می دهیم. سوال های بعدی در مورد نام پارتیشن (که میتوانی خالی بگذاریم) و نوع فایل سیستم است که جواب می دهیم.
سوال بعدی start هست که ما طبق مشخصاتی که با وارد کردن print نمایش داده شده بود پاسخ می دهیم. در واقع start باید از End پارتیشن Primary که اصولا باید پارتیشن اخر باشد برابر باشد. سپس End را می پرسد. برای پر کردن این قسمت دوباره به جایی که پرینت تایپ کرده بودیم برمیگردیم. قبل از جدول پارتیشن ها اطلاعات دیگری وجود دارد که در قسمت Disk مجموع دیسک را نوشته است. End ما به اندازه چند مگابات کمتر از ان باید باشد. مثلا اگر Disk 85.9GB بود ما End را 85.8 وارد می کنیم. در اخر با quit یا q از نرم افزار خارج میشویم.
تصویر زیر نمونه انجام شده است. همان طور که مشاهده می کنید پارتیشن sda4 که قبل از مراحل وجود نداشت اضافه شده است:
توجه کنید که کار ما با نرم افزار parted فقط اضافه کردن پارتیشن است. پس اگر پارتیشن موجود است نیاز به کار خاصی با parted نیست و ادامه اموزش باید انجام شود.
پس از اضافه شدن پارتیشن در اولین گام آن را به pv تبدیل میکنیم:
Pvcreate /dev/sda4
با دستور pvs می توانیم اضافه شدن این pv را مشاهده کنیم. پس از ان باید این pv را به pool یا vg موجودمان اضافه یا extend کنیم.قبل از اکستند با دستور vgs نام vg موجود را مشاهده می کنیم و سپس:
Vgextend vgname /dev/sda4
الان فضای ما اماده است تا به هر پارتیشنی که نیاز داریم به راحتی اضافه کنیم. در مرحله بعد از lvextend استفاده می کنیم تا به پارتیشن مورد نظر اضافه کنیم. در واقع با این دستور با فضا را از pool جدا می کنیم و به پارتیشن دلخواهمان می دهیم. دستور زیر برای اضافه کردن 5 گیگ به پارتیشن مورد نظرمان است:
Lvextend /dev/mapper/vgname-lvname –L +5G
همچنین از دستور زیر هم برای اضافه کردن کل فضای موجود در vg به پارتیشن یا lv مورد نظر استفاده کرد:
lvextend -l +100%FREE /dev/vgname/lvname
در پایان هم باید فایل سیستم را با توجه به فایل سیستم موجود اصلاح کنیم:
ext4:
Resize2fs dev/mapper/vgname-lvname
xfs:
Xfs_growfs /dev/mapper/vgname-lvname
با دستور df -h باید ما بتوانیم فضای اضافه شده را مشاهده کنیم:
توجه: اگر دیسک جدیدی (مثلا sdb) اضافه کرده باشیم هم همین روال طی خواهد شد و در lvm فرقی ندارد. فقط اگر دیسک دوم در سیستم عامل شناسایی نشد باید به صورت زیر عمل کنیم:
mkpart /dev/sdb
(sdb نام دیسک است که در lsblk قابل مشاهده است)
توجه داشته باشید که باید فرمت دیسک مشخص باشد اگر unknown باشد با دستور زیر در Parted اول باید فرمت دیسک را مشخص کنیم مثلا:
mklabel /dev/sdb
سپس طبق روال همیشگی ادامه اضافه کردن دیسک را انجام میدهیم. طبیعتا هیچ دیسکی در sdb وجود ندارد و اولی را اضافه میکنیم.
2.اکستند بدون اضافه کردن پارتیشن (پارتیشن های MBR)
به صورت کلی اکستند پارتیشن های lvm اکثرا از نوع اول انجام می شود اما اشنایی با نوع دوم آن هم می تواند مفید باشد. سناریویی را فرض کنید که 4 پارتیشن MBR داریم و می خواهیم extend انجام دهیم. می دانیم که در دیسک های mbr بر خلاف gpt، محدودیت حداکثر 4 پارتیشن را داریم و نمی توانیم پارتیشن پنجم را اضافه کنیم. یا می توانید هر سناریو از دیسک gpt را فرض کنید که بنا به هر دلیلی امکان اضافه کردن پارتیشن جدید نداریم. در این حالت ما باید فضای جدید را اخرین پارتیشن اضافه کنیم که به آن Extend می گویند. در اکستند دیسک اگر دقت کافی در انجام مراحل وجود نداشته باشد می تواند به قیمت از دست رفتن دیتا منجر شود.
قبل از هر چیزی باید بدانید که در زمان حذف یک پارتیشن دیتای ان حذف نمی شود بلکه ساختار ان حذف می شود و به شرط عدم اعمال تغییرات جدید، بلافاصله بعد از حذف می توانیم ان را برگردانیم. اما اگر پس از حذف هر تغییر نادرستی انجام شود اشتباه می تواند جبران ناپذیر باشد. ما در این سناریو می خواهیم به sda4 که پارتیشن اخر هست فضا اضافه کنیم یا اصطلاحا extend کنیم.
قبل از هر کاری پارتیشن ها را print می کنیم و کل دیتا که مهم ترین قسمت ان End و Start کپی کرده و در یک فایل notepad ذخیره می کنیم. در واقع این بکاپ ما از Structure پارتیشن های ماست که اگر مشکل پیش امد بتوانیم با استفاده از start و End به حالت اولیه برگردیم. با دستور fdisk /dev/sda سپس تایپ p که پرینت می گیرد این کار را انجام میدهیم. ممکن است پس از fdisk وارنینگ مشاهده کنیم که جای نگرانی ندارد.
با تایپ d دستور حذف را اجرا می کنیم و سپس شماره پارتیشن (که در اینجا 4 است) را وارد میکنیم. پارتیشن 4 حذف شد (دیتا هنوز موجود است و مشکل ندارد). با کاراکتر n دوباره دستور ساخت پارتیشن جدید را وارد میکنم، نرم افزار First sector را سوال می کند که ما در اینجا حتما باید start پارتیشن حذف را عینا وارد کنیم (از قبل بکاپ گرفته ایم و عدد استارت را کپی پست می کنیم). Last sector نباید End پارتیشن قبلی باشد چون ما در حال اضافه کردن فضا هستیم. اگر Enter را بزنیم خود نرم افزار End جدید را لحاظ خواهد کرد پس بدون وارد کردن عدد اینتر میزنیم.
سپس نرم افزار سوالی می پرسد که به شدت مهم است و اگر دقت نشود دیتا کاملا حذف خواهد شد. جواب سوال حتما باید N (خیر) باشد. در اخر با w رایت می کنیم و با q خارج می شویم.
با دستور lsblk میبینیم که فضا به پارتیشن اضافه شده است اما در pv اضافه نشده است. با دستور pvresize /dev/sda4 حجم جدید را روی pv اعمال می کنیم. چون pv از قبل عضو vg بوده نیازی نیست که در مورد vg کار خاضی بکنیم.
در اخر با دستور زیر تمام فضای استفاده نشده (100 درصد) موجود در vg را به پارتیشن lvm مورد نظرمان اضافه می کنیم:
lvextend -l +100%FREE /dev/mapper/vgname-lvname
پس از extend هم نیاز است فایل سیستم اصلاح شود.
ایجاد پارتیشن LVM
در صورتی که ما بخواهیم از اول پارتیشن بندی lvm را ایجاد کنیم باید به صورت زیر عمل کنیم:
با فرض داشتن دیسک های sda و sdb ، ما باید این دیسک ها را pv کنیم. برای این منظور از دستور زیر استفاده می کنیم:
Pvcreate /dev/sda
همین دستور را برای دیسک دوم هم انجام مینویسیم.
همچین دستورات زیر هم در رابطه با pv کاربردی هستند:
Pvs: نمایش pv ها
Pvdisplay: نمایش pv ها با جزئیات
Pvremove: حذف pv
Pvresize
مرحله بعد ساخت vg برای pv هاست. تمام دستورات بالا برای vg هم برقرار است. می توانیم به جای اضافه کردن یک به یک پی وی ها با دستور زیر یکبار pv های مورد نظر را به pool یا vg اضافه کنیم:
Vgcreate vgname /dev/sda /dev/sdb
Vgname همان نام vg هست که میخواهیم بسازیم و می تواند هر اسمی داشته باشد.
اگر بخواهیم یک پی وی را از vg حذف کنیم از دستور زیر استفاده می کنیم:
Vgreduce vgnmae /dev/sdb
اگر وی جی داشته باشیم و فقط میخواهیم یک pv اضافه کنیم با دستور زیر خواهد بود:
Vgextend vgnmae /dev/sdb
مرحله بعدی ما پارتیشن یا به عبارتی Logical Volume را می سازیم. مطابق کامند زیر:
Lvcreate –n lvname vgname –L 10G
در دستور بالا lvname نام lv که می تواند هرچیزی باشد، vgname نام پولی که میخواهیم فضا را از ان بگیریم یا استفاده کنیم و عدد اخر مربوط به فضایی است که به پارتیشن تخصیص می دهیم.
توجه: دو دایرکتوری زیر یکی است و تقاوتی ندارند:
dev/vgname/lvname
dev/mapper/vgname-lvname
اخرین مرحله مشخص کردن فایل سیستم یا فرمت پارتیشن است که به کامند زیر انجام می شود:
Mkfs.ext4 dev/mapper/vgname-lvname
اگر فایل سیستم مثلا xfs خواستیم جای ext4 جای گذاری میکنیم.
برای فرمت ext4 لازم است در اخر این دستور وارد شود:
Resize2fs dev/mapper/vgname-lvname
برای هر فرمت دستور مجزایی وارد خواهد شد. برای xfs هم از دستور زیر استفاده می شود:
Xfs_growfs /dev/mapper/vgname-lvname
ضمنا برای مشاهده نوع فایل سیستم از دستور blkid استفاده می شود.
اگر بخواهیم به حجم lv اضافه کنیم از دستور زیر استفاده می کنیم:
Lvextend /dev/mapper/vgname-lvname –L +5G
سپس دستور مربوط به ext4 را هم وارد می کنیم:
Resize2fs dev/mapper/vgname-lvname
کم کردن فضای یک یک پارتیشن حتی در حالت lvm کار به شدت خطرناکی هست و امکان از دست رفتن اطلاعات وجود دارد. در هر حال برای کم کردن فضا از دستور زیر که پس از unmount کردن باید وارد کرد استفاده می شود:
Lvreduce /dev/mapper/vgname-lvname –L -5G
اگر پس از کاهش فضا دیتا به مشکل خورد با انجام 3 نکته می توان با حالت اولیه برگرداند.
عدم انجام write
عدم mount کردن
برگرداندن فضایی که از پارتیشن کم شده بود.
در این مطلب به بررسی پارتیشن های lvm پرداخته شد، در صورتی که نیاز به extend پارتیشن standard دارید روی این لینک کلیک کنید.
Config Plus » پارتیشن بندی LVM