در این بخش از آموزش Lpic1 می خواهیم به آموزش و معرفی ساختار و طراحی لی آوت هارد دیسک بپردازیم که شامل پارتیش بندی، فایل سیستم، Swap ، mount points و LVM می باشد پس با ما در ادامه همراه باشید.
لینوکس نیز مانند تمام سیستم عامل ها دارای چندین فایل می باشد که این فایل ها در دایرکتوری های مختلف پخش شده است که تمام دارکتوری ها از یک نقطه به نام ( / ) یا root شروع شده است. (آشنایی و معرفی فایل سیستم در لینوکس)
Unix directories
Directory | Description |
---|---|
bin | محل قرار گیری دستور های اصلی لینوکس |
boot | فایل های اولیه ای که برای بوت شدن لینوکس لازم است |
dev | Device files |
etc | بیشتر کانفیگ ها در این دایرکتری ذخیره می شود |
home | دایرکتوری شخصی هر یوزر در این بخش ذخیره می شود |
lib | محل ذخیره تمام لایبرری های نرف افزارها و ماژول های کرنل |
media | این دایرکتوری معمولا برای سخت افزار های اضافه شده مانند usb و cdrom و … استفاده میشود |
mnt | این دایرکتوری برای mount کردن درایوهایی که موقت هستن استفاده میشود مانند NFS |
opt | معمولا برنامه ای Third Party که جزء اصلی لینوکس نیستن وجود دارد مانند اوراکل |
root | دایرکتوری root نیر Home directory یوزر روت است |
sbin | در واقع system binaries است جایگاه اصلی فایل ها و نرم افزار های سیستمی است |
srv | این دایرکتوری که serve directory است برای نگهداری فایل های قابل سرو توسط سرویس ها استفاده میشود. برای نمونه یک ftp سرور رو درنظر بگیرید که نیاز داره برای سرو یک سری فایل. |
tmp | فایل های موقت در آن ذخیره می شود (Temporary files) |
usr | این دایرکتوری در برگیرنده برنامه های کاربردی کاربران میباشد که در خود لینوکس نیست و بعدا اضافه شده است |
var | شامل تمامی اطلاعات متغییر میباشد، برای نمونه تمامی لاگ فایل ها که ممکن است در لحظه تغییر کنند و یا هر فایلی که ممکن است تغییر کند در این دایرکتوری جای دارد |
mount به معنی اتصال و mount point به معنی نقطه اتصال است. عمل mount به معنی اتصال یک پارتیشن یا یک دایرکتوری بر روی یک دایرکتوری دیگر است. اگر تا به حال لینوکس را بصورت گرافیکی نصب کرده باشید، دیده اید که اول باید هارد را پارتیشن بندی کنید. نام هاردها با توجه به نوع و تعداد هارد بصورت hdX و sdX است.
hd معرف هاردهای IDE و sd مخفف هاردهای SATA می باشد. X بیانگر تعداد هارد های متصل به سیستم است که با یک حرف نشان داده می شود. بطور مثال اگر سه هارد ساتا دارید پس سه Device به نام های sda و sdb و sdc خواهید داشت.
برای دیدن پارتیشن های یک هارد دیسک دو دستور زیر را به ترتیب وارد می کنیم:
- sudo fdisk /dev/sda
- p
با دستور بالا تمام پارتیشن ها و اطلاعات آن را به ما نمایش می دهد.
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.25.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000beca1
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 43094015 43091968 20.6G 83 Linux
/dev/sda2 43094016 92078390 48984375 23.4G 83 Linux
/dev/sda3 92080126 625141759 533061634 254.2G 5 Extended
/dev/sda5 92080128 107702271 15622144 7.5G 82 Linux swap / Solaris
/dev/sda6 107704320 625141759 517437440 246.8G 83 Linux
رکورد راه انداز اصلی (Master Boot Record/MBR) اولین سکتور(Sector) از دیسک سخت رایانه است که اطلاعات پارتیشنها روی آن قرار دارد و فرآیند راه اندازی رایانه از روی آن آغاز میشود.
مفهوم MBR اولین بار در سال 1983 با PC DOS2 معرفی شد. MBR اطلاعات چگونگی تقسیمبندی منطقی یک حافظه شامل فایل سیستمها را نگهداری میکند. در کنار آن MBR شامل کدهای اجرائی که تابع راه انداز سیستمهای عامل نصب شدهاست نیز میشود.
کل کدهای MBR فقط 512 بایت میباشد که به صورت قراردادی، در اولین سکتور از حافظه (که معمولاً سکتور شماره 0 خوانده میشود) قرار میگیرد. با توجه به این که یک سکتور معمولاً دارای 512 بایت حافظه ذخیره سازی است، با قرار گرفتن MBR به صورت کامل پر میشود.
MBR وظیفه دارد تا اطلاعات مربوط به پارتیشنهای اولیه را در خود نگه داشته و با تشخیص پارتیشن فعال و با استفاده از دستور موجود در اولین سکتور آن پارتیشن، هسته سیستم عامل را بر روی RAM قرار داده و اجرا کند. از آن جایی که 512 بایت فضای بسیار کوچکی برای نوشتن یک برنامه است، MBR تنها این دو وظیفه را بر عهده دارد.
در روش MBR بالاترین میزان پشتبانی از یک هارد دیسک 2 ترابایت می باشد. در نتیجه اگر میزان هارد دیسک شما بیشتر از 2 ترابایت باشد میزان باقیمانده بلااستفاده خواهد بود.
استاندارد MBR تنها از 4 پارتیشن اولیه پشتیبانی میکند و در صورت نیاز به تعداد بیشتر لازم است که یکی از پارتیشنهای خود را تحت عنوان extended partition بسازید و پارتیشنهای منطقی خود را در داخل آن ایجاد نمایید. در لینوکس پارتیشن extended از شماره 5 شروع می شود به عنوان مثال sda5
برای این که دیگر مشکلات MBR وجود نداشته باشد مفهوم جدیدی به نام GPT را معرفی کردن. GPT استاندارد جدیدی است که به تدریج جای MBR را میگیرد. این سیستم محدودیتهای MBR را ندارد و درایوهای شما میتوانند به مراتب بزرگتر باشند و محدودیت ظرفیت آنها نیز به سیستم عامل و سیستم پرونده یا فایل سیستم آنها بستگی دارد.
با استفاده از استاندارد GPT میتوان تعداد نامحدودی پارتیشن را ایجاد نمود و محدودیتی که در اینجا با آن روبرو خواهید بود سیستم عامل شماست و دیگر نیازی به ایجاد پارتیشن از نوع Extended نخواهید داشت.
در دیسکهای MBR دادههای مربوط به پارتیشنبندی و بوت در یک موقعیت ذخیره میشوند و چنانچه این دادهها اور رایت یا مخدوش شوند به دردسر بزرگی خواهید افتاد. در مقابل GPT نسخههای متعددی از این دادهها را روی دیسک ذخیره میکند و به همین دلیل اطمینانپذیری بالاتری داشته و در صورت وارد آمدن آسیب به دیسک میتوان آنها را بازیابی کرد.
اما در سیستم MBR هیج راهی برای تشخیص اینکه به دادههای سیستم آسیب رسیده است یا خیر وجود ندارد و تنها در زمان بوت شدن سیستم متوجه میشوید که سیستم با مشکل روبروست و پارتیشنهای درایو شما ناپدید شدهاند.
دستور parted که یک ابزار قدیمی است و ممکن از در تمام لینوکس ها نصب نباشد هم مانند fdisk عمل می کند.
sudo parted /dev/sda p
Model: ATA ST320LT000-9VL14 (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 22.1GB 22.1GB primary ext4 boot
2 22.1GB 47.1GB 25.1GB primary ext4
3 47.1GB 320GB 273GB extended
5 47.1GB 55.1GB 7999MB logical linux-swap(v1)
6 55.1GB 320GB 265GB logical
ابزار GParted یک ابزار گرافیکی در لینوکس است که به راحتی میتوان هر نوع تغییر را در پارتیشن بندی و فرمت هارد ها در لینوکس انجام داد.
LVM چیست؟
شما فکر کنید یک هارد 500 گیگ دارید و این هارد به مرور پر می شود حالا راه حل چیست؟ آیا حتما باید هارد عوض شود و یک هارد بزرگ تر را جای آن قرار دهیم؟ جواب خیر است!
LVM به معنی Logical Volume Management می باشد، به صورت خلاصه LVM بین سیستم عامل و هارد ها قرار می گیرد و تمام هارد های ما را به صورت یک هارد مجازی واحد به سیستم عامل معرفی می کند.
معمولا LVM را برای اهداف زیر استفاده می کنند:
- مدیریت فضای بسیار زیاد هارد دیسک ، مدیریت اضافه کردن و حذف فضا به هارد دیسک
- به راحتی بعد از پارتیشن بندی دیسک و فایل سیستم می توان فضای فایل سیستم را کم و یا زیاد کرد
- می توان از Logical Volume که ساخته می شود بکآپ گرفت (با Snapshots گرفتن از LV)
در LVM سه اصلاح زیر بسیار کاربردی و البته قسمت های بنیادی LVM را تشکیل می دهتد:
Physical Volume یا PV
واحد ذخیره سازی فیزیکی LVM یک دستگاه بلوک (block device) مثل پارتیشن و یا کل دیسک است، که دیسک را برای استفاده از LVM باید به حجم فیزیکی (Physical Volume) مقدار دهی اولیه شود.
Volume Group یا VG
در این مکانیرم physical volume هایی که ساخته شد را در یک گروه با هم ترکیب می شوند. با استفاده از Volume Group می توانیم حجم خیلی زیادی از هارد دیسک ها (می توان با تعداد زیادی از هارد دیسک یک Volume Group ساخت) را پارتیشن بندی کرد.
Logical Volume یا LV
در Volume Group با استفاده از Logical Volume می توان پارتیشن بندی منطقی انجام دهیم و با انجام Mount به دایرکتوری ها می توان به هر دایرکتوری یک فضا هارد دیسک با استفاده از LV اختصاص دهیم.
LV های به 3 شکل وجود دارند:
Linear Volume : می توان از چند تا (PV (physical Volume یک LV ساخت.
Striped Logical Volume : وقتی داده ای در LVM Logical Volume نوشته می شود ، لایه فایل سیستم داده ها را در PV با ساختاری ذخیره می کند. با استفاده از Striped LV می توان روش نوشتن داده ها در PV کنترل کرد این روش در انبوه ای از خواندن و نوشتن خیلی کاربرد دارد. خواندن و نوشتن در این روش به صورت موازی انجام می شود.
Mirrored Logical Volume : در این روش یک کپی از فایلی که باید بر روی یک PV ذخیره شود بر روی PV دیگری نیز ذخیره می شود و در هنگام از کار افتادن یک PV ،LVM به صورت Linear Volume دسترسی به PV بک آپ را داراست.
به غیر از 3 نوع از LV هایی که در بالا نام برده شد (که پر کاربردیترین آن ها بودند) 4 نوع دیگری وجود دارند که عبارت اند از
- RAID LV
- Thin Volume
- Snapshot Thinly-Provisioned
- Snapshot Volume
حال با تمام این حرف ها که زدیم بعد از این که هارد 500 ما پر شد می توانیم در صورت استفاده از LVM یک هارد جدید به عنوان PV به ساختار اضافه کنیم و آن را عضو VG کنیم و سپس به LVM می گوییم ساختار LV را برای سیستم عامل بروز کن تا فضای در دسترس سیستم عامل افزایش پیدا کند.
فضای swap چیست؟
اگر تاکنون در لینوکس لیست پارتیشن ها را دیده باشید، حتما پارتیشن swap نظر شما را جلب کرده است. swap چیست؟ چه نیازی به وجود swap هست؟ مقدار swap چقدر باید باشد؟
سیستم عامل برای اینکه بتواند برنامه ای را اجرا کند، باید آن برنامه را به داخل حافظه اصلی (RAM) منتقل کند. در سیستم عامل های مدرن امروزی در هر لحظه تعداد زیادی برنامه در حال اجرا هستند همچنین تعداد زیادی سرویس نیز در پس زمینه در حال اجرا می باشند.
با توجه به این که مقدار حافظه اصلی کامپیوتر محدود است، وقتی تعداد برنامه هایی که قرار است همزمان اجرا شوند زیاد شود، مقدار حافظه لازم جهت اجرای همزمان برنامه ها از کل حافظه اصلی کامپیوتر بیشتر می شود. در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت crash می کند.
برای حل این مشکل دو راه وجود دارد:
اول اینکه مقدار حافظه اصلی کامپیوتر را افزایش دهیم. این را حل دارای مشکلاتی است. هزینه حافظه اصلی بسیار گران است و علاوه بر این مقدار حافظه اصلی قابل آدرس دهی دارای محدودیت است (هر چند در معماری های جدید سخت افزاری مقدار حافظه اصلی قابل آدرس دهی بسیار بیشتر شده است).
دوم این که بخشی از فضای دیسک را بصورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. به این فضا در سیستم عامل های خانواده لینوکس و یونیکس فضای swap گفته می شود.
فضای swap را می توان به دو صورت پارتیشن و فایل تعریف کرد. توصیه می شود فضای swap را به صورت پارتیشن تعریف کنید، چون در صورتی که فضای swap به صورت فایل تعریف شود تکه تکه شدن (fragmentation) فایل سرعت و بهره وری عملیات swap را پایین می آورد.
سیستم عامل چگونه از فضای swap استفاده می کند؟
سیستم عامل حافظه اصلی را به بخش هایی تقسیم می کند، که page نامیده می شوند. هر برنامه در حال اجرا یک یا چندین page را در حافظه اصلی اشغال می کند.
تصور کنید که تمام حافظه اصلی استفاده شده باشد و برنامه دیگری بخواهد اجرا شود، در این وضعیت سیستم عامل page هایی که کمتر استفاده می شوند را از داخل حافظه اصلی به فضای swap انتقال می دهد تا برای اجرا برنامه یا برنامه های جدید فضای خالی ایجاد کند. به این کار در اصطلاح swapping یا paging گفته می شد.
اما استفاده از فضای swap معایبی هم دارد. زمان دسترسی حافظه اصلی در حد نانو ثانیه است، در حالی که زمان دسترسی در هارد دیسک ها در حد میلی ثانیه می باشد. این بدین معنی است که سرعت هارد دیسک دهها هزار برابر کندتر از حافظه اصلی است در نتیجه استفاده از فضای swap به جای حافظه اصلی به معنی کندتر شدن سیستم است.
حال اگر مقدار حافظه اصلی کامپیوتر خیلی کم باشد، تمام وقت و قدرت پردازش سیستم به انتقال page ها بین فضای swap و حافظه اصلی تلف می شود در این حالت تنها گزینه اضافه کردن حافظه اصلی می باشد.
اندازه فضای swap چقدر باید باشد؟
اگر کامپیوتر دارای حافظه اصلی کافی باشد، لینوکس می تواند بدون هیچ فضای swap به کار خود ادامه دهد. اما اگر حافظه اصلی تمام شود سیستم crash خواهد کرد. به همین دلیل عاقلانه است که فضای swap تعریف شود، مخصوصا با توجه به قیمت ارزان دیسک سخت به نسبت حافظه اصلی.
سوال اصلی این است که چه مقدار برای فضای swap اختصاص دهیم؟ سیستم عامل های مبتنی بر یونیکس قدیمی تر (مثل Sun OS یا Ultrix) فضای swap دو یا سه برابر حافظه اصلی نیاز داشتند. اما سیستم عامل های جدیدتر (مثل لینوکس) به این مقدار فضای swap نیاز ندارند، هرچند اگر شما برای سیستم تنظیم کنید، سیستم می تواند از این مقدار نیز استفاده کنند. امروزه به دلیل افزایش حجم فاضی رم توصیه می شود فضای swap دو برابر رم باشد ولی بیشتر از 8 گیگ نشود.