snapshot های LVM در حقیقت کپی هایی از volume های LVM هستند آنها تنها با lvm کار میکنند و تنها زمانی فضا اشغال میکنند که تغییرات اعمال شده در logical volume مبداء به volume snapshot منتقل شود. اگر volume مبداء تغییرات زیادی داشته باشند دقیقا تغییرات یکسان در volume snapshot هم ایجاد خواهد شد. بهتر است که همیشه سایز کمی از تغییرات اشغال شود. در مواقعی که snapshot فضای بیشتری از storage را اشغال کند میتوانیم از lvextend برای افزایش استفاده کنیم. اگر بخواهیم snpashot را shrink کنیم از lvreduce میتوانیم استفاده کنیم.
اگر به صورت تصادفی بعد از ایجاد یک snapshot هر فایلی را پاک کنیم نیاز نیست نگران باشیم زیر snapshot فایل های اورجینال که ما پاک کردیم را دارد. ممکن است زمانی که snapshot گرفته شده فایل هنوز در سرور بوده باشد.
فراموش نکنید که snapshot volume خود را به درستی نگه دارید از آنجایی که برای یک recovery سریع استفاده میشود.
snapshot ها نمیتوانند برای گزینه backup مورد استفاده قرار گیرند. بک آپ ها کپی اولیه اطلاعات هستند در نتیجه نمیتوانید از snapshot به عنوان یک گزینه backup استفاده کنیم.
تجهیزات مورد نیاز :
- نصب LVM
- دانستن نحوه اضافه و کم کردن فضای LVM
تنظیمات سرور من :
سیستم عامل centos 6.5 با نصب lvm
server ip : 192.168.0.200
مرحله اول :
ایجاد LVM Snapshot :
ابتدا فضای آزاد در volume group را برای ایجاد یک snapshot جدید بررسی کنید :
همانطور که میبینید 8 GB فضای آزاد در خروجی کامند vgs باقی مانده است. در نتیجه میخواهیم یک snapshot از یکی از volume هایم با نام tecmint_datas ایجاد کنیم. من قصد دارم تنها snapshot یک گیگی بسازم. با استفاده از دستور زیر :
هر 2 دستور بالا یک کار را انجام میدهند :
s- : ایجاد snapshot
n- : انتخاب نام برای snapshot
و حالا توضیح موارد highlighted شده در بالا :
- سایز snapshot که در حال ایجاد آن هستم
- ایجاد snapshot
- ایجاد نام برای snapshot
- نام snapshot جدید
- volume که میخواهیم برای آن یک snapshot ایجاد کنیم
- اگر بخواهیم یک snapshot را حذف کنیم باید از دستور lvremove برای این کار استفاده کنیم :
اکنون snapshot اخیرا ایجاد شده را با استفاده از دستور زیر list میکنیم :
همانطور که در بالا میبینید snapshot با موفقیت در بالا ایجاد شده. همانطور که در تصویر بالا با فلش قرمز مارک شده است tecmint_datas در حقیقت volume اصلی و اولیه ایست که snapshot از آن ایجاد گردیده است.
در اینجا چندین فایل جدید را درون tecmint_datas اضافه میکنیم. در حال حاضر volume یکسری اطلاعات حدود 650 MB دارد و سایز snapshot ما 1 GB میباشد. در نتیجه فضای کافی برای بک آپ تغییرات مان در volume snapshot موجود میباشد. با استفاده از دستور زیر وضعیت snapshot مان را بررسی میکنیم :
همانطور که میبینید 51٪ از volume snapshot استفاده شده و مشکلی برای اعمال تغییرات بیشتر در فایل هایتان نیست. برای کسب اطلاعات جزءی بیشتر از دستور زیر استفاده کنید :
توضیح واضحی از موارد highlighte شده در تصویر بالا :
- نام snapshot logical volume
- نام volume group که در حال حاضر تحت استفاده میباشد.
- snapshot volume در مد read و write میباشد حتی میتوانید volume را mount کرده و از آن استفاده کنید.
- زمانی که snapshot ایجاد شده که بسیار مهم است زیرا snapshot دنبال هر تغییری بعد از این زمان میگردد.
- این snapshot متعلق به logical volume با نام tecmint_datas میباشد.
- logical volume آنلاین و در دسترس برای استفاده میباشد.
- سایز source volume که از آن snapshot گرفتیم.
- سایز cow-table که برابر با copy on write میباشد که به این معنی است که هر تغییری که روی tecmint_data اعمال شود روی این snapshot هم نوشته خواهد شد.
- سایز snapshot موجود، tecmint_datas 10 GB بود اما سایز snapshote ما 1 GB بود و این به این معناست که فایل های ما حدود 650 MB هستند. بنابراین چیزی که الان موجود هست 51٪ بوده که اگر فایل تا سایز 2 GB در سایز tecmint_datas بیشتر شود از snapshot ما بیشتر بزرگتر خواهد شد و قطعا با snapshot به مشکل بر خواهیم خورد. این به این معناست که ما نیاز داریم سایز logical volume را افزایش دهیم. (snapshot volume)
- سایز قطعه برای snapshot را به ما میدهد.
اکنون بیشتر از 1 GB از فایل ها را در tecmint-datas کپی میکنیم ببینیم چه اتفاقی خواهد افتاد. اگر این کار را انجام دهید پیغام خطای "input/output error" را دریافت خواهید کرد. که یعنی در snapshot فضای موجود نیست :
اگر logical volume پر شود به صورت اتوماتیک از کار می افتد و دیگر نمیتوان از آن استفاده کرد. حتی اگر سایز snapshot volume را افزایش دهیم. بهترین ایده سایز یکسان سورس هنگام ایجاد یک snapshot میباشد.
سایز tecmint_datas 10 GB بود اگر من یک snapshot با سایز 10 GB ایجاد کنم هرگز به مشکلی شبیه به آنچه که در بالا دیدید بر نمیخورد زیرا فضای کافی برای ایجاد snap از volume شما موجود است.
مرحله 2 :
افزایش snapshot در LVM :
اگر ما نیاز داشته باشیم که سایز snapshot را قبل از پر شدن افزایش دهیم میتوانیم از دستور زیر استفاده کنیم :
اکنون کلا 2 GB سایز برای snapshot موجود است :
سپس سایز جدید و COW table را با استفاده از دستور زیر بررسی میکنیم :
دستور زیر برای فهمیدن سایز snapvolume و % میباشد :
اما اگر شما snapshot volume با اندازه یکسان با source volume دارید نیازی به نگرانی در مورد این مسایل نیست.
مرحله 3 :
restor کردن snapshot یا merging :
برای restor کردن snapshot باید ابتدا فایل سیستم را unmount کنیم :
با دستور زیر چک میکنیم که آیا فایل سیستم unmount شده یا نه :
همانطور که در تصویر بالا میبینیم unmount شده در نتیجه میتوانیم به restore مان ادامه دهیم. برای ریستور کردن snap دستور lvconvert را استفاده میکنیم :
بعد از اینکه عملیات merge کامل شد snapshot volume به صورت اتوماتیک حذف خواهد شد اکنون ما میتوانیم فضای پارتیشن مان با استفاده از دستور df مشاهده کنیم :
بعد از اینکه snapshot volume به صورت اتوماتیک حذف شد شما میتوانید سایز logical volume را مشاهده بفرمایید :
نکته مهم : برای افزایش snapshot ها به صورت اتوماتیک ما میتوانیم تغییراتی در فایل conf. اعمال کنیم. مثلا به صورت دستی با استفاده از lvextend فضا را افزایش دهیم.
فایل تنظیمات lvm را با ادیتور مورد دلخواه خود باز کنید :
کلمه autoextend را جستجو کنید که به صورت پیش فرض شبیه به نمونه زیر میباشد :
در اینجا 100 را به 75 تغییر دهید اگر چنین کنید آستانه افزایش اتوماتیک 75 و درصد افزایش خودکار 20 میباشد. که سایز را 20 درصد بیشتر افزایش خواهد داد.
اگر snapshot volume به 75٪ برسد به صورت اتوماتیک سایز snap volume را 20٪ بیشتر افزایش خواهد داد. بنابراین ما میتوانیم به صورت اتوماتیک افزایش داشته باشیم در نهایت فایل را با استفاده از wq ذخیره و از آن خارج میشویم.
این امر snapshot را از بروز هر گونه مشکلی در امان نگه خواهد داشت. همچنین به شما کمک میکند تا زمان بیشتری را صرفه جویی کنید. LVM تنها روش پارتیشنی است که با استفاده از آن شما میتوانید فضا را افزایش یا کاهش دهید همچنین دارای ویژگی های بیشماری از جمله Provisioning, Striping, Virtual Volume و thin-pool میباشد که در تاپیک های بعدی به آنها خواهیم پرداخت.
همچنین توصیه میشود مطالعه کنید :
بخش اول : آموزش کامل پارتیشن بندی LVM در لینوکس
بخش دوم : How to Extend/Reduce LVM’s in Linux
بخش چهارم : Setup 4hin Provisioning Volumes in LVM
بخش پنجم : Manage Multiple LVM Disks using Striping I/O
بخش ششم : Migrating LVM Partitions to New Logical Volume (Drive)
موفق باشید
محمد هابیلی
اگر به صورت تصادفی بعد از ایجاد یک snapshot هر فایلی را پاک کنیم نیاز نیست نگران باشیم زیر snapshot فایل های اورجینال که ما پاک کردیم را دارد. ممکن است زمانی که snapshot گرفته شده فایل هنوز در سرور بوده باشد.
فراموش نکنید که snapshot volume خود را به درستی نگه دارید از آنجایی که برای یک recovery سریع استفاده میشود.
snapshot ها نمیتوانند برای گزینه backup مورد استفاده قرار گیرند. بک آپ ها کپی اولیه اطلاعات هستند در نتیجه نمیتوانید از snapshot به عنوان یک گزینه backup استفاده کنیم.
تجهیزات مورد نیاز :
- نصب LVM
- دانستن نحوه اضافه و کم کردن فضای LVM
تنظیمات سرور من :
سیستم عامل centos 6.5 با نصب lvm
server ip : 192.168.0.200
مرحله اول :
ایجاد LVM Snapshot :
ابتدا فضای آزاد در volume group را برای ایجاد یک snapshot جدید بررسی کنید :
کد PHP:
# vgs
# lvs
همانطور که میبینید 8 GB فضای آزاد در خروجی کامند vgs باقی مانده است. در نتیجه میخواهیم یک snapshot از یکی از volume هایم با نام tecmint_datas ایجاد کنیم. من قصد دارم تنها snapshot یک گیگی بسازم. با استفاده از دستور زیر :
کد PHP:
# lvcreate -L 1GB -s -n tecmint_datas_snap /dev/vg_tecmint_extra/tecmint_datas
OR
# lvcreate --size 1G --snapshot --name tecmint_datas_snap /dev/vg_tecmint_extra/tecmint_datas
s- : ایجاد snapshot
n- : انتخاب نام برای snapshot
و حالا توضیح موارد highlighted شده در بالا :
- سایز snapshot که در حال ایجاد آن هستم
- ایجاد snapshot
- ایجاد نام برای snapshot
- نام snapshot جدید
- volume که میخواهیم برای آن یک snapshot ایجاد کنیم
- اگر بخواهیم یک snapshot را حذف کنیم باید از دستور lvremove برای این کار استفاده کنیم :
کد PHP:
# lvremove /dev/vg_tecmint_extra/tecmint_datas_snap
اکنون snapshot اخیرا ایجاد شده را با استفاده از دستور زیر list میکنیم :
کد PHP:
# lvs
همانطور که در بالا میبینید snapshot با موفقیت در بالا ایجاد شده. همانطور که در تصویر بالا با فلش قرمز مارک شده است tecmint_datas در حقیقت volume اصلی و اولیه ایست که snapshot از آن ایجاد گردیده است.
در اینجا چندین فایل جدید را درون tecmint_datas اضافه میکنیم. در حال حاضر volume یکسری اطلاعات حدود 650 MB دارد و سایز snapshot ما 1 GB میباشد. در نتیجه فضای کافی برای بک آپ تغییرات مان در volume snapshot موجود میباشد. با استفاده از دستور زیر وضعیت snapshot مان را بررسی میکنیم :
کد PHP:
# lvs
همانطور که میبینید 51٪ از volume snapshot استفاده شده و مشکلی برای اعمال تغییرات بیشتر در فایل هایتان نیست. برای کسب اطلاعات جزءی بیشتر از دستور زیر استفاده کنید :
کد PHP:
# lvdisplay vg_tecmint_extra/tecmint_data_snap
توضیح واضحی از موارد highlighte شده در تصویر بالا :
- نام snapshot logical volume
- نام volume group که در حال حاضر تحت استفاده میباشد.
- snapshot volume در مد read و write میباشد حتی میتوانید volume را mount کرده و از آن استفاده کنید.
- زمانی که snapshot ایجاد شده که بسیار مهم است زیرا snapshot دنبال هر تغییری بعد از این زمان میگردد.
- این snapshot متعلق به logical volume با نام tecmint_datas میباشد.
- logical volume آنلاین و در دسترس برای استفاده میباشد.
- سایز source volume که از آن snapshot گرفتیم.
- سایز cow-table که برابر با copy on write میباشد که به این معنی است که هر تغییری که روی tecmint_data اعمال شود روی این snapshot هم نوشته خواهد شد.
- سایز snapshot موجود، tecmint_datas 10 GB بود اما سایز snapshote ما 1 GB بود و این به این معناست که فایل های ما حدود 650 MB هستند. بنابراین چیزی که الان موجود هست 51٪ بوده که اگر فایل تا سایز 2 GB در سایز tecmint_datas بیشتر شود از snapshot ما بیشتر بزرگتر خواهد شد و قطعا با snapshot به مشکل بر خواهیم خورد. این به این معناست که ما نیاز داریم سایز logical volume را افزایش دهیم. (snapshot volume)
- سایز قطعه برای snapshot را به ما میدهد.
اکنون بیشتر از 1 GB از فایل ها را در tecmint-datas کپی میکنیم ببینیم چه اتفاقی خواهد افتاد. اگر این کار را انجام دهید پیغام خطای "input/output error" را دریافت خواهید کرد. که یعنی در snapshot فضای موجود نیست :
اگر logical volume پر شود به صورت اتوماتیک از کار می افتد و دیگر نمیتوان از آن استفاده کرد. حتی اگر سایز snapshot volume را افزایش دهیم. بهترین ایده سایز یکسان سورس هنگام ایجاد یک snapshot میباشد.
سایز tecmint_datas 10 GB بود اگر من یک snapshot با سایز 10 GB ایجاد کنم هرگز به مشکلی شبیه به آنچه که در بالا دیدید بر نمیخورد زیرا فضای کافی برای ایجاد snap از volume شما موجود است.
مرحله 2 :
افزایش snapshot در LVM :
اگر ما نیاز داشته باشیم که سایز snapshot را قبل از پر شدن افزایش دهیم میتوانیم از دستور زیر استفاده کنیم :
کد PHP:
# lvextend -L +1G /dev/vg_tecmint_extra/tecmint_data_snap
سپس سایز جدید و COW table را با استفاده از دستور زیر بررسی میکنیم :
کد PHP:
# lvdisplay /dev/vg_tecmint_extra/tecmint_data_snap
کد PHP:
# lvs
اما اگر شما snapshot volume با اندازه یکسان با source volume دارید نیازی به نگرانی در مورد این مسایل نیست.
مرحله 3 :
restor کردن snapshot یا merging :
برای restor کردن snapshot باید ابتدا فایل سیستم را unmount کنیم :
کد PHP:
# unmount /mnt/tecmint_datas/
با دستور زیر چک میکنیم که آیا فایل سیستم unmount شده یا نه :
کد PHP:
# df -h
همانطور که در تصویر بالا میبینیم unmount شده در نتیجه میتوانیم به restore مان ادامه دهیم. برای ریستور کردن snap دستور lvconvert را استفاده میکنیم :
کد PHP:
# lvconvert --merge /dev/vg_tecmint_extra/tecmint_data_snap
بعد از اینکه عملیات merge کامل شد snapshot volume به صورت اتوماتیک حذف خواهد شد اکنون ما میتوانیم فضای پارتیشن مان با استفاده از دستور df مشاهده کنیم :
کد PHP:
# df -Th
بعد از اینکه snapshot volume به صورت اتوماتیک حذف شد شما میتوانید سایز logical volume را مشاهده بفرمایید :
کد PHP:
# lvs
نکته مهم : برای افزایش snapshot ها به صورت اتوماتیک ما میتوانیم تغییراتی در فایل conf. اعمال کنیم. مثلا به صورت دستی با استفاده از lvextend فضا را افزایش دهیم.
فایل تنظیمات lvm را با ادیتور مورد دلخواه خود باز کنید :
کد PHP:
# vim /etc/lvm/lvm.conf
در اینجا 100 را به 75 تغییر دهید اگر چنین کنید آستانه افزایش اتوماتیک 75 و درصد افزایش خودکار 20 میباشد. که سایز را 20 درصد بیشتر افزایش خواهد داد.
اگر snapshot volume به 75٪ برسد به صورت اتوماتیک سایز snap volume را 20٪ بیشتر افزایش خواهد داد. بنابراین ما میتوانیم به صورت اتوماتیک افزایش داشته باشیم در نهایت فایل را با استفاده از wq ذخیره و از آن خارج میشویم.
این امر snapshot را از بروز هر گونه مشکلی در امان نگه خواهد داشت. همچنین به شما کمک میکند تا زمان بیشتری را صرفه جویی کنید. LVM تنها روش پارتیشنی است که با استفاده از آن شما میتوانید فضا را افزایش یا کاهش دهید همچنین دارای ویژگی های بیشماری از جمله Provisioning, Striping, Virtual Volume و thin-pool میباشد که در تاپیک های بعدی به آنها خواهیم پرداخت.
همچنین توصیه میشود مطالعه کنید :
بخش اول : آموزش کامل پارتیشن بندی LVM در لینوکس
بخش دوم : How to Extend/Reduce LVM’s in Linux
بخش چهارم : Setup 4hin Provisioning Volumes in LVM
بخش پنجم : Manage Multiple LVM Disks using Striping I/O
بخش ششم : Migrating LVM Partitions to New Logical Volume (Drive)
موفق باشید
محمد هابیلی