وزن: 2
توضیحات: داوطلبان باید قادر به طراحی طرح پارتیشنبندی دیسک برای یک سیستم لینوکس باشند.
حوزههای کلیدی دانش:
- اختصاص سیستمفایلها و فضای swap به پارتیشنها یا دیسکهای جداگانه
- متناسبسازی طراحی با کاربرد در نظر گرفته شده برای سیستم
- اطمینان از مطابقت پارتیشن /boot با الزامات معماری سختافزار برای بوت شدن
- دانش ویژگیهای اساسی LVM
اصطلاحات و ابزارهای کاربردی:
- / (root) filesystem
- /var filesystem
- /home filesystem
- /boot filesystem
- swap space
- mount points
- partitions
در این درس سبک، ابتدا مروری سریع بر ساختار هارد دیسکها و نحوه ذخیرهسازی دادهها روی آنها خواهیم داشت، سپس نگاهی به چیدمان دیسک در لینوکس میاندازیم.
یک دیسک به شیارها، سیلندرها و سکتورها تقسیم میشود.
یک شیار (track) بخشی از دیسک است که در حین یک چرخش دیسک از زیر یک هد ثابت عبور میکند، حلقهای به عرض 1 بیت.
یک سیلندر (cylinder) شامل مجموعهای از شیارها است که توسط تمام هدها (روی صفحات جداگانه) در یک موقعیت جستجوی واحد توصیف میشوند. هر سیلندر از مرکز دیسک فاصله یکسانی دارد. یک شیار به بخشهایی از سکتورها تقسیم میشود که واحد اصلی ذخیرهسازی است.
یک سکتور (sector) که کوچکترین واحد ذخیرهسازی فیزیکی روی دیسک است، تقریباً همیشه دارای اندازه 512 بایت است زیرا 512 توان 2 است (2 به توان 9). عدد 2 استفاده میشود زیرا در ابتداییترین زبانهای کامپیوتری دو حالت وجود دارد — روشن و خاموش.
پارتیشنبندی دیسک عبارت است از ایجاد یک یا چند منطقه روی یک هارد دیسک یا سایر حافظههای ثانویه، به طوری که سیستمعامل بتواند اطلاعات هر منطقه را به طور جداگانه مدیریت کند. این مناطق پارتیشن نامیده میشوند.
دیسک اطلاعات مربوط به مکانها و اندازههای پارتیشنها را در منطقهای به نام partition table ذخیره میکند که سیستمعامل قبل از هر بخش دیگری از دیسک آن را میخواند. سپس هر پارتیشن در سیستمعامل به عنوان یک دیسک "منطقی" مجزا ظاهر میشود که از بخشی از دیسک واقعی استفاده میکند.
[root@centos7-1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sr0 11:0 1 55.7M 0 rom /run/media/payam/VMware Tools
هنگام انجام نصب، معمولاً حداقل پیکربندی دیسک شامل دو پارتیشن است که باید ایجاد شوند:
- **/ ** (root): دایرکتوری که حاوی توزیع لینوکس است.
- Swap space
فضای swap در لینوکس زمانی استفاده میشود که مقدار حافظه فیزیکی (RAM) پر شده باشد. اگر سیستم به منابع حافظه بیشتری نیاز داشته باشد و RAM پر باشد، صفحات غیرفعال در حافظه به فضای swap منتقل میشوند. در حالی که فضای swap میتواند به ماشینهای با مقدار RAM کم کمک کند، نباید آن را جایگزینی برای RAM بیشتر در نظر گرفت. فضای swap روی هارد درایوها قرار دارد که زمان دسترسی کندتری نسبت به حافظه فیزیکی دارند.
فضای swap میتواند یک پارتیشن swap اختصاصی (توصیه میشود)، یک swap file یا ترکیبی از پارتیشنهای swap و فایلهای swap باشد.
Swap باید معادل 2 برابر RAM فیزیکی برای حداکثر 2 گیگابایت RAM فیزیکی و حدود 1.5 برابر RAM فیزیکی برای بیش از 2 گیگابایت RAM فیزیکی باشد. با این حال، این یک دستورالعمل قدیمی است و بستگی به نوع سیستمی دارد که درباره آن صحبت میکنیم.
تمام پارتیشنها از طریق یک mount point به سیستم متصل میشوند. mount point مکان یک مجموعه داده خاص را در سیستمفایل تعریف میکند. معمولاً تمام پارتیشنها از طریق پارتیشن root متصل میشوند. در این پارتیشن که با اسلش (/) مشخص میشود، دایرکتوریهایی ایجاد میشوند. این دایرکتوریهای خالی نقطه شروع پارتیشنهایی خواهند بود که به آنها متصل میشوند.
[root@centos7-1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 46G 4.4G 41G 10% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 26M 1.9G 2% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 378M 32K 378M 1% /run/user/1000
/dev/sr0 56M 56M 0 100% /run/media/pabros/VMware Tools
tmpfs 378M 0 378M 0% /run/user/0
در حین راهاندازی سیستم، تمام پارتیشنها به این صورت mount میشوند (در فایل /etc/fstab توضیح داده خواهد شد). برخی از پارتیشنها به طور پیشفرض mount نمیشوند، به عنوان مثال اگر به طور مداوم به سیستم متصل نباشند، مانند حافظه usb. در صورت پیکربندی مناسب، دستگاه به محض اینکه سیستم متوجه اتصال آن شود mount میشود یا میتواند توسط کاربر قابل mount باشد.
یک سیستمفایل روشها و ساختارهای دادهای است که یک سیستمعامل برای ردیابی فایلها روی دیسک یا پارتیشن استفاده میکند؛ یعنی روش سازماندهی فایلها روی دیسک. بدون یک سیستمفایل، اطلاعات قرار داده شده در یک رسانه ذخیرهسازی، یک بدنه بزرگ از دادهها خواهد بود که هیچ راهی برای تشخیص اینکه یک قطعه اطلاعات در کجا متوقف میشود و قطعه بعدی از کجا شروع میشود، وجود نخواهد داشت.
سیستمفایلهای مختلف ساختارهای سازماندهی متفاوتی برای تعیین محل ذخیره دادهها و اطلاعات نمایهسازی (indexing) دارند:
- FAT32: یک سیستمفایل قدیمیتر ویندوز است، اما هنوز در دستگاههای رسانه قابل حمل — البته فقط دستگاههای کوچکتر — استفاده میشود. هارد دیسکهای خارجی بزرگتر با ظرفیت 1 ترابایت یا بیشتر احتمالاً با NTFS فرمت شدهاند.
- NTFS: نسخههای مدرن ویندوز — از ویندوز XP به بعد — از سیستمفایل NTFS برای پارتیشن سیستم خود استفاده میکنند. درایوهای خارجی را میتوان با FAT32 یا NTFS فرمت کرد.
- HFS+: مکها از HFS+ برای پارتیشنهای داخلی خود استفاده میکنند و دوست دارند درایوهای خارجی را نیز با HFS+ فرمت کنند.
- Ext2/Ext3/Ext4: شما اغلب سیستمفایلهای Ext2، Ext3 و Ext4 را در لینوکس خواهید دید.
- Btrfs: "better file system" — یک سیستمفایل جدیدتر لینوکس است که هنوز در حال توسعه است. در حال حاضر در اکثر توزیعهای لینوکس پیشفرض نیست، اما احتمالاً روزی جایگزین Ext4 خواهد شد. هدف ارائه ویژگیهای اضافی است که به لینوکس اجازه میدهد تا مقادیر بیشتری از فضای ذخیرهسازی را مدیریت کند.
- Swap: در لینوکس، سیستمفایل “swap” واقعاً یک سیستمفایل نیست. پارتیشنی که به عنوان “swap” فرمت شده است، فقط میتواند توسط سیستمعامل به عنوان فضای swap استفاده شود.
لینوکس از یک ساختار سیستمفایل سلسلهمراتبی استفاده میکند، بسیار شبیه به یک درخت وارونه، که ریشه (/) در پایه سیستمفایل قرار دارد و تمام دایرکتوریهای دیگر از آنجا گسترش مییابند. دایرکتوری لینوکس شامل سیستمفایلهای بسیاری است که میتوانند روی دستگاههای مختلف و حتی سرورهای مختلف باشند.
[root@centos7-1 ~]# tree / -L 1
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
19 directories, 0 files
بیایید توضیح دهیم که آنها برای چه هستند:
- / (root): سیستمفایل ریشه، قبل از اینکه هسته اولین فرآیند را بارگذاری کند mount میشود. bootloader به هسته میگوید که از چه چیزی به عنوان سیستمفایل ریشه استفاده کند (معمولاً یک پارتیشن دیسک است اما میتواند چیزی در شبکه باشد).
- /bin : تمام برنامههای باینری اجرایی (فایل) مورد نیاز در حین بوت، تعمیر، فایلهای مورد نیاز برای اجرا در حالت تک کاربره (single-user-mode) و سایر دستورات مهم و اساسی.
- /boot : فایلهای مهم در طول فرآیند راهاندازی (boot-up) از جمله Linux Kernel را نگه میدارد.
- /dev : یک سیستمفایل در حافظه (in-memory) که در آن فایلهای دستگاه به طور خودکار توسط udev بر اساس سختافزار موجود ایجاد میشوند. حاوی فایلهای دستگاه برای تمام دستگاههای سختافزاری روی ماشین است، مانند cdrom، cpu و غیره.
- /etc : حاوی فایلهای پیکربندی برنامهها، اسکریپتهای شروع، خاموش کردن، شروع و توقف برای هر برنامه به صورت مجزا است.
- /home : دایرکتوری خانگی کاربران. هر بار که یک کاربر جدید ایجاد میشود، دایرکتوری به نام کاربر در داخل دایرکتوری home ایجاد میشود که شامل دایرکتوریهای دیگری مانند Desktop، Downloads، Documents و غیره است.
- /lib : دایرکتوری Lib شامل ماژولهای هسته و تصاویر کتابخانههای مشترک (shared library images) مورد نیاز برای بوت کردن سیستم و اجرای دستورات در سیستمفایل ریشه است.
- **/media ** : دایرکتوری mount موقت برای دستگاههای جداشدنی (removable devices) ایجاد میشود.
- /mnt : دایرکتوری mount موقت برای mount کردن سیستمفایل.
- /opt : مخفف Optional است. شامل نرمافزارهای کاربردی شخص ثالث (third party) است.
- /proc : یک سیستمفایل مجازی و شبه (pseudo) که حاوی اطلاعاتی درباره فرآیند در حال اجرا با یک ID فرآیند خاص یا همان pid است.
- **/root ** : این دایرکتوری خانگی کاربر root است و هرگز نباید با ‘/‘ اشتباه گرفته شود.
- /run : این دایرکتوری تنها راهکار تمیز برای مشکل early-runtime-dir است.
- /sbin : شامل برنامههای اجرایی باینری مورد نیاز مدیر سیستم برای نگهداری (Maintenance) است.
- /srv : مخفف ‘Service’ است. این دایرکتوری حاوی فایلهای خاص سرور و مربوط به سرویس است.
- /sys : توزیعهای مدرن لینوکس شامل دایرکتوری /sys به عنوان یک سیستمفایل مجازی هستند که امکان ذخیره و اصلاح دستگاههای متصل به سیستم را فراهم میکند.
- **/tmp ** : دایرکتوری موقت سیستم، قابل دسترسی توسط کاربران و root. فایلهای موقت را برای کاربر و سیستم تا بوت بعدی ذخیره میکند.
- /usr : شامل باینریهای اجرایی، مستندات، کد منبع، کتابخانهها برای برنامههای سطح دوم است.
- /var : مخفف variable است. انتظار میرود محتویات این دایرکتوری رشد کند. این دایرکتوری شامل فایلهای log، lock، spool، mail و فایلهای موقت است.
{% hint style="danger" %} تقریباً تمام دایرکتوریهای لینوکس میتوانند یک پارتیشن مجزا باشند، به جز دایرکتوری /etc زیرا حاوی اسکریپتهایی است که در طول فرآیند بوت مورد نیاز هستند، بنابراین باید همراه با پارتیشن / mount شده و در ابتدای فرآیند بوت در دسترس باشد. {% endhint %}
البته صرفاً چون میتوانیم یک دیسک را پارتیشنبندی کنیم به این معنی نیست که باید این کار را انجام دهیم! هر چه پارتیشنهای بیشتری ایجاد کنیم، مدیریت بیشتری لازم است. بنابراین نباید پارتیشنهای اضافی بسازیم مگر اینکه کار اضافی که ایجاد میکنند را ارزشمندتر از محافظتهای اضافی بدانیم که فراهم میکنند.
اگر فضای پارتیشن ریشه تمام شود، سیستم کراش (crash) خواهد کرد. اگر فضای برخی از پارتیشنهای غیر ریشه تمام شود، سیستم بالا میماند و مدیر سیستم میتواند وارد شده و مشکلات را حل کند. بنابراین دایرکتوریهایی مانند /home، /tmp و /var که کاربران میتوانند به راحتی با دانلودها، ایمیل و غیره پر کنند، کاندیداهای اصلی برای پارتیشنهای اضافی هستند. همچنین هر دایرکتوری دیگری که ممکن است رشد کند (دایرکتوریهای مربوط به آپلودهای FTP، فایلهای پایگاه داده و غیره).
اگر فضای پارتیشن حاوی فایلهای لاگ تمام شود، سیستم قادر نخواهد بود هیچ پیام لاگی بنویسد که بتواند به مدیر سیستم کمک کند تا بفهمد چه مشکلی پیش آمده است. از سوی دیگر، برخی خطاهای تکرار شونده سریع (یا حملات) میتوانند باعث شوند فایلهای لاگ خیلی سریع رشد کنند و پارتیشن حاوی آنها را پر کنند. بنابراین دایرکتوری حاوی فایلهای لاگ (معمولاً /var/log)، انتخاب خوبی برای یک پارتیشن مجزا است.
در کل سعی کنید از ساختار دیسک استاندارد توصیه شده توسط فروشنده پیروی کنید، اگر نه، هوشمندانه عمل کنید و پارتیشنبندی را بر اساس نوع سرور و رفتار برنامه(های) خود انجام دهید.
{% hint style="success" %}
یک سکتور مکانی فیزیکی روی یک دیسک فرمت شده است که اطلاعات را نگه میدارد. هنگامی که یک دیسک فرمت میشود، شیارها (حلقههای متحدالمرکز از داخل به بیرون صفحه دیسک) تعریف میشوند. هر شیار به یک برش تقسیم میشود که یک سکتور است. روی هارد درایوها و فلاپیها، هر سکتور میتواند 512 بایت داده را نگه دارد.
از سوی دیگر، یک بلوک (block) گروهی از سکتورها است که سیستمعامل میتواند به آنها آدرسدهی کند (اشاره کند). یک بلوک ممکن است یک سکتور باشد، یا ممکن است چندین سکتور (2، 4، 8 یا حتی 16) باشد. هر چه درایو بزرگتر باشد، سکتورهای بیشتری در یک بلوک قرار میگیرند.
پس چرا بلوکها وجود دارند؟ چرا سیستمعامل مستقیماً به سکتورها اشاره نمیکند؟ زیرا محدودیتهایی در تعداد بلوکها یا آدرسهای درایو وجود دارد که یک سیستمعامل میتواند آدرسدهی کند. با تعریف یک بلوک به عنوان چندین سکتور، یک سیستمعامل میتواند با هارد درایوهای بزرگتر بدون افزایش تعداد آدرسهای بلوک کار کند. {% endhint %}
تا به اینجا در مورد پارتیشنها صحبت کردیم، پارتیشنها خوب هستند اما پارتیشنها اندازه ثابتی دارند و در برخی موارد تغییر اندازه آنها آسان نیست. در یک سرور ما حتی به انعطافپذیری بیشتری نیاز داریم. به همین دلیل LVM اختراع شد.
مدیریت حجم منطقی (Logical Volume Management یا LVM) نوعی مجازیسازی ذخیرهسازی است که به مدیران سیستم رویکردی انعطافپذیرتر برای مدیریت فضای ذخیرهسازی دیسک نسبت به پارتیشنبندی سنتی ارائه میدهد.
LVM سه مفهوم را مدیریت میکند:
- Logical Volumes (LV): یک حجم منطقی معادل مفهومی یک پارتیشن دیسک در یک سیستم غیر LVM است. حجمهای منطقی دستگاههای بلوکی (block devices) هستند که از گسترههای فیزیکی (physical extents) موجود در همان Volume Group ایجاد میشوند. سیستمفایلها روی حجمهای منطقی ساخته میشوند.
- Volume Groups (VG): یک Volume Group مجموعهای از حجمهای منطقی (Logical Volumes) و حجمهای فیزیکی (Physical Volumes) را در یک واحد مدیریتی گرد هم میآورد. Volume group به گسترههای فیزیکی با اندازه ثابت تقسیم میشود.
- Physical Volumes (PV): هر حجم فیزیکی میتواند یک پارتیشن دیسک یا کل دیسک باشد.
LVM مدیریت فضای دیسک را آسانتر میکند. اگر یک سیستمفایل به فضای بیشتری نیاز داشته باشد، میتوان از فضاهای خالی در Volume group مربوطه به حجمهای منطقی آن اضافه کرد و سیستمفایل را به دلخواه تغییر اندازه داد. اگر دیسکی شروع به خرابی کند، دیسک جایگزین میتواند به عنوان یک حجم فیزیکی در Volume group ثبت شود و گسترههای حجمهای منطقی را میتوان بدون از دست دادن داده به دیسک جدید منتقل کرد.
How LVM works?
It works by chunking the physical volumes (PVs) into physical extents (PEs). The PEs are mapped onto logical extents (LEs) which are then pooled into volume groups (VGs). These groups are linked together into logical volumes (LVs) that act as virtual disk partitions and that can be managed as such by using LVM.
{% hint style="danger" %} یک چیز وجود دارد که باید در مورد LVM بدانیم، ما نمیتوانیم کل سرور را در LVM قرار دهیم! زیرا دایرکتوری /boot وجود دارد و دایرکتوری /boot باید در لحظه بوت شدن در دسترس باشد، بنابراین باید از رکورد راه انداز اصلی (یا پارتیشن GUID) قابل مشاهده باشد.
و برای اینکه دایرکتوری /boot در لحظه بوت شدن دیده شود، همیشه باید روی یک پارتیشن سنتی باشد. {% endhint %}
That is all.
.
.
.
.
Sources:
https://www.studytonight.com/operating-system/secondary-storage
https://www2.cs.duke.edu/csl/docs/sysadmin_course/sysadm-30.html
http://www.ntfs.com/hard-disk-basics.htm
https://en.wikipedia.org/wiki/Disk_partitioning
https://www.tldp.org/LDP/sag/html/filesystems.html
https://en.wikipedia.org/wiki/File_system
https://searchstorage.techtarget.com/definition/file-system
https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s1-swap-what-is.html
https://www.linuxtopia.org/online_books/introduction_to_linux/linux_Mount_points.html
https://unix.stackexchange.com/questions/12040/what-mount-points-exist-on-a-typical-linux-system
https://www.tutorialspoint.com/unix/unix-file-system.htm
https://www.howtogeek.com/117435/htg-explains-the-linux-directory-structure-explained/
https://wpollock.com/AUnix1/Partitioning.htm
http://www.alphaurax-computer.com/computer-tips/hard-drive-knowledge-blocks-vs-sectors
https://searchdatacenter.techtarget.com/definition/logical-volume-management-LVM
https://www.thegeekdiary.com/redhat-centos-a-beginners-guide-to-lvm-logical-volume-manager/



