View Full Version : نحوه فرمت كردن و ايجاد فايل سيستم
m-taheri
شنبه 06 خرداد 1391, 18:14 عصر
با سلام.
نميدونم سوالمو جاي درستي مطرح كردم يا نه
من ميخوام بدونم كه وقتي يه درايو رو (هارد يا فلاپي -يا فلش مموري و يا sd-card) را فرمت ميكنيم دقيقا چه اتفاقي ميوفته؟
ظاهرا توي سكتور 0 يه سري اطلاعات نوشته ميشه. آيا كسي ميدونه دقيقا چه چيزائي و توي چه آدرسهائي نوشته ميشه؟ آيا بقيه قسمتها دست نخورده باقي ميمونه؟
آيا وقتي يه حافظه bootable هست اطلاعات بوت هم در همين سكتور 0 نوشته ميشه؟
و اينكه اگر ما يك سيستم بدون سيستم عامل داشته باشيم آيا باز هم ميشه توي سكتور 0 هارد چيزي(مثلا اطلاعات مربوط به بوت) نوشت؟
MostafaMohammadi
شنبه 06 خرداد 1391, 21:56 عصر
نميدونم سوالمو جاي درستي مطرح كردم يا نهجای درستی مطرح نکردید، واقعیت اینه که این سوال نه تنها ربطی به زبان برنامه نویسی اسمبلی نداره، بلکه هیچ کدوم از تالارهای دیگه سایت برنامه نویس برای مطرح کردن چنین سوالی جای مناسبی نیست.
ولی متاسفانه جای دیگه ای هم تو وب فارسی سراغ ندارم که این سوال رو بپرسید. من جواب سوالات تون رو نمی دونم ولی مطمئن ام اگه ایمیل یه استاد "بدرد بخور" ذخیره و بازیابی اطلاعات یا مفاهیم سیستم عامل گیر رو بیاری، می تونه بهتر راهنمایی ات کنه.
در هر صورت، من سعی می کنم با وجود پایین بودن سطح دانش ام کمک ات کنم.
من ميخوام بدونم كه وقتي يه درايو رو (هارد يا فلاپي -يا فلش مموري و يا sd-card) را فرمت ميكنيم دقيقا چه اتفاقي ميوفته؟یه هارد درایو، فلاپی و ... هایی که هنوز پارتیشن بندی نشده اند (بگو پارتیشن بندی، نگو فرمت) اولین سکتور شون Boot Sector است. وقتی پارتیشن بندی میشن اولین سکتور میشه Master Boot Record و Boot Sector منتقل میشه به اولین سکتور هر پارتیشن.
ظاهرا توي سكتور 0 يه سري اطلاعات نوشته ميشه. آيا كسي ميدونه دقيقا چه چيزائي و توي چه آدرسهائي نوشته ميشه؟ آيا بقيه قسمتها دست نخورده باقي ميمونه؟
فرمت های مختلف اطلاعات توی سکتورهای اولیه شون متفاوته. مثلا توی FAT از خونه اولی یعنی 0x000 تا سه بایت، دستور مربوط به پرش ذخیره میشه. اینکه نرم افزاری که می خوایم باهاش بوت کنیم توی چه درایوی است و از چه آدرسی فراخوانی میشه. خونه بعدی یعنی 0x003 تا 8 بایت توضیح میده که Device مون تو چه محیطی پارتیشن بندی شده، ویندوز 98، 2000 و ...
خونه بعدی یعنی 0x00B الی آخر حاوی اطلاعات اولیه مورد نیاز BIOS است، که بسته به نرم افزار مورد نظر فرق می کنه و اگه من بخوام بگم چی هستند، باید 100 صفحه چیز میز بنویسم.
این رویه ادامه داره تا چیزی حدود 11 بایت، بعد یه فضای رزرو شده هست، بعد پارتیشن ها شروع میشن. من میدونم سر پارتیشن و ته پارتیشن اطلاعاتی مربوط به پارتیشن رو می نویسن، یه گپی هم معمولا بین دوتا پارتیشن میزارن.
آيا وقتي يه حافظه bootable هست اطلاعات بوت هم در همين سكتور 0 نوشته ميشه؟
بله دقیقا
و اينكه اگر ما يك سيستم بدون سيستم عامل داشته باشيم آيا باز هم ميشه توي سكتور 0 هارد چيزي(مثلا اطلاعات مربوط به بوت) نوشت؟
وقتی چیزی داخل هارد نباشه که باهاش سیستم رو بوت کنیم، نباید بنویسیم. البته اگه بنویسیم خطای خاصی رخ نمیده، فوق اش میره به اون آدرس و می گه هیچ نرم افزار boot able ای پیدا نکردم و ... مثل وقت هایی که ویندوز ایکس پی می پره، یا درایو سی مون فرمت میشه.
m-taheri
یک شنبه 07 خرداد 1391, 13:26 عصر
خیلی ممنون از راهنمائیتون بسیار خوبتون استاد عزیر.
فقط یه سوال دیگه هم دارم. من اگر بخوام یک رم موبایل رو. مثلا یه micro sd 1GB رو با fat 16 فرمت کنم باید تو سکتور 0 چه چیزائی بنویسم؟ (البته من یه sdcard را با fat16 و با ویندوز فرمت کردم و بعد سکتور 0 رو از روش خوندم و 512 بایت بدست آمده را توی یه فایل txt ذخیره کردم. و حالا وقتی این 512 بایت رو روی هر sdcard دیگه میریزم دقیقا انگار که اونو فرمت کردیم ) البته من هیچ نیازی به bootable بودن و یا دستور پرش ندارم. فقط میخوام با fat16 فرمت بشه. در واقع میخوام بدونم وقتی با ویندوز یه sdcard رو فرمت میکنیم ویندوز چه کاری انجام میده؟
و در نهایت تفاوت quick format , format و low level format چیه؟
xman_1365_x
یک شنبه 07 خرداد 1391, 14:14 عصر
سوال رو جای درستی مطرح کردین اما بهتر بود در بخش سیستم عامل باشه،کتاب فیض ا... خاکپور - جلد دوم - فصل 15 عملیات دیسک رو مطالعه کنید به جواب سوال هاتون میرسید.
موفق باشی
ssbostan
یک شنبه 07 خرداد 1391, 19:25 عصر
با سلام.
نميدونم سوالمو جاي درستي مطرح كردم يا نه
من ميخوام بدونم كه وقتي يه درايو رو (هارد يا فلاپي -يا فلش مموري و يا sd-card) را فرمت ميكنيم دقيقا چه اتفاقي ميوفته؟
ظاهرا توي سكتور 0 يه سري اطلاعات نوشته ميشه. آيا كسي ميدونه دقيقا چه چيزائي و توي چه آدرسهائي نوشته ميشه؟ آيا بقيه قسمتها دست نخورده باقي ميمونه؟
آيا وقتي يه حافظه bootable هست اطلاعات بوت هم در همين سكتور 0 نوشته ميشه؟
و اينكه اگر ما يك سيستم بدون سيستم عامل داشته باشيم آيا باز هم ميشه توي سكتور 0 هارد چيزي(مثلا اطلاعات مربوط به بوت) نوشت؟
سلام؛
در مورد شماره گذاري سكتور ها بايد توجه كنيد كه شماره بندي سكتور ها از 1 شروع ميشه و در تمامي رسانه ها اولين sector از اولين track از اولين cylinder از اولين head به Master Boot Record معروف هست و اين فضا كه بسته به نوع رسانه حجم هاي متغيري داره، براي نگهداري bootloader و partition allocation table استفاده ميشه.
اين سكتور كه حجمي برابر با ديگر سكتور ها داره معمولا 512 بايت هست كه از اين 512 بايت، 64 بايت مروبط به جدول تخصيص پارتيشن يا همون partition allocation table هست.
اين 64 بايت به 4 تا 16 بايت تقسيم ميشه و دليل اينكه شما بيشتر از 4 پارتيشن اوليه نميتونيد داشته باشيد همين موضوع هست.
در مورد پارتيشن هاي توسعه يافته يا همان extended نيز اين موضوع صدق ميكنه و شما با ايجاد يك پارتيشن extended در اصل 16 بايت از جدول تخصيص پارتيشن رو اشغال ميكنيد و اين 16 بايت براي مشخص كردن پارتيشن هاي منطقي يا logical به نقطه اي ديگر از رسانه اشاره ميكنه كه به اين بخش در اصطلاح extended boot record گفته ميشه.
فكر كنم تا اينجا جواب بعضي از سوال هايي كه براتون پيش اومده و پيش خواهد اومد رو گرفته باشيد. در مورد سوال هاي ديگه اي كه مطرح كرديد هم مطالب كوتاهي رو براتون مينويسم كه يك ديد كلي از سكتور MBR بدست بياريد.
اطلاعات مربوط به بوت و بوت لودر هم ميتونن در MBR نوشته بشن، هم ميتونن در اولين سكتور پارتيشن بوت يا first sector of boot partition نوشته بشن.
بله، امكانش هست شما بدون داشتن سيستم عامل، در سكتور 1 اطلاعات دلخواه رو ذخيره كنيد.
اطلاعات مروبط به هر فايل سيستم متفاوت هست و ترتيب نوشته شدنشون در اون 16 بيت هم معمولا متفاوت هست.
- شماره پارتيشن
- نوع پارتيشن (اوليه يا توسعه يافته)
- شماره head
- شماره cylinder
- شماره سكتور شروع
- شماره سكتور پايان
و...
در مورد فرمت كردن هم:
فرمت معمولي: در اين نوع فرمت اطلاعات مروبط به آدرس فايل ها و راهنما ها نيز از روي پارتيشن حذف ميشن.
فرمت سريع: در اين نوع فرمت فقط جدول تخصيص فضا حذف ميشه.
فرمت سطح پايين: در اين نوع تمامي محتواي سكتور ها با صفر مقدار دهي ميشه و MBR مجددا تجديد ميشه، در اين نوع فرمت بايد از نرم افزار مخصوص ارائه شده توسط شركت توليد كننده رسانه استفاده كنيد.
موفق باشيد.
m-taheri
یک شنبه 07 خرداد 1391, 21:36 عصر
سوال رو جای درستی مطرح کردین اما بهتر بود در بخش سیستم عامل باشه،کتاب فیض ا... خاکپور - جلد دوم - فصل 15 عملیات دیسک رو مطالعه کنید به جواب سوال هاتون میرسید.
موفق باشی
مرسی. فقط این کتاب که فرمودید اسمش چیه دقیقا؟
xman_1365_x
یک شنبه 07 خرداد 1391, 23:14 عصر
فقط این کتاب که فرمودید اسمش چیه دقیقا؟
برنامه نویسی به زبان اسمبلی برای کامپیوتر های شخصی
موفق باشید
ssbostan
یک شنبه 07 خرداد 1391, 23:33 عصر
سلام مجدد؛
در مورد فايل سيستم هاي مايكروسافت ساختاري كه براتون نوشتم كاربرد داره و تمام فايل سيستم هاي مايكروسافت طبق اين ساختار پياده سازي ميشن.
يك نمونه تعريف پارتيشن هم براتون مثال زدم، اگر متوجه نشديد بگيد بيشتر توضيح بدم.
; Master Boot Record
; 000 - 1BD 446 byte for bootloader.
; 1BE - 1CD 16 byte for primary partition 1.
; 1CE - 1DD 16 byte for primary partition 2.
; 1DE - 1ED 16 byte for primary partition 3.
; 1EE - 1FD 16 byte for primary partition 4.
; 1FE - 1FF 2 byte for BRS (55h, AAh).
; Microsoft Partition Structure
; 1 byte for partition status. (p_s)
; 1 byte for beginning head. (p_b_h)
; 1 word for beginning cylinder/sector. (p_b_c)
; 1 byte for partition type. (p_t)
; 1 byte for end head. (p_e_h)
; 1 word for end cylinder/sector. (p_e_c)
; 1 dword for number of sector between partition and MBR. (p_s_m)
; 1 dword for number of sector in partition. (p_s_n)
; = p1 ===========================
p_s db 80h
p_b_h db 00h
p_b_c dw 0002h
p_t db 04h
p_e_h db 00h
p_e_c dw 000ah
p_s_m dd 00000001h
p_s_n dd 00000009h
; = p1 ===========================
موفق باشيد.
m-taheri
دوشنبه 08 خرداد 1391, 09:50 صبح
اين مطالبي كه گفتيد رو دقيقا متوجه شدم. ممنون از راهنمائيتون .
توي اين 512 بايت ما ميتونيم تعيين كنيم كه پارتيشن هاي هارد از چه آدرس تا چه آدرسي ادامه داره - ولي بازم چند تا سوال برام
1- من بازم متوجه نشدم كه اطلاعات مربوط به fat16 و يا fat32 كجا قرار ميگيره
2- سيستم عامل از كجا متوجه ميشه كه يك هارد داراي چند پارتيشن است؟
3 - آيا bootable بودن يك پارتيشن از partition status آن مشخص ميشود؟
4 - در مورد حافظه هاي فلش كه داراي سيلندر و هد نيستند چطور اطلاعات يك پارتيشن را مشخص كنيم؟
ssbostan
دوشنبه 08 خرداد 1391, 19:23 عصر
اين مطالبي كه گفتيد رو دقيقا متوجه شدم. ممنون از راهنمائيتون .
توي اين 512 بايت ما ميتونيم تعيين كنيم كه پارتيشن هاي هارد از چه آدرس تا چه آدرسي ادامه داره - ولي بازم چند تا سوال برام
1- من بازم متوجه نشدم كه اطلاعات مربوط به fat16 و يا fat32 كجا قرار ميگيره
2- سيستم عامل از كجا متوجه ميشه كه يك هارد داراي چند پارتيشن است؟
3 - آيا bootable بودن يك پارتيشن از partition status آن مشخص ميشود؟
4 - در مورد حافظه هاي فلش كه داراي سيلندر و هد نيستند چطور اطلاعات يك پارتيشن را مشخص كنيم؟
اطلاعات اوليه براي مشخص كردن تعداد پارتيشن ها در سكتور 1 ذخيره ميشه، سيستم عامل 64 بايت اين سكتور رو ميخونه و ميفهمه كه چندتا پارتيشن داريم، طبق توضيحاتي كه قبلا دادم بيشتر از 4 تا نميتونه باشه.
براي مشخص كردن ديگر پارتيشن ها پس از خواندن سكتور 1، سيستم عامل به سكتور شروع هر پارتيشن مراجعه ميكنه، اگر اطلاعات درون سكتور، مربوط به EBR باشه متوجه ميشه كه اين پارتيشن از نوع توسعه يافته هست و از طريق pointer هايي كه تعريف شده به اطلاعات پارتيشن هاي منطقي دسترسي پيدا ميكنه.
خلاصه مطلب اين هست كه سكتور 1 براي معرفي پارتيشن ها به صورت كلي در نظر گرفته شده و اطلاعات كامل در مورد هر پارتيشن، سيستم فايل و... در اولين سكتور شروع پارتيشن ذخيره ميشه.
partition status مشخص ميكنه كه كدوم پارتيشن به صورت Active در نظر گرفته شده و اطلاعات مربوط به BRS سكتور 1 كه دو بايت هست اگر با BRS پارتيشن Active برابر باشه، سيستم اطلاعات بوت رو از اون پارتيشن دريافت ميكنه.
حافظه هاي فلش از صفحه بندي استفاده ميكنند، اما هنگام دسترسي، سيستم ديدي همانند يك ديسك داراي head, cylinder, track با اونها برخورد ميكنه.
موفق باشيد.
m-taheri
چهارشنبه 10 خرداد 1391, 16:27 عصر
ممنون و متشکر
حالا من اگر بخوام یک sd-card را با fat16 و یا fat32 فرمت کنم. باید اول اون رو پارتیشن بندی کنم و اطلاعات مربوط به پارتیشن ها رو توی سکتور 1 بنویسم و سپس اطلاعات مربوط به fat16 را در سکتور یک از اولین پارتیشن بنویسم؟
و اینکه برای fat16 باید دقیقا چه چیزی بنویسیم؟
ssbostan
چهارشنبه 10 خرداد 1391, 19:46 عصر
بله، بايد اطلاعات پارتيشن ها رو در سكتور يك ذخيره كنيد و در سكتور شروع هر پارتيشن براي fat16 اين اطلاعات رو ذخيره كنيد.
00h Jump Code + NOP 3 Bytes
03h OEM Name 8 Bytes
0Bh Bytes Per Sector 1 Word
0Dh Sectors Per Cluster 1 Byte
0Eh Reserved Sectors 1 Word
10h Number of Copies of FAT 1 Byte
11h Maximum Root Directory Entries 1 Word
13h Number of Sectors in Partition Smaller than 32MB 1 Word
15h Media Descriptor (F8h for Hard Disks) 1 Byte
16h Sectors Per FAT 1 Word
18h Sectors Per Track 1 Word
1Ah Number of Heads 1 Word
1Ch Number of Hidden Sectors in Partition 1 Double Word
20h Number of Sectors in Partition 1 Double Word
24h Logical Drive Number of Partition 1 Word
26h Extended Signature (29h) 1 Byte
27h Serial Number of Partition 1 Double Word
2Bh Volume Name of Partition 11 Bytes
36h FAT Name (FAT16) 8 Bytes
3Eh Executable Code 448 Bytes
1FEh Executable Marker (55h AAh) 2 Bytes
موفق باشيد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.