LVM

از ویکی فارسی اوبونتو
پرش به: ناوبری، جستجو

LVM (سرواژگان Logical Volume Manager) به معنای «مدیر حجم منطقی»، راهکاری برای انتزاع حجم‌های منطقی از فضای فیزیکی است که بر افزایش انعطاف تمرکز دارد. با LVM می‌توان کارهایی مثل افزودن دیسک‌های جدید، انتقال داده‌ها به آن‌ها، برداشتن دیسک‌های قدیمی و تغییر اندازهٔ حجم‌های منطقی را به سرعت و بدون پیاده کردن حجم‌ها انجام داد.

مفاهیم

این انعطاف از طریق سطحی از انتزاع به دست می‌آید که شامل سه مفهوم است:

حجم فیزیکی

حجم فیزیکی یا PV سرواژگان Physical Volume و نزدیک‌ترین مفهوم به سخت‌افزار است. این حجم می‌تواند یک دیسک کامل، افرازی از دیسک یا هر افزارهٔ بلوکی دیگری (برای نمونه یک آرایهٔ RAID) باشد.

به خاطر داشته باشید هنگامی که عنصری فیزیکی برای PV بودن در LVM برپا شد، باید فقط از طریق LVM مدیریت شود؛ در غیر این صورت، ممکن است موجب خرابی داده‌ها شود. به عبارت دیگر با فعال‌سازی این ویژگی، LVM مدیریت دستگاه‌های فیزیکی را برعهده می‌گیرد.

گروه حجمی

تعدادی از حجم‌های فیزیکی می‌توانند در یک گروه حجمی یا VG سرواژگان Volume Group قرار گیرند که مانند دیسکی مجازی و قابل گسترش است.

گروه‌های حجمی انتزاعی بوده و در پروندهٔ افزاره‌ای در ‪/dev‬ ظاهر نمی‌شوند، پس خطر استفادهٔ مستقیم از آن‌ها وجود ندارد.

حجم منطقی

سومین مفهوم، حجم‌های منطقی یا LVها سرواژگان Logical Volume هستند که بخشی از یک گروه حجمیند. اگر قیاس «گروه حجمی به مثابه دیسک» را در نظر بگیریم، حجم منطقی به مثابه یک افراز است.

حجم‌های منطقی به عنوان یک افزارهٔ بلوکی در ‪/dev‬ قرار گرفته و می‌توانند مانند یک افراز عادی استفاده شوند.

نکات

نکتهٔ مهم این است که بخش کردن گروه حجمی به حجم‌های منطقی، کاملاً مستقل از مولفهٔ فیزیکی آن است. گروه حجمی‌ای با فقط یک مولفهٔ فیزیکی (مثلاً یک دیسک) می‌تواند به ده‌ها حجم فیزیکی تقسیم شود. به طور مشابه، یک گروه حجمی می‌تواند از چندین دیسک فیزیکی استفاده کرده و به شکل یک حجم منطقی بزرگ ظاهر شود. تنها محدودیت، این است که به شکل واضحی، مجموع حجم تخصیصی به حجم‌های منطقی نمی‌تواند بیش‌تر از ظرفیت کل حجم‌های فیزیکی در گروه حجمی باشد.

منطقی است که نوعی همگنی میان مولفه‌های فیزیک یک گروه حجمی و تقسیمش به حجم‌های منطقی‌ای که الگوهای استفادهٔ مشابه دارند باشد. برای مثال، اگر سخت‌افزار موجود دارای دیسک‌های سریع و دیسک‌هایی کند است، سریع‌ها در یک گروه حجمی و کندها در در گروهی دیگر افزوده شوند. بخش‌های گروه حجمی نخست می‌توانند برای کاربردهایی که نیاز به دسترسی سریع به داده دارند استفاده شده و بخش‌های دومی برای نگه‌داری داده‌های کم‌تر مورد نیاز.

در هر صورت، به خاطر داده باشید که یک حجم منطقی به هیچ حجم فیزیکی خاصی متّصل نیست. امکان تعیین دقیق این که داده‌های یک حجم منطقی به صورت فیزیکی در کجا قرار دارند وجود دارد، ولی این این امکان برای استفادهٔ روزمره کارایی ندارد. به طور خلاصه: هنگام استفاده از حجم‌های فیزیکی مختلف، یک حجم منطقی می‌تواند بین فضاهای فیزیکی مختلف آن گروه حجمی، جابه‌جا شود.

نصب

با فرمان زیر ابزار مدیریت lvm را نصب می‌کنیم.


$ sudo apt install lvm2

نمونه

فرض کنید یک دیسک به اندازهٔ حجمی 2TB در اختیار داریم که می‌خواهیم آن را با lvm مدیریت کنیم.


اخطار:

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

بهتر است پیش از شروع کار اهداف و نتیجهٔ دلخواه نهایی را یادداشت کنید و براساس آن‌ها گام‌های مورد نظر را تنظیم کنید تا از برداشت‌های نادرست و نتایج نامناسب پیشگیری شود.

با فرمان lsblk یا fdisk می‌توان از متصل بودن دیسک به سامانه و اینکه می‌خواهیم روی کدام یک از دیسک‌ها کار کنیم اطمینان حاصل کرد.


$ lsblk -f


$ fdisk -l

فرض کنیم دیسک مورد نظر به عنوان sdb شناخته شده است.

هدف مدیریت یک دیسک به حجم 2TB است که در سامانه با نام sdb شناسایی شده است.

افرازش دیسک

نخستین گام افراز بندی دیسک است.


$ fdisk /dev/sdb

تمام فضای دیسک را به یک قسمت افراز می‌کنیم.(sdb1)

اگر دیسک‌های دیگری هم داریم به همین شکل کار را ادامه می‌دهیم.

ساخت یک حجم فیزیکی physical volume

برای هریک از افرازها یک حجم فیزیکی با فرمان زیر می‌سازیم.

$ pvcreate /dev/sdb1


با فرمان pvdisplay از ساخت حجم فیزیکی اطمینان حاصل می‌کنیم.


$ pvdisplay
$ pvs

ساخت یک گروه منطقی logical group

دسته‌ای از حجم‌های فیزیکی را در یک گروه منطقی قرار می‌دهیم.


$ vgcreate mynew_vg /dev/sdb1 

اگر دو حجم داشته باشیم به این شکل از آنها یک گروه منطقی می‌سازیم.


$ vgcreate mynew_vg /dev/sdb1 /dev/sdc1 

ساخت یک حجم منطقی logical volume

روی گروه منطقی mynew_vg یک حجم منطقی به اندازهٔ 1000GB با نام database می‌سازیم.


$ lvcreate -L 1000G -n database mynew_vg

در این مرحله می‌توان گروه‌های منطقی را با فرمان vgdisplay بررسی کرد.


$ vgdisplay
$ vgs

نمایش حجم منطقی


$ lvdisplay
$ lvs

قالب‌بندی(format)

برای ساخت سیستم‌فایل روی حجم‌های منطقی lv قالب‌بندی(format) انجام می‌دهیم.


$ mkfs.ext4 -m 0 /dev/mynew_vg/database 

سوارکردن حجم‌ها روی فایل سیستم

$ mkdir /mnt/database 
$ mount /dev/mynew_vg/database   /mnt/database 

برای دائمی کردن این تنظیم پروندهٔ fstab را ویرایش می‌کنیم.

خطوط لازم را از فایل /etc/mtab می‌خوانیم.


/dev/mapper/mynew_vg/database /home/database ext4 rw,seclabel,relatime,attr2,inode64,noquota 0 0

و در پروندهٔ /etc/fstab قرار می‌دهیم.


/dev/mapper/mynew_vg/database /home/database ext4 defaults 0 0

بررسی سوار شدن صحیح گروه حجمی


$ mount -a

به این شکل پس از باز راه‌اندازی سامانه سوارشدن‌ها نیز به صورت خودکار انجام می‌شود.

تغییر اندازهٔ گروه حجمی

نمونه‌های پرتکرار

کاستن از فضای home/ و افزودن به var/

فرض کنید فضای ذخیره‌سازی روی var/ کافی نیست و نیاز به افزایش دارد. با استفاده از امکانات lvm می‌توان از فضای خالی home/ کاست و به var/ افزود.

پیش از شروع به با اجرای فرمان‌های زیر از مسیرها و نام افرازها و همچنین اندازه‌ها مطمئن می‌شویم.


$ sudo lvdisplay -c
$ sudo lvdisplay
$ sudo lvs

کاستن از فضای یک گروه حجمی (home)


$ lvreduce --resizefs -L 20G  /dev/debian-vg/home

فرمان بالا میزان دیسک را روی 20GB تنظیم می‌کند.

تغییر اندازه را بررسی کنید.


$ sudo lvs

افزودن فضای بدست آمده به گروه حجمی var


$ lvextend --resizefs -l +100%FREE /dev/debian-vg/var

فرمان بالا فضای آزاد شده از دیسک را(همهٔ فضای ممکن) به var اضافه می‌کند. می‌توانید با تنظیم عدد درصد مقدار مورد نظر را به گروه بیفزایید.


نکته: از این فرمان برای افزودن تمام فضای خالی موجود روی یک گروه حجمی vg به حجم منظقی lv مورد نظر استفاده می‌شود.


اخطار:

دقت داشته باشید انتخاب resizefs در هر دو فرمان الزامی است در غیر این صورت فایل سیستم خراب می‌شود.

اگر از انتخاب resizefs استفاده نکردید پس از آن بلافاصله فرمان resize2fs را به صورت مجزا روی افراز مورد نظر اجرا کنید.


$ lvextend -l +100%FREE /dev/debian-vg/var
$ resize2fs /dev/debian-vg/var

اتصال یک دیسک جدید به سامانه و افزودن فضای آن به یک حجم منطقی(افراز lvm)

یک دیسک جدید به سامانه متصل می‌کنیم. و فضای آن را به ابتدا به گروه حجمی اضافه می‌افزاییم. سپس با افزایش حجم روی افراز lvm از آن استفاده می‌کنیم.

$ lsblk -f


دیسک افزوده شده sdb است.

حال دیسک را افراز می‌کنیم. یک افزار روی دیسک تازه به نام sdb1 با برنامهٔ fdisk می‌سازیم.


$ sudo fdisk /dev/sdb

برای دیدن شیوهٔ این کار ساخت افراز در ویکی را ببینید.


sudo pvcreate /dev/sdb1
sudo vgextend debian-vg /dev/sdb1
sudo lvextend -r -l +100%FREE /dev/debian-vg/home

نخستین فرمان یک حجم فیزیکی روی /dev/sdb1 می‌سازد. با دستور دوم حجم فیزیکی ساخته شده به گروه حجمی با نام debian-vg افزوده می‌شود. وبا دستور سوم تمام فضای خالی داخل گروه حجمی debian-vg به حجم منظقی /dev/debian-vg/home اختصاص می‌یابد.


به جای ساختن افراز روی sdb می‌توان کل دیسک را به عنوان یک pv تعریف کرد آن را به vg افزود و فضای دراختیار گرفته شده را به lv ها اختصاص داد.


sudo pvcreate /dev/sdb 
sudo vgextend debian-vg /dev/sdb
sudo lvextend -L 40G /dev/debian-vg/var --resizefs

افزایش فضای یک دیسک فیزیکی(در مجازی ساز) و افزودن فضای آن به یک حجم منطقی(افراز lvm)

فرض می‌کنیم دیسک مورد نظر sda است. با fdisk فضای افزوده شده را افراز می‌‌کنیم.


$ sudo fdisk /dev/sda

فرض می‌کنیم افراز ساخته شده sda3 باشد.

به شکل مشابه برای افزودن فضای جدید به حجم منطقی home فرمان‌های زیر را اجرا می‌کنیم.

sudo pvcreate /dev/sda3
sudo vgextend debian-vg /dev/sda3
sudo lvextend -r -l +100%FREE /dev/debian-vg/home

بررسی صحت انجام کار با ساخت پروندهٔ حجیم

در پایان کار می‌توان برای بررسی صحت عملکرد کار یک پرونده به حجم دلخواه را روی دیسک ساخت تا از افزایش ظرفیت حجم منطقی مطمئن شد.


$ fallocate -l 10G create_file.img
$ ls -ltrh
$ lsblf -f