Wednesday, February 25, 2009

LVM: Art Of Partitioning

به نام دوست

بیشک پارتیشن‌بندی هارددیسکت به هنگام نصب لینوکس یک دغدغه جدی برای استفاده کننده سیستم به حساب می‌آید. این موضوع جدی‌تر میشود هنگامی که سیستم به عنوان یک سرور ایفای نقش میکند. مباحثی همچون تعداد پارتیشنها، Mount Point مناسب، و از همه مهمتر اندازه مناسب با توجه به نیاز آینده ممکن است شخص را گیج و منگ کند. بالاخره از روز اول که همه چیز مشخص نیست. چه باید کرد؟
در این مقاله کوتاه چند توصیه ساده اما کارا مطرح شده است. همچنین با توجه به جایگاه lvm به عنوان یک ابزار مهم در پارتیشن بندی مناسب سیستم، تعاریف اولیه و نیز طرز استفاده ازآن به طور خلاصه بیان شده است.

چند توصیه اولیه،
در هر پارتیشن بندی معمولا اصولی وجود دارد که رعایت کردن آن خالی از لطف نیست:
۱- میزان فضای مناسب با توجه به حجم برنامه‌های نصب شده بر روی سیستم برای /‌ یا همان root در نظر بگیرید.
۲- فضای boot را نیز به عنوان یک پارتیشن مجزا در نظر بگیرید.
۳- به اندازه دوبرابر فضای RAM یک پارتیشن به عنوان SWAP بسازید
۴- اگر سرویسها و یا دیتاهای خیلی مهمی دارید حتما فضای مجزایی را برای آنها در نظر بگیرید. انتخاب اینکه کدام دیتاها با هم باشند میتواند به میزان ارتباط ذاتی آنها به همدیگر مربوط باشد.
۵- اگر کاربر خانگی هستید سعی کنید پارتیشن مجزایی را برای Home در نظر بگیرید. با فرض داشتن چند لینوکس بر روی سیستم، Home تمام آنها را همین پارتیشن قرار دهید. بنابراین فضای کاری شما به عنوان یک کاربر در تمام لینوکسها ثابت خواهد بود.

نکته ۱-
موارد ۴ و ۵ یک مزیت ذاتی دارند و آن اینکه در صورتیکه حتی نیاز داشتید لینوکس خود را مجددا نصب کنید؛ بدان معنی که پارتیشن ریشه خود را به کل فرمت کرده و مجددا بر روی آن لینوکس نصب کنید، تمامی اطلاعات شما و همچنین فضای کاری و تنظیمات شخصی شما ثابت خواهند بود.
نکته ۲- در مورد ۵ برای کارآیی مناسب باید توجه داشته باشید که user ID یک کاربر مورد نظر در تمام لینوکسها باید یکسان باشد.


مصیبت عوض شدن ترتیب هاردها،
شاید تا کنون با این موضوع روبرو شده باشید که با تغییر تنظیمات Bios و یا با تغییر مکان اتصال هارد به مادربورد و یا با اضافه کردن یک هارد جدید به سیستم، لینوکس شما بالا نیامده و یا اینکه پارتیشنهایی را که در فایل /etc/fstab مشخص کرده اید به درستی mount نشده باشند.
مشکل از آنجا ناشی میشود که با تعویض ترتیب هاردها نام device مربوطه عوض میشود. به عنوان مثال دوایس /dev/sdb مربوط به هارد دوم شما میباشد. حال اگر بنا به حادثه ای این هارد Master شود نام آن /dev/sda خواهد شد و از آنجا که در اکثر اوقات دوایس مروبط به هارد با مسیر کامل دوایس مشخص میشود طبیعی ترین اتفاق آن است که با تعویض مکان هاردها، سیستم قادر به مونت کردن پارتیشن مورد نظر نباشد.
خوشبختانه در لینوکس برای رفع این مشکل دو راه حل وجود دارد:
1- میتوان به جای استفاده از مسیر کامل دوایس مربوط به پارتیشن از نام label (برچسب) مربوط به پارتیشن استفاده کرد. در اینصورت با تعویض دوایس پارتیشن، نظر به ثابت بودن برچسب، سیستم پارتیشن مورد نظر را به درستی مونت خواهد کرد. برای آگاهی از نحوه برچسب گذاری به این مقاله مراجعه کنید.
یک خط نمونه از /etc/fstab که برچسب استفاده کرده است:
LABEL=/ / ext3 defaults 1 1

2- استفاده از uuid مربوط به پارتیشن مورد نظر است. uuid که مخفف Universal Unique Identifier میباشد یک شماره یکتا برای پارتیشن مرود نظر است. با توجه به اینکه این شماره یکتا با تغییر دوایس پارتیشن تغییر نمیکند حاصل آن خواهد بود که پارتیشن به درستی مونت خواهد شد. یک خط نمونه در /etc/fstab که از uuid استفاده میکند:
UUID=ec255e40-8008-40fa-b254-cac1027df18e /boot ext3 defaul

برای بدست آوردن uuid مربوط به پارتیشنها این دستور را اجرا کنید: ll /dev/disk/by-uuid

یک نکته تکمیلی،
در اکثر اوقات، در حال کاربا سیستم هستید و و بعد از فارغ شدن از fdisk و به هنگام سازی پارتیشنها، احتمالا متوجه شده اید که پارتیشنهای تازه ایجاد شده در لیست دوایسها دیده نمیشوند. این موضوع بدان خاطر است که کرنل از وجود آنها بی اطلاع است. برای رفع این موضوع میتوانید با اجرای دستور partprobe اجرا و لذت وافر ببرید.

و اما چه کنیم با کمبود حافظه،
خوب تا اینجا شاید توانسته باشیم تعداد پارتیشنها و همچنین Mount Point‌ آنها را حدس بزنیم. اما چه کنیم برای زمانی که اندازه پارتیشن ما جوابگوی حجم داده‌های ما نباشد. به چه صورت میتوانیم اندازه پارتیشن خود را اضافه کنیم؟. به چه صورت میتوانم از یک هارد جدید برای افزایش فضای پارتیشنهای هارد موجود استفاده کنم؟ و یا شاید به صورت کلی تر باید از خود بپرسیم که چه راهکاری را پیش بگیریم که انجام این امور در کمترین زمان و با صرف کمترین خطر قابل انجام باشد؟ اینجاست که lvm به نچات ما می آید...

LVM چیست؟
Logical Volume Manager، در یک کلام ابزار حیرت انگیزی است. تاکنون تنها نگاه ما به یک هارد‌دیسک و یا هر ابزار ذخیره سازی، بلوکی متشکل از مجموعه‌ای از پارتیشنها بوده است. اما LVM منطق و دیدگاه تازه‌ای ارایه میدهد.
ساختار ذخیره‌سازی در LVM شامل سه لایه میباشد:
۱- در پایین ترین سطح Physical Volum قرار دارد. PV یک دیسک یا یک پارتیشن از دیسک است که میتواند برای ذخیره سازی اطلاعات استفاده گردد.
۲- Volume Group شامل مجموعه ای از PV ها میباشد که جمعا یک واحد ذخیره سازی اطلاعات را تعریف میکنند. چنانکه متوجه شده اید یک VG مجموعه ای از PV ها را شامل میشود که قابلیت اضافه شدن و حذف شدن از VG را دارند. وجود VG راه حلی برای رهایی از محدودیت حاصل از میزان فضای پارتیشنها و یا هارد دیسک میباشد، به صورتیکه شما میتوانید به مرور زمان با اضافه شدن دیسک جدید آن را به فضای VG خود اضافه کنید.
۳- Logical Volume از دید کاربری یک پارتیشن است. به عبارتی واحدی است که file system بر روی آن نصب میشود و به عنوان یک واحد ذخیره سازی اطلاعات قابلیت مونت شدن به مکان دلخواه ما را دارد.
lvm شما را از محدود شدن در حضار اندازه فیزیکی آزاد میکند. سناریوی کار هم معمولا به این شکل است که شما ابتدا اقدام به تعریف چند PV (همانطور که گفته شد یک PV میتواند یک پارتیشن دلخواه بر روی هارد شما و یا یک دسک کامل باشد) میکنید. بعد از آن میتوانید با توجه به منطق داده های خود ایشان در قالب VG گروه بندی کنید. بعد از ایجاد یک VG نوبت به ساخت LVها و یا به عبارتی پارتیشنها میرسد.
در صورتیکه فضای LVشما بعد از مدتی جوابگوی حجم دیتاهای شما نباشد و همچنین فضای خالی در VG در اختیار شما نباشد میتوانید با اضافه کردن یک دیسک جدید (یا یک پارتیشن جدید از هر یک از دیسکهای خودتان) به VG در قالب یک PV ابتدا فضای آزاد لازم را فراهم کنید. سپس اندازه LV خود را به میزان دلخواه افزایش داده و بعد از آن با استفاده از ابزار filesystem مورد استفاده خود فضای داده ای خود را افزایش دهید. این راه امنترین راه در برخورد با کاهش فضای موجود میباشد.

طریقه کار با lvm
1- ابتدا با استفاده از fdisk و یا هر ابزار دیگری پارتیشنهای مورد نظر خود را بسازید.
2- دستور partprobe را اجرا کنید تا پارتیشنهای جدید لود شوند.
3- با استفاده از دستور pvcreate ابتدا PV های خود را آماده کنید. به عنوان مثال
#pvcreate /dev/sda1
این دستور پارتیشن 1 از هارد a را به یک PV تبدیل خواهد کرد.
4- سومین مرحله ساخت VG است که مجموعه ای از چند PV خواهد بود. برای این موضوع باید از دستور vgcreate استفاده کنید.
#vgcreate My-VG-Name /dev/sda1
این دستور یک VG با نام My-VG-Name خواهد ساخت که تنها شامل یک PV (که همان /dev/sda1 است) خواهد بود. در لیست بالا هر چندتا PV که دارید میتوانید لیست کنید.
5- آخرین مرحله ساخت LV میباشد. LV واحد قابل مونت خواهد بود. برای این کار از دستور lvcreate استفاده میکنیم:
#lvcreate -l 50%VG -n My-Data My-VG-Name
این دستور یک LV با نام My-Data به میزان 50 درصد حجم My-VG-Name خواهد ساخت.
6- دستور partprobe را مجددا اجرا کنید.
7- فایل سیستم مورد نظر خود را بسازید.
#mkfs.ext3 /dev/My-VG-Name/My-Data
این دستور فایل سیستم ext3 را بر روی My-Data بارگذاری خواهد کرد.
8- حال نوبت لذت بردن است. دوایس را مونت کنید و لذت ببرید..
#mount /dev/My-VG-Name/My-Data /mnt

برای آگاهی از دیگر امکانات lvm به منوال این دستور مراجعه کنید.

التماس دعا...