آموزش کامل ساخت LVM در لینوکس
LVM چیست؟
ساخت دیسک LVM یا Logical Volume Management تکنیکی است پر کاربرد برای مدیریت فضای یک سرور که قابلیت های خوبی را در اختیار ادمین سرور قرار می دهد. یکی از این قابلیت ها انعطاف پذیری آن است که می توان پارتیشن ها را به صورت توزیع شده، متمرکز یا ترکیبی از این دو را با استفاده از چندین دیسک ایجاد نمود که البته تاثیری در عملکرد سرور نیز نخواهد داشت. همچنین امکان اضافه کردن یا کم کردن فضای آن با کمترین ریسک نیز فراهم است.
همانطور که در شکل بالا ملاحظه میکنید ابتدا دیسک های فیزیکی به physical volume یا همان PV تبدیل می شوند و با استفاده از Volume Group یا VG تمام PV ها به صورت یک گروه یکپارچه در خواهند آمد. در اینجا است که میتوان از دل این VG اقدام به ساخت Volume Group های مختلف نمود که می توان آنها را سایز آنها را افزایش یا کاهش داد بدون این که نیازی به فرمت کردن یا پارتیشن بندی مجدد دیسک داشته باشیم. همچنین از طریق این روش میتوان می توان I/O دیسک را نیز بهبود بخشید چرا که میتوان LV ساخت که در پشت آن چندین دیسک وجود دارد که درنتیجه عملیات خواندن و نوشت داده ها می تواند بین دیسک ها تقسیم گردد.
به صورت خلاصه قابلیت های این تکنیک به شرح زیر است.
- قابلیت افزایش فضا در هر زمان
- پشتیبانی از انواع مختلف File system
- استفاده از Migration در ریکاور کرد خطاهای دیسک
- بازگردانی فایل سیستم با استفاده از snapshot
در این آموزش من از Centos 7 با یک دیسک استفده کرده ام. در ادامه با دستور های زیر به ترتیب PV، VG و LV های موجود در سیستم را مشاهده خواهید کرد.
# PVS # VGS # LVS
مواردی که در شکل بالا مشخص شده اند به شرح زیر می باشند:
- نمایش دهنده دیسکی است که در Physical Volume مورد استفاده قرار گرفته است.
- سایز physical disk
- نام انتخاب شده برای Volume Group
- سایز Volume Group
- نمایش دهنده LV های ایجاد شده به همراه VG های آنها که همانطور که از اسم گذاری آنها مشخص است یکی برای SWAP و دیگری برای root سیستم استفاده شده است.
- نمایش میزان سایز LV ها
با تصور پر شدن فضای دیسک ما سه دیسک مجزا برای افزایش آن به سرور اضافه میکنیم که مطابق با شکل زیر است. و همانطور که ملاحظه میکنید سه دیسک با نام ها ی sdb, sdc, sdd و با ظرفیت 20 گیگ به سرور اضافه شده اند.
#fdisk –l
با دستور زیر وضعیت Volume Group های ایجاد شده در سیستم قابل مشاهده است.
#vgdisplay
که در آن
VG name : نام Volume Group
Format: فرمت و ساختار استفاده شده در ساخت VG که در اینجا lvm2 است.
VG Access: که نمایشگر Permission های VG است
VG Status: وضعیت VG را نمایش میدهد که در اینجا وضعیت resizable است و در موقعی نیاز شد میتوان ظرفیت آن را افزایش داد.
Cur LV: بیانگر تعداد LV هایی است که از دل این VG ایجاد شده اند.
Cur PV and Act PV: بیانگر تعداد Physical disk ها و فعال یا غیر فعال بودن آنها است.
PE Size: بیانگر Physical Extents است که بلاک بندی منطقی physical Volume برای LVM محسوب می شود که مقدار پیش فرض آن 4 مگابایت می باشد. به عنوان مثال تصور کنید قصد ساخت LV با ظرفیت 8 گیگابایت داریم با مقدار پیشفرض 4 مگابایت PE size در نهایت 2048 بلاک منطقی استفاده خواهد شد.
8GB = 8192 MB
8192MB /4MB=2048
Total PE: تعداد کل physical extend ها
Alloc PE : تعداد PE های اختصاص داده شده و مورد مصرف به LV ها
Free PE: تعداد PE های آزاد و استفاده نشده
در ادامه ابتدا ما اقدام به ساخت یک PV متشکل از سه دیسک جدید میکنیم.
توجه : پیشنهاد می گردد برای ساخت PV ابتدا بخش مورد نظر از دیسک جدید یا کل آن را با دستور fdisk به یک پارتیشن جدیدی با فرمت lvm تبدیل کرده و سپس مراحل را ادامه دهید. ساخت PV از کل دیسک به مانند دستور زیر سریعتر و آسانتر است و نیازی به ریبوت ندارد. اما با توجه به مشکلاتی که ممکن است در مدیریت آن پیش آید پیشنهاد نمی گردد. به عنوان مثال با روش زیر کل فضای دیسک برای ایجاد pv مورد استفاده قرار میگیرد و متا دیتایی مبنی بر LVM بودن آن بر روی دیسک ایجاد نمی گردد لذا ممکن است توسط سیستم عاملی دیگر به عنوان دیسکی خالی تصور شده و از ابتدا روی آن عملیات نوشتن را انجام دهد. در آموزشی جداگانه نحوه پارتیشن کردن دیسک با استفاده از دستور fdisk را توضیح خواهم داد.
# pvcreate /dev/sdb /dev/sdc /dev/sdd
همانطور که در شکل زیر میبینید ایجاد PV مورد نظر با موفقیت انجام شد ودر ادامه با اجرای دستور PVS نیز مشاهده خواهید کرد که سه دیسک جدید ایجاد شده اند و بر خلاف sda2 که دارای VG به نام CentOS است این physical Volume ها فاقد VG هستند.
حال نوبت به ایجاد volume group می رسد. که با دستور به شکل زیر ایجاد خواهد شد.
# vgcreate –s 8M [Volumegroupname] pv1 pv2 pv3 … pvn
که در دستور بالا –s برای مشخص کردن PE Size به میزان 8 مگابایت استفاده شده است در صورت عدم استفاده از این Option سیستم از مقدار 4 مگابایتی پیش فرض استفاده خواهد کرد. [Volumegroupname] نیز نامی خواهد بود که برای volume Group در نظر گرفته اید و PV ها بیانگر Physical Voilume هایی است که در مرحله قل ایجاد کرده است.
ما در این مثال سایز PE را 8 مگابایت قرار خواهیم داد.
که در شکل بالا #Sn بیانگر تعداد snapshot های موجود در این Volume Group و Attr نیز بیانگر خصوصیات آن می باشد که میتواند Writeable, readable, resizeable, exported, partial و clustered باشد. که در اینجا wz- – n – به معنی Writeable و resizeable است.
لست کامل خصوصیات به شرح زیر است.
- Permissions: (w)riteable, (r)ead-only
- Resi(z)eable
- E(x)ported
- (p)artial: one or more physical volumes belonging to the volume group are missing from the system
- Allocation policy: (c)ontiguous, c(l)ing, (n)ormal, (a)nywhere
- (c)lustered, (s)hared
با استفاده از –v در دستور vgs نیز میتوان اطلاعات بیشتری مانند UUID و سایز PE را نیز مشاهده کنید.
# vgs –v
با ساخت Volume Group یا VG میتوانیم اقدام به ساخت LV و اختصاص فضا به آنها از فضای موحود در Vg کنیم .
برای ساخت LV و مشخص کردن حجم آن ما چند روش پیش رو داریم یکی استفاده از PE Size و دیگری مشخص کردن میزان حجم براساس بایت (sectore,byte,kilobyte,megabyte,….) است که در ادامه از هر چند روش برای ایجاد LV استفاده خواهیم کرد.
روش اول استفاده از PE size
برای استفاده از PE Size شما باید مقدار تعیین شده آن برای VG را بدانید. مقدار تعریف شده در این آموزش 8 مگابایت بود در نتیجه با توجه به توضیحات قبل برای ساخت یک LV 20 گیگاباتی ما 2560 PE باید اختصاص دهیم.
# lvcreate -l (Extend size) -n (name_of_logical_volume) (volume_group)
در دستور بالا –l به معنی استفاده از Physical Extend می باشد و –n جهت تعریف نام LV مرد استفاده قرار میگیرد.
همانطور که در شکل بالا میبینید LV به اسم PE-LV یا حجم 20 گیگابایت ایجاد شده است.
روش دوم
استفاده از سایز مشخص
# lvcreate -L 10G -n (name_of_logical_volume) (volume_group)
استفاده از مقداری از فضای VG به درصد
در این روش میتوان به جای مصخ کردن مقدار دقیق درصدی از دیسک به LV اختصاص یابد به عنوان مثال در دستور زیر ما ده درصد از فضای VG را به یک LV اختصاص خواهیم داد.
# lvcreate -l 10%VG -n mylv new-vg
توجه داشته باشید که در دستور بالا از 10 درصد فضای کل VG برای ساخت LV ساخته خواهد شد نه از فضای باقی مانده. در مثال زیر نیز با اجرای دستور، ده درصد از فضای کل و به میزان 6 گیگابایت به LV جدید اختصاص یافت.
استفاده از باقی مانده فضای آزاد VG
با اجرای دستور زیر تنها ده درصد از فضای باقی مانده و ازاد از VG ایجاد شده برای ساخت LV جدید مورد استفاده قرار خواهد گرفت
# lvcreate -l 10%free -n mylv new-vg
با دستور بالا از 20 گیگابایت فضای باقی مانده از VG، ده درصد برای ساخت LV جدید استفاده خواهد شد. برای استفاده از کل فضای خالی VG کافی است مقدار را برابر با 100% قرار دهید.
هدف نهایی ما در این آموزش ایجاد سه LV با حجم 20 گیگابایت بود در نتیجه مابقی LV های ایجاد شده را حفذ میکنیم و تنها همان سه LV را نگه میداریم و برای راحتی بهتر در ادامه کار نام آنها را نیز تغییر خواهم داد.
# lvrename VGname Old-lvname new-lvname
یا
# lvrename /dev/vg02/lvold /dev/vg02/lvnew
و در نهایت
برای این که امکان استفاده از LV ها فراهم شود نیاز است که با یکی از انواعFile system که ما فرمت ها آنها را فرمت کنیم در اینجا من قصد دارم از فرمت ext4 استفاده کنم. برای این کار از دستور زیر استفاده خواهیم کرد.
# mkfs.ext4 /dev/new-vg / lv1 # mkfs.ext4 /dev/new-vg / lv2 # mkfs.ext4 /dev/new-vg/ lv3
در نهایت Logical Volume های ساخته شده با Mount شدن به یک دایرکتوری قابل استفاده خواهند بود.
برای mount کردن lv های ساخته شده ابتدا سه دایرکتوری خواهیم ساخت سپس هر کدام را جداگانه به یکی از دایرکتوری ها mount خواهیم کرد.
# mount /dev/new-vg/lv1 /tmp/lv1 # mount /dev/new-vg/lv2 /tmp/lv2 # mount /dev/new-vg/lv3 /tmp/lv3
با دستور dh میتوانی LV های ساخته شده و مسیری که به آنها Mount شده اند را مشاهده کنید.
از آنجایی که دستور mount به صورت موقت عملیات mount کردن را انجام می دهد و با بارگزاری مجدد ماشین تغییرات اعمال شده از بین خواهد رفت، نیاز است تا هر LV و مسیری که باید Mount شوند را در فایل fstab نیز اضافه کنیم.
ما خط های زیر را به فایل مذکور اضافه خواهیم کرد.
/dev/new-vg/lv1 /tmp/lv1 ext4 defaults 0 0 /dev/new-vg/lv2 /tmp/lv2 ext4 defaults 0 0 /dev/new-vg/lv3 /tmp/lv3 ext4 defaults 0 0
در صورتی که قصد دارید تا سیستم مجدد فایل fstab را بازخوانی کند و تغییرات جدید را اعمال کند دستور زیر را اجرا کنید در این مرحله در صورتی که اروری در خواند فایل وجود داشته باشد نیز برای شما به نمایش در خواهد آمد.
# mount -av
خروجی دستور mount بعد از ریبوت ماشین.
تا اینجا ما با نحوه ساخت physical volume, Volume group و logical volume آشنا شدیم. در آموزش های بعدی نحوه resize کردن آنها و همچنین Snapshot گرفتن و بازگردانی آن را آموزش خواهیم داد.
امیدوارم مفید واقع شده باشد.