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 اضافه میکند. میتوانید با تنظیم عدد درصد مقدار مورد نظر را به گروه بیفزایید.
اخطار:
دقت داشته باشید انتخاب 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