در ادامه آموزش Lpic 1 لینوکس می خواهیم به ساخت پارتیشن ها و فایل سیستم ها در لینوکس بپردازیم، ما قبلا درباره سیستم بوت در لینوکس و معرفی فایل سیستم در لینوکس صحبت کرده ایم، پیشنهاد میکنم قبل از این که این مطلب را ادامه دهید نگاهی هم به تو پست گفته شده داشته باشید.
Block Device (بلاک دیوایس) چیست؟
به دستگاه هایی که در حوزه ذخیره سازی اطلاعات کار می کنند Block Device گفته می شود و به دستگاه هایی مثل Keyboard ، پورت های Serial ، پرینتر ها و … که کارکردشان و نحوه انتقال دیتا در آن ها بصورت کاراکتر به کاراکتر است Character Device گفته می شود. اگر بخواهیم مثالی از Block Device ها بزنیم میتوانیم به هارد دیسک ها ، فلش درایو ها ، نوار های مغناطیسی و از این قبیل دستگاه ها اشاره کنیم. Block Device ها بصورت کلی به دستگاه هایی گفته می شود که بوسیله استفاده از Buffer های بلوک بلوک شده File system از Buffer cache که توسط کرنل سیستم عامل تامین می شود می توانند عملیات I//O انجام دهند.
برای دیدن Block Device (بلاک دیوایس) های سیستم از دستور زیر می توان استفاده کرد:
$ ls -l /dev/loop1 /dev/sd[a-z]
brw-rw---- 1 root disk 7, 1 Jan 8 10:46 /dev/loop1
brw-rw---- 1 root disk 8, 0 Jan 8 10:46 /dev/sda
نکته ای که وجود دارد، حرف b نشان دهنده Block Device بودن آن می باشد.
دستور Fdisk برای ساخت پارتیشن و پارتیشن بندی هارد در لینوکس
Fdisk مخفف “fixed disk” یا “format disk” است و یکی از رایج ترین ابزارهای خط فرمان مدیریت دیسک برای سیستم های linux/unix میباشد. با کمک دستور fdisk و با استفاده از اینترفیس کاربر پسند، شما میتوانید پارتیشن های روی یک هارد درایو را مشاهده، ایجاد، تغییر سایز، حذف، تغییر، فرمت، کپی و انتقال دهید.
Fdisk به منظور ایجاد فضا برای پارتیشن های جدید، مدیریت فضا برای درایورهای جدید، سازماندهی مجدد یک درایو قدیمی و کپی یا انتقال دیتا به دیسک های جدید بسیار مفید است. این ابزاربا توجه به سایز هارد دیسکی که روی سیستم تان دارید به شما امکان ایجاد حداکثر 4 پارتیشن جدید Primary و تعددای پارتیشن های logical (پارتیشن extended) را میدهد.
شما باید با کاربر root لاگین باشید تا بتوانید دستور fdisk را اجرا کنید در غیر اینصورت شما خطای “command not found” را دریافت خواهید کرد.
هشدار : تا زمانیکه نمیدانید دقیقا باید چکار کنید، پارتیشن ها را ایجاد، حذف یا تغییر ندهید. در صورتی که تسلط کافی بر روی دستورات ندارید پیشنهاد میشود از ابزارهای گرافیکی مانند GParted برای ساخت پارتیشن و دیگر موارد استفاده کنید.
نمایش همه پارتیشن های دیسک در لینوکس
کامند ابتدایی زیر تمامی پارتیشن های موجود روی دیسک سیستم تان را لیست میکند. آپشن -l (مخفف listing all partitions) برای نمایش تمامی پارتیشن های موجود روی لینوکس استفاده میشود. پارتیشن ها با نام دیوایس شان نمایش داده میشوند به طور مثال /dev/sda & /dev/sdb یا /dev/sdc
root@funlife:~# fdisk -l /dev/sda
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
چند نکته:
- ستون boot از زمان dos روی سیستم عامل ها باقی مونده و پارتیشنی که بوت روی آن قرار دارد را نمایش می دهد، امروزه لینوکس از چیزهای دیگری مثل LILO و GRUB برای بوت شدن استفاده می کند.
- ID شماره 82 مال swap بوده و 83 مال خود لینوکس
برای شروع خود دستور fdisk را اجرا می کنیم و برای راهنمایی دستور m را میزنیم:
root@funlife:~# 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): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
برای این که پارتیشن ها را ببینیم از دستور p استفاده میکنیم:
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
برای مثال اگر بخواهیم یک پارتیشن را پاک کنیم از کاراکتر d استفاده می کنیم:
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
Command (m for help): d
Partition number (1-3,5,6, default 6): 1
Partition 1 has been deleted.
نکته ای که وجود دارد همانطور که خود نرم افزار می گوید، تمام تغییرات شما در مموری ذخیره می شود تا زمانی که آن ها بنویسید (write کنید)
برای ساخت پارتیشن جدید از کاراکتر n استفاده می کنیم، سپس از ما Partition type را می خواهد که قبلا درباره آن ها صحت کرده ایم، در مرحله بعد شماره پارتیشن و شروع سکتور را می پرسد که بسته به نیاز تغییر می دهیم در غیر این صورت اینتر کرده و از پیشفرض خود سیستم استفاده می کنیم.
در مرحله بعد Last sector را می خواهد که شما می توانید یا عدد سکتور را بدهید و یا با مثلا +15G
یک سایز به کیلوبایت ، مگابایت ، گیگابایت ، ترابایت و یا پتابایت بدهید.
حال یک پارتیشن با type لینوکس ساخته می شود.
Command (m for help): n
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): p
Partition number (1,4, default 1): 1
First sector (2048-625142447, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-43094015, default 43094015): +15G
Created a new partition 1 of type 'Linux' and of size 15 GiB.
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 31459327 31457280 15G 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
شما به راحتی می توانید با کاراکتر t نسخه یا Type یک پارتیشن را تغییر دهید، در مثال زیر ما پارتیشن مورد نظر را به fat32 تغییر می دهیم.
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 31459327 31457280 15G 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
Command (m for help): t
Partition number (1-3,5,6, default 6): 1
Hex code (type L to list all codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
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 31459327 31457280 15G 82 Linux swap / Solaris
/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
همانطور که قبلا هم گفتیم تمام این کارها در مموری ذخیره می شود تا زمانی که شما آن را write کنید، برای این کار اول با کاراکتر v تمام این موارد را verify می کنیم:
Command (m for help): v
Remaining 11639159 unallocated 512-byte sectors.
و بعد با کاراکتر w آن را write می کنیم:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
نکته ای که وجود دارد این است که تغییرات بعد از reboot سیستم اعمال می شود.
انواع فرمت های پارتیشن لینوکس
لینوکس بیش از 100 نوع فرمت را برای ساخت پارتیشن و پارتیشن بندی پشتیبانی می کند، ما در زیر چند مورد از موارد معروف را آورده ایم:
Format | Description |
---|---|
ext2 و 3 ext3 و ext4 | برای نمونه ext2, ext3, ext4 یک فایل سیستم بالانس و مناسب برای همه کاری می باشد البته مناسب جاهایی که شما فایل های بسیار کم حجم در تعداد زیاد دارید نمی باشد. Extended Filesystem یا فایل سیستم توسعه یافته که با اختلاف زیادی، محبوب ترین فایل سیستم لینوکس است. EXT 2/3/4 در طول این سال ها امتحان خود را پس داده و شکی در آن نیست که فایل سیستم پایدار و قابل اطمینانی است. تمام ویژگی های کرنل لینوکس مثل quota، خصوصیات POSIX و ACL را پشتیبانی می کند. بنابراین هنوز هم فایل سیستم با دوامی برای دسکتاپ و سرور محسوب می شود، ولی به هر حال، هیچ برنامه ای برای توسعه نسل جدید فایل سیستم EXT4 وجود ندارد. موسسان لینوکس هم به حمایت از Btrfs به عنوان نسل بعدی فایل سیستم اجرایی در لینوکس پرداخته اند. |
ReiserFS | ReiserFS برعکس ext مناسب فایل هایی با حجم کم می باشد. |
XFS |
XFS مناسب فایل هایی با حجم بسیار بالا می باشد به طوری که میتوان یک پارتیشن با 8 اگزابایت ایجاد کرد. گزینه ی پیشنهادی لینوکس ردهت، پس از نسخه ی ۷ این توزیع فایل سیستم XFS است. این فایل سیستم، سابقه خوبی در ابرکامپیوترها و سرورها دارد و اولین بار در سیستم عامل IRIX در سال 1994 معرفی شد. اما استفاده از آن بدون دردسر هم نیست. عمده ترین مشکل آن نبود checksum داده یا ECC است که باعث می شود اطلاعاتتان در معرض خرابی قرار بگیرد، بدون آن که از بروز اشکال مطلع شوید. از طرف دیگر bit rot باعث ایجاد مشکلاتی می شود مانند عدم فشرده سازی transparent، نبود امکان shrink یک درایو و یا گرفتن snapshot از درایو بدون ابزار اضافی و freezing I/O، که این ها حداقل نگرانی هایتان خواهد بود. با وجود این ضعف ها، XFS به خاطر بهره بردن از parallel i/o بهینه سازی شده، به عنوان فایل سیستمی بسیار پایدار و سریع شناخته می شود و اگر بتوانید از نقص هایش صرف نظر کنید، به گزینه ای قابل اطمینان تبدیل خواهد شد. اما اگر از سخت افزاری معمولی استفاده می کنید، بهتر است گزینه ای را انتخاب کنید که مانند موارد دیگر این لیست، از بی عیب و نقص بودن اطلاعات تان هم محافظت نماید. |
swap | یک فضای ذخیره سازی مجازی که در صورت نبود مموری جای آن را می گیرد |
vfat | همون fat32 هست و مشکلی که دارد permissions و symbolic links را پشتیبانی نمی کند |
برای فرمت کردن از دستورات mkfs و mkswap استفاده می کنیم که با دستور زیر می توانید ببینید چه فرمت هایی را برای استفاده در دسترس دارید:
root@funlife:~# ls /sbin/mk*
/sbin/mkdosfs /sbin/mkfs /sbin/mkfs.cramfs /sbin/mkfs.ext3 /sbin/mkfs.ext4dev /sbin/mkfs.minix /sbin/mkfs.ntfs /sbin/mkhomedir_helper /sbin/mkswap
/sbin/mke2fs /sbin/mkfs.bfs /sbin/mkfs.ext2 /sbin/mkfs.ext4 /sbin/mkfs.fat /sbin/mkfs.msdos /sbin/mkfs.vfat /sbin/mkntfs
سوئیچ اصلی برای این کار type- یا t- می باشد:
root@funlife:~# mkfs -t ext3 /dev/sda1
mke2fs 1.42.10 (18-May-2014)
/dev/sda1 contains a ext4 file system
last mounted on /mnt on Mon Dec 22 12:04:22 2014
Proceed anyway? (y,n) y
Creating filesystem with 5386496 4k blocks and 1349040 inodes
Filesystem UUID: 0b5aad86-b507-41b9-a0ff-cf899cb92785
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
همچنین در اینجا با سوئیچ L و یک اسم می توانید یک lable برای پارتیشن خود مثلا پارتیشن Film قرار دهید و برای دیدن این lable و همچنین UUID پارتیشن از دستور زیر استفاده می کنیم:
$ blkid /dev/sda1
/dev/sda1: LABEL="Film" UUID="59d8cbdb-0e78-4605-8aaf-cf02fcb85d2e" SEC_TYPE="ext2" TYPE="ext3"
GPT در لینوکس
تفاوت GPT و MBR چیست ؟
MBR یا (Master Boot Record): استاندارد MBR نخستین بار در سال 1983 و همراه با DOS 2.0 معرفی شد. این عبارت از سرواژههای Master Boot Record گرفته شده است و علت این نامگذاری هم آن است که MBR یک بخش ویژه برای بوت است که در ابتدای یک درایو قرار میگیرد. این بخش حاوی یک boot loader برای سیستم عامل نصب شده و اطلاعاتی در مورد پارتیشنهای منطقی درایو است. boot loader هم یک کد کوتاه است که بوت لودر بزرگتر را از یک پارتیشن دیگر روی درایو لود میکند. اگر ویندوز شما روی سیستم نصب است بیتهای نخستین بوت لودر ویندوز در این بخش قرار دارند و به همین دلیل است که در زمان اور رایت ویندوز ممکن است که نیاز به رفع ایرادات MBR پیدا کنید و ویندوز شما بوت نشود. اگر سیستم عامل شما از نوع لینوکسی است GRUB Boot Loader عمدتا در MBR قرار دارد.
استاندارد MBR روی دیسکهایی تا ظرفیت دو ترابایت قابل اجرا است و امکان مدیریت دیسکهایی با ظرفیت بیش از 2 ترابایت را ندارد. لازم به ذکر است که استاندارد MBR تنها از 4 پارتیشن اولیه پشتیبانی میکند و در صورت نیاز به تعداد بیشتر لازم است که یکی از پارتیشنهای خود را تحت عنوان extended partition بسازید و پارتیشنهای منطقی خود را در داخل آن ایجاد نمایید.
GPT یا (GUID Partition Table): استاندارد جدیدی است که به تدریج جای MBR را میگیرد. این سیستم محدودیتهای MBR را ندارد و درایوهای شما میتوانند به مراتب بزرگتر باشند و محدودیت ظرفیت آنها نیز به سیستم عامل و سیستم پرونده یا فایل سیستم آنها بستگی دارد. با استفاده از استاندارد GPT میتوان تعداد نامحدودی پارتیشن را ایجاد نمود و محدودیتی که در اینجا با آن روبرو خواهید بود سیستم عامل شماست و دیگر نیازی به ایجاد پارتیشن از نوع Extended نخواهید داشت.
در دیسکهای MBR دادههای مربوط به پارتیشنبندی و بوت در یک موقعیت ذخیره میشوند و چنانچه این دادهها اور رایت یا مخدوش شوند به دردسر بزرگی خواهید افتاد. در مقابل GPT نسخههای متعددی از این دادهها را روی دیسک ذخیره میکند و به همین دلیل اطمینانپذیری بالاتری داشته و در صورت وارد آمدن آسیب به دیسک میتوان آنها را بازیابی کرد. اما در سیستم MBR هیج راهی برای تشخیص اینکه به دادههای سیستم آسیب رسیده است یا خیر وجود ندارد و تنها در زمان بوت شدن سیستم متوجه میشوید که سیستم با مشکل روبروست و پارتیشنهای درایو شما ناپدید شدهاند.
تفاوت های مهم MBR و GPT:
- MBR حداکثر 4 پارتیشن PRIMARY را ساپورت می کند اما GPT تا 128 پارتیشن PRIMARY را ساپورت می کند.
- MBR حداکثر 2 ترابایت فضا را ساپورت می کند اما GPT تا 19 میلیون ترابایت فضا را ساپورت می کند.
- MBR بحث REDUNDANCY ندارد اما GPT دارد.
با استفاده از دستور gdisk در لینوکس می توانید ببینید از MBR استفاده می کنید یا GPT و این که اگر لازم است به فرمت دیگر تغییر دهید:
root@funlife:~# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.8
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
ساخت پارتیشن های مختلف
در زیر هم چند مثال برای ساخت پارتیشن های مختلف برای شما قرار داده ایم:
Partition | Format type | Sample Command | Notes |
---|---|---|---|
/dev/sda3 | ext4 | mkfs -t ext4 -L data /dev/sda3 |
Named it dafa. Or use the mkfs.ext4 command |
/dev/sdb2 | xfs | mkfs -t xfs -i size=512 /dev/sdb2 |
telling it to have larger inodes (normal is 256) |
/dev/sda8 | ReiserFS | mkfs -t reiserfs /dev/sda8 |
Or you can use mkreiserfs command. |
/dev/sdc | FAT32 | mkfs -t vfat /dev/sdc |
Or you can use mkfs.vfat command |
/dev/sda2 | swap | mkswap /dev/sda2 |
will be used as swap space |