دستور fdisk برای پارتیشنبندی هارد دیسکها استفاده میشود.
نکته: این دستور فقط برای پارتیشنبندی هست و با اون نمیتوان کار فرمت کردن رو انجام داد.
نامگذاری هارد دیسکها
در لینوکس به هر هارد دیسک یک اسم اختصاص داده میشود که به اون دیوایس آدرس (device adress ) گفته میشود که در ادرس dev/ قرار میگیرن مثلا dev/sda/ یا dev/cdrom/ .
دیسک های PATA
این نوع هارد ها توسط کابل Pata به مینبورد متصل میشوند و حد اکثر تا 2 هارد به هر کانکتور می تواند متصل شود که نام گذازی ان ها به صورت hda , hdb,hdcو... است که
هارد اول بر روی کانکتور اول که به عنوان master شناخته میشود دوایس نیم hda و
هارد دوم بر روی کانکتور اول که به عنوان slave شناخته می شود دوایس نیم hdb و
هارد اول بر روی کانکتور دوم به خود hdc و
هارد دوم بر روی کانکتور دوم دوایس نیم hdd رو به خو اختصاص می دهند و به همین شکل ادامه داردکه ب همین خاطر ممکن هست که در نام گذاری هارد های pata بی نظمی پیش بیاد مثلا شما یک هارد به کانکتور اول وصل کردین و یک هارد هم به کانکتور دوم وصل کردین که در این حالت هارد ها به ترتیب hda و hdc نام می گیرند .
دیسک های SATA
دیوایس آدرس هاردهای ساتا و فلش مموریها و کلا تمام واحدهای حافظهای که برای شناساییشون از شبیه ساز SCSi استفاده میشود با *sd شروع میشود که * با حروف انگلیسی جای گذین میشود و نمایانگر یک دیسک مجزا است مثلا sda , sdb,sdc و ... .
حتما الان این سوال پیش میاد براتون که اگر حروف a -z مون تموم شد و رسیدیم به sdz حالا هارد دیسک بعدی چه اسمی به خودش میگیره؟ جواب خیلی سادس اسم هارد دیسک بعد sdz میشه sdaa و بعد از اون sdab, sdac و به همینطور پیش میره و اگر رسیدیم به sdaz هارد بعدی اسمش میشه sdba و به همین شکل ادامه داره.
حالا اگر رسیدیم به sdzz چه میشود؟ من خودم خبر ندارم. جایی هم جوابشو پیدا نتونستم بکنم.
دیسک های SCSI
دیسک های SCSI رو با sata یا دیگر واحد های حافظه که به نام *sd نام گذاری می شدن اشتباه نگیرین . دیسک های scsi به صورت *st و *nst نام گذاری میشوند که * یک عدد از صفر به بالا است .
CD Rom ها و DVD Rom ها به خود نام *scd و *sr رو میگیرن که * یک عدد از صفر به بالا است.
دیگر دوایس ها
پارتیشنهای lvm از طریق پوشه dev/mapper/ در دست رس هستن همچنین ممکن هست که از ادرسdev/GROUP-NAME/ در دست رس باشن که GROUP-NAME اسم گروه مون هست . مثلا پارتیشن با اسم my-lv که عضو گروه speeker هست از این ادرس در دسترس هست: dev/speeker/my-lv/
برای دسترسی به raid هم معمولا به اسم md0, md1, md2 نامگذاری میشن که درdev/md0 , /dev/md1/ قرار میگیرن.
فلاپیها نیز به صورت *fd نامگذاری میشوند که در این جا * عدد هست مثلا fd0, fd1.
پارتیشن بندی یک دیسک
پارتیشن ها توسط ساختمان داده هایی (Partition table) معین میشن که در قسمت خاصی از یک هارد نوشته می شوند . روش های مختلف زیادی برای تعیین ساختار پارتیشن ها وجود دارد که معروف ترین اون ها تا سال 2010 به عنوان Master Boot Record یا به اختصار MBR شناخته میشد که این اسم رو به این خاطر بهش داده بودن که اطلاعات خودش رو در اولین سکتور هارد دیسک ذخیره می کرد . بعد ها GUID Partition Table یا به اختصار GPT معرفی شد که بسیاری از محدودیت های MBR رو نداشت . برای کار با دو پارتیشن تیبل MBR و GPT از نرم افزار های مختلفی استفاده می شود مثلا fdisk فقط قابلیت کار کردن با MBR رو دارد که برای کار با GPT می تونیم از gdisk استفاده کنیم . بعضی از نرم افزار ها مثل parted هم قابلیت کار کدن با هردوی این پارتیشن تیبل هارو دارن .
Maaster Boot Record
در MBR اگر هارد شما از سکتورهای با سایز ۵۱۲ بایت ساخته شده باشد MBR توانایی نگاه داری پارتیشن تا سایز TIB 2 را دارد و اگر از ساختار با سکتور ۴۰۹۶ بایت بهره میبرد تا 16 TIB رو می تواند نگاه دارد. ( یک tebibytes برابر با 2 به توان 40 است ) .
در MBR پارتیشن ها به سه گروه تقسیم میشوند:
- primary: این نوع پارتیشن معمولی ترین نوع پارتیشن است که از این نوع پارتیشن حداکثر چهار تا میتوان داشت (در صورتی که پارتیشن اکستندد نداشته باشیم) و وقتی که ازش چهار تا داخل یک هارد دیسک داشته باشیم دیگر هیچ پارتیشنی نمیتوانیم به هاردمون اضافه کنیم. این نوع پارتیشن عددی بین ۱ الی ۴ رو به خود اختصاص میدهند مثلا اولین پارتیشن primary دوایس نیم sda1 و دومین sda2 رو به خود اختصاص میدن . بی نظمی در نام گذاری پارتیشن های Primary می تونه به وجود بیاد به این صورت که مثلا sda1 و sda3 رو داشته باشیم ولی sda2 رو نداشته باشیم.
- extended: از این نوع پارتیشن فقط یک دونه داخل هاردمون میتونیم داشته باشیم . این نوع پارتیشن در واقع نوع خاصی از پارتیشن primary است با این تفاوت که در دل خود پارتیشن های دیگری (logical) رو جای می دهد .
-
logical: این نوع پارتیشن در داخل پارتیشن اکستندد ساخته میشود همیشه عددی بین ۵ الی ۱۶ رو به خود اختصاص میدهد. در کل از این نوع پارتیشن فقط 12 عدد میتوینم داخل یک پارتیشن اکستندد بسازیم.
نکته: هرگاه از داخل پارتیشن اکستنددمون یک پارتیشن لوجیکال رو پاک کنیم به طوری که اون پارتیشن لوجیکال آخرین پارتیشن لوجیکالمون (مثلا sda16) نباشه :
مثلا پارتیشنهای لوجیکالمون اعدادی بین sda5 الی sda11 رو به خودشون اختصاص دادن، حالا ما میایم پارتیشن sda8 رو پاک میکنیم (پارتیشنی بین sda5 تا sda11) , اتفاقی که میفته این هست که تمام پارتیشنهای لوجیکال بعد از sda8 یک دونه عددشون کم میشه یعنی پارتیشن sda9 میشه sda8 و sda10 میشه sda9 . با انجام این کار دیگه بی نظمی در نام گذاری پارتیشن های logical پیش نمیاد .
همیشه تو هاردمون اگر از پارتیشن تیبل MBR بهره ببریم میتونیم حداکثر فقط ۴ پارتیشن پریماری داشته باشیم و اگر احتیاج به پارتیشنهای بیشتری داشتیم میتونیم ۳ تا پارتیشن پریماری و یک پارتیشن اکستندد بسازیم و داخل پارتیشن اکستندد تا ۱۲ پارتیشن لوجیکال بسازیم که میشه ۳+۱+۱۲=۱۶ (یک اکستندد + ۳ پریماری + ۱۲ لوجیکال = ۱۶ ) .
GUID Partition Table (GPT)
این نوع پارتیشن تیبل توانایی نگاه داری پارتیشن تا سایز 8 ZIB رو دارد و همچنین محدودیت ۱۶ پارتیشن به ۱۲۸ پارتیشن ارتقاء پیدا کرده است که دیگر احتیاج به پارتیشن extended نداریم و همه پارتیشن ها به سبک primary ساخته میشوند. مزیت های بسیار زیاد دیگه هم دارد که چون دستور fdisk فقط از MBR پشتیبانی میکند , دیگه از توضیح بیشتر GPT صرف نظر میکنیم ..
اطلاعات بیشتر در مورد GPT و سیستم عاملهایی که از اون پشتیبانی میکنن: http://en.wikipedia.org/wiki/GUID_Partition_Table
شروع کار با fdisk
نکته: دستور fdisk فقط از پارتیشن تیبل MBR پشتیبانی میکند اگر از GPT یا نوع های دیگری استفاده میکنین از دستور parted می تونین استفاده کنین.
دستور fdisk دو قسمت داره:
۱. قسمت معمولی که آپشنها به همراه دستور مورد استفاده میگیرن.
۲. قسمت اینتراکتیو که در این حالت وارد محیط برنامه میشین .
لیست کردن تمام هاردها به همراه پارتیشنشان به وسیله l-
# fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 Disk identifier: 0x6b953727 Device Boot Start End Blocks Id System /dev/sda1 * 63 126945629 63472783+ 7 HPFS/NTFS/exFAT /dev/sda2 888690688 972675071 41992192 83 Linux /dev/sda3 126949372 888690687 380870658 f W95 Ext'd (LBA) /dev/sda4 972675072 976771071 2048000 82 Linux swap / Solaris /dev/sda5 236054528 888690687 326318080 7 HPFS/NTFS/exFAT /dev/sda6 126961758 166015709 19526976 7 HPFS/NTFS/exFAT /dev/sda7 126949374 126961694 6160+ 83 Linux /dev/sda8 166017758 168065757 1024000 83 Linux Partition table entries are not in disk order
نکته: در هنگام استفاده از آپشن l-
اگر از device name استفاده نکنین تمام پارتیشنهایی که در فایل proc/partitions / هستند رو لیست میکند.
بهدست آوردن حجم پارتیشنها از روی خروجی بالا:
روشهای مختلفی برای بهدست آوردن حجم یک پارتیشن وجود داره که آسونتر هم هستن مثلا استفاده از دستور df برای پارتیشنهای موینت شده یا از دستور parted یا روشهای دیگر.
برای بهدست آوردن حجم پارتیشن به واحد مگابایت تعداد block اون پارتیشن رو در ۱۰۲۴ ضرب کنین و سپس تقسیم بر ۱۰۰۰۰۰۰ کنین. مثلا برای پارتیشن dev/sda2 که تعداد بلاک ها ۴۱۹۹۲۱۹۲ هستش به این شکل حساب میشه:
نکته: blockها در دستور fdisk حجم ۱۰۲۴ بایت رو دارن. بلاکها در دستورات محتلف ممکنه سایز متفاوتی داشته باشند.
در لینوکس هر یک مگابایت رو ۱۰۰۰ کیلوبایت و هر کیلوبایت رو ۱۰۰۰ بایت در نظر میگیرن در حالی که در ویندوز هر مگابایت ۱۰۲۴ کیلوبایت.
1000000/(1024*41992192)
قسمت interactive
برای ورود به این قسمت آدرس دیوایس نیم (device name address) هارد مورد نظرتون رو در ادامه دستور بنویسد.
نکته: فقط آدرس dvice name هاردتون رو بنویسین. اشتباها آدرس dvice name پارتیشنتون رو ننویسین.
در این قسمت برای خروج میتونین از دکمه q یا کلید ترکیبی ctrl+c استفاده کنین.
fdisk /dev/sda Command (m for help):
وقتی وارد محیط اینتراکتیو میشین با زدن دکمه m تمام آپشنهایی که میتونین استفاده کنین نشون داده میشه که توضیح فارسیشون در زیر آمده:
fdisk /dev/sda Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help):
a
: برای بوتیبل کردن یک پارتیشن
b
: به متن انگلیسی در بالا مراجعه کنین
c
: به متن انگلیسی در بالا مراجعه کنین
d
: برای پاک کردن یک پارتیشن (درخواست شماره پارتیشن رو میده)
l
: لیست کردن تمام پارتیشنهایی که fdisk اونها رو میشناسه به همراه id شون.
شاید بپرسین پس پارتیشنهایی مثل *ext یا reiserfs چرا تو لیست نیستن. تمام پارتیشنهای لینوکسی با آیدی 83 شناخته میشن برای همین تو لیست نیستن.
m
: تمام آپشنهایی که قابل استفاده هستن رو نشون میده.
n
: برای اضافه کردن یک پارتیشن (اول نوع پارتیشن رو ازتون میگیره و اگر نوع پارتیشن رو از نوع پریماری انتخاب کنید ازتون شماره ای که میخواین به پارتیشن اختصاص بدین رو هم میگیره)
o
: برای ساخت یک پارتیشن تیبل از نوع dos که اول هیمن آموزش کامل توضیح داده شد. ( حالا چرا ۱ الی ۱۶؟ رو بخونین)
p
: پارتیشن تیبل رو پرینت میگیره که مثل خروجی آپشن l-
در حالت غیر اینتراکتیو هست.
q
: بستن برنامه بدون ذخیره کردن هیچکدام از تغییرات.
s
: برای ساخت sun disklable که باعث میشه تمام پارتیشنهاتون پاک بشه و استاندارد پارتیشن بندیتون به نوع sun تبدیل بشه.
t
: برای تغییر id یک پارتیشن. آیدی یک پارتیشن نشان میدهد که در اون پارتیشن چه نوع فایل سیستمی وجود دارد و یا نوع دسترسی به پارتیشن مثلا hidden بودنش (آپشن l در بالا رو هم مطالعه کنین).
u
: برای تغییر واحدها از سکتور به cylinders.
v
: برای تایید پارتیشن تیبل. اگر فضای خالی باقی مونده باشه مطلعتون میکنه.
w
: برای ذخیره تغییرات و خروج از برنامه. تو استفاده کردن از این یکم محتاط باشین که اگر اشتباه کرده باشین ممکنه به مشکل بخورین.
x
: برای ورود به قسمت آپشن هایه خاص (قسمت آپشنهای خاص تو این آموزش توضیح داده نشده است به غیر از اپشن f)
ساخت یک پارتیشن
برای ساخت یک پارتیشن در هارد مورد نظرتون دستور رو به همراه دیوایس نِیم هاردتون بزنین و سپس از آپشن n
برای ساخت پارتیشن اقدام کنین.
sudo fdisk /dev/sda Command (m for help): n Partition type: p primary (2 primary, 1 extended, 1 free) l logical (numbered from 5) Select (default p):
با زدن آپشن n
از شما نوع پارتیشن رو میپرسه primary یا extended و اگر پارتیشن اکستندد رو از قبل داشته باشین برای primary و logical میپرسه. بعد از تعیین نوع پارتیشن اگر نوع پارتیشن انتخابی شما primary بوده باشه شمارهای که میخاین به اون پارتیشن اختصاص بدین رو هم میپرسه.
Partition type: p primary (2 primary, 1 extended, 1 free) l logical (numbered from 5) Select (default p): p Selected partition 4 First sector (126945630-976773167, default 126945630):
در بالا چون از قبل ۲ پارتیشن پریماری و ۱ پارتیشن اکستندد وجود داشت به صورت خودکار شماره ۴ رو به پارتیشن جدید اختصاص داد.
بعد از تعیین شماره محل شروع پارتیشن رو از شما میخواد.
در بالا رنجی که در اختیار شما قرار داده در واقع شروع و پایان فضای خالی در واحد سکتور است که عدد کوچکتر اولین سکتور فضای خالیمون و عدد بزگتر آخرین سکتور فضای خالیمون است.
شما عدد کوچکتر که همون عدد پیش فرض خودشم هست رو بزنین.
Select (default p): p Selected partition 4 First sector (126945630-976773167, default 126945630): Using default value 126945630 Last sector, +sectors or +size{K,M,G} (126945630-126949371, default 126949371):
بعد از تعیین اولین سکتور از شما مقدار فضایی که میخواین به پارتیشنتون اختصاص بدین رو میپرسه.
محاسبه به واحد سکتور
فضا رو میتونین به واحد سکتور تعیین کنین که برای محاسبه هر یک سکتور رو ۵۱۲ بایت در نظر بگیرین مثلا برای ۲۰ گیگابایت میشه:
۵۱۲/(۱۰۰۰*۱۰۰۰*۱۰۰۰*۲۰) = تعداد سکتور مورد نیاز برای ۲۰ گیگابایت .
۱۰۰۰ اول برای تبدیل گیگابایت به مگابایت و ۱۰۰۰ دوم برای تبدیل مگابایت به کیلوبایت و ۱۰۰۰ سوم برای تبدیل کیلوبایت به بایت و در اخر تقسیم بر 512 می کنیم تا تعداد سکتور به دست بیاد.
تعداد بدست امده رو با عددی که برای شروع پارتیشن دادیم (۱۲۶۹۳۴۳۷۱) جمع میکنیم و واردش میکنیم و سپس اینتر میزنیم و کار تموم میشه.
۱۲۶۹۴۹۳۷۱+۳۹۰۶۲۵۰۰ = ۱۶۶۰۱۱۸۷۱
محاسبه به واحد مگابایت، گیگابایت، کیلوبایت
برای وارد کردن به این صورت به این شکل عمل میکنیم:
+size{K,M,G}
مثلا برای ۲۰ گیگابایت میشه 20G+
بعد از انجام مراحل بالا پارتیشن مورد نظرتون ساخته شده و آپشن w
رو بزنین تا تغییرات ذخیره بشه.
نکته: با زدن دستور w تغییرات ذخیره می شود و کار تمام شده ولی چون پارتیشن تیبل کرنل هنوز اپدیت نشده ممکن هست که تغییرات در خورجی fdisk -l
هنوز نمایان نشود .برای حلش دستور زیر رو بزنین (اموزش دستور تو سایت هستش)
partprobe
این دستور اگر نصب نیست باید نصبش کنین.
پاک کردن یک پارتیشن
برای پاک کردن یک پارتیشن دستور رو به همراه دیوایس نیم هارد مورد نظرتون بزنین و سپس از آپشن d
برای پاک کردن پارتیشن استفاده کنید. سپس شماره پارتیشنی که میخواین پاک کنین رو از شما میخواد و با وارد کردن شماره، پارتیشن پاک میشود. بعد از اتمام کار آپشن w
رو بزنین تا تغییرات ذخیره شود.
نکته: قبل از پاک کردن یک پارتیشن مطمئن بشین که پارتیشنتون موینت نیست.
fdisk /dev/sda Command (m for help): d Partition number (1-6): 6 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 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) Syncing disks.
بعد از اتمام کار یا ریستارت کنین یا از دستور partprobe استفاده کنین.
حل ارور Partition table entries are not in disk order
اگر به خروجی دستور fdisk -l در اول آموزش نگاه کنین میبینین که در آخر خروجیش ارور زیر رو نوشته که میگه ترتیب پارتیشنها به ترتیبی نیست که بر روی هارد دیسک قرار دارن. یعنی مثلا اگر شما روی هاردتون پارتیشنهای sda6,sda7,sda8,sda9 رو داشته باشین ممکنه پارتیشن sda8 قبل از sda7 بر روی هاردتون قرارداشته باشه ولی در این جا از نظر نام گذاری عددش بزرگتر از 7 هست درحالی که باید کوچکتر باشه چون بر روی هارد قبل از sda7 قرار داره.
Partition table entries are not in disk order
این مشکل وقتی پیش میاد که شما پارتیشنهایه logical رو پاک میکنین. مثلا شما sda6 ,sda7, sda8 رو پاک کردین. خب با این عمل همون طور که در اول آموزش توضیح داده شد به صورت خودکار sda9 به sda6 تغییر نام میده و وقتی که شما دوباره یک پارتیشن logiacal میسازین نام اون رو sda7 میگذاره به همینخاطر این ارور رو میده.
برای حلش از آپشن f
در قسمت آپشنهای خاص استفاده میکنیم.
نکته مهم:
۱. اگر داخل فایل etc/fstab/ تنظیماتتون بر اساس دیوایس آدرس پارتیشنها هست اینکار تنظیماتتون رو بهم میزنه و با مشکل مواجه میشین برای جلوگیری از این مشکلات پارتیشنها رو همیشه بر اساس UUID داخل fstab تنظیم کنین.
۲. اگر این کار رو انجام بدین چون دیوایس آدرس پارتیشنها تغییر میکند ممکن هست که بوت لودرتون (GRUB) با تنظیمات جدید سازگار نباشد و مجبور بشین اون رو اپیدت کنین یا از نو نصب کنین .
fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 Disk identifier: 0x6b953727 Device Boot Start End Blocks Id System /dev/sda1 * 63 126945629 63472783+ 7 HPFS/NTFS/exFAT /dev/sda2 888690688 972675071 41992192 83 Linux /dev/sda3 126949372 888690687 380870658 f W95 Ext'd (LBA) /dev/sda5 236054528 888690687 326318080 7 HPFS/NTFS/exFAT Partition table entries are not in disk order aliali@lp:~$ sudo fdisk /dev/sda Command (m for help): p Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 Disk identifier: 0x6b953727 Device Boot Start End Blocks Id System /dev/sda1 * 63 126945629 63472783+ 7 HPFS/NTFS/exFAT /dev/sda2 888690688 972675071 41992192 83 Linux /dev/sda3 126949372 888690687 380870658 f W95 Ext'd (LBA) /dev/sda5 236054528 888690687 326318080 7 HPFS/NTFS/exFAT Partition table entries are not in disk order Command (m for help): x Expert command (m for help): f Done. Expert command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 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) Syncing disks. aliali@lp:~$ sudo fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 Disk identifier: 0x6b953727 Device Boot Start End Blocks Id System /dev/sda1 * 63 126945629 63472783+ 7 HPFS/NTFS/exFAT /dev/sda2 126949372 888690687 380870658 f W95 Ext'd (LBA) /dev/sda3 888690688 972675071 41992192 83 Linux /dev/sda5 236054528 888690687 326318080 7 HPFS/NTFS/exFAT aliali@lp:~$
همونطور که میبینین دیگه اون ارور رو نمیده.
سایت رسمی fdisk: