انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: norouzi90 در 05 مهر 1404، 09:53 بظ
-
با سلام و عرض ادب و احترام.
من یک هارد دارم که تمام پارتیشن هایش را حذف کرده ام.
میخواستم یک پارتیشن به ظرفیت ۸۰ گیگا بایت ایجاد کنم ولی میخواهم هر سکتور آن ۵۱۲ بایت باشد.
اگر راهنمایی بفرمایید، ممنون می شوم.
-
سوالهایی میکنید !
براتون از نت چند لینک پیدا کردم که توضیحش میشه این :
- - -
دو موضوع اینجا باید روشن شود:
۱ )
سایز سکتور فیزیکی دیسک → این مقدار را خودِ هارد (Firmware + Hard Disk Controller) تعیین میکند. اگر هارد شما واقعاً native 512 bytes/sector باشد (به آن 512n میگویند) هیچ مشکلی نیست. اما اکثر هاردهای جدید در واقع ۴K physical sector دارند و فقط شبیهسازی میکنند که ۵۱۲ بایت هستند (به آن 512e میگویند).
یعنی با دستورات نرمافزاری شما نمیتوانید یک هارد ۴K را تبدیل به واقعی ۵۱۲ کنید، مگر اینکه سازنده Firmware خاصی داده باشد.
۲ )
پارتیشنبندی و فرمت → این دست شماست. وقتی میخواهید یک پارتیشن ۸۰ گیگ بسازید، کافیست جدول پارتیشن بسازید (GPT یا MBR) و بعد یک پارتیشن ۸۰GB ایجاد کنید. سیستمعامل معمولاً پارتیشنها را بر حسب سکتور ۵۱۲بایتی آدرسدهی میکند (حتی اگر هارد ۴K باشد ولی emulation دارد).
راهکار در لینوکس (فرض بر این است که دیسک /dev/sdX است):
بررسی اندازه سکتور واقعی و منطقی:
sudo fdisk -l /dev/sdX
یاcat /sys/block/sdX/queue/hw_sector_size
cat /sys/block/sdX/queue/logical_block_size
اگر هر دو 512 بود → هارد واقعاً ۵۱۲n است.
اگر یکی 4096 و دیگری 512 بود → یعنی 512e (شبیهسازی).
فرمت پارتیشن:
sudo mkfs.ext4 -b 4096 /dev/sdX1
(اینجا -b برای سایز بلاک سیستمفایل است، ربطی به سکتور ندارد.)
**
سایز سکتور دیسک چیزی نیست که شما بتوانید هنگام ساخت پارتیشن انتخاب کنید. آن چیزی که قابل کنترل است:
block size سیستمفایل (هنگام فرمت کردن).
alignment پارتیشن روی سکتورهای ۴K یا ۵۱۲.
https://www.datacore.com/blog/stories-from-the-bit-shift-or-what-means-512n-vs-512e-vs-4kn-vs-flash-pages/
https://superuser.com/questions/1674318/what-does-512e-4kn-mean-in-a-hard-drive-specification/
-
۱. سکتور (Sector Size) → سختافزاری
پیشفرض همه ابزارهای پارتیشنبندی اینه که واحد آدرسدهی رو بر اساس ۵۱۲ بایت (logical sector) در نظر بگیرن.
حتی روی دیسکهای جدید با سکتور فیزیکی ۴K (512e)، سیستمعامل همچنان پارتیشنها رو به صورت مضربهای ۵۱۲ بایت آدرسدهی میکنه.
یعنی وقتی با fdisk یا parted کار میکنی، اعداد "سکتور" که میبینی معمولاً ۵۱۲ بایتی هستن.
۲. بلاک سیستمفایل (Block Size) → نرمافزاری
وقتی پارتیشن رو فرمت میکنی (مثلاً با ext4 یا NTFS)، اونجا block size پیشفرض معمولاً ۴K هست (نه ۵۱۲).
این هیچ تضادی با سکتور نداره: سیستمفایل میتونه چند سکتور رو یکجا بهعنوان بلوک استفاده کنه.
۳. Alignment
ابزارهای مدرن (مثل parted -a optimal یا gparted یا حتی ویندوز ۷ به بعد) به صورت پیشفرض پارتیشنها رو روی مرز ۱MB شروع میکنن.
چون ۱MB هم مضرب ۵۱۲ هست هم مضرب ۴K، پس هم برای دیسکهای 512n قدیمی و هم برای دیسکهای 512e/4Kn جدید درست کار میکنه.
نتیجه:
پیشفرض پارتیشنبندی بر اساس سکتورهای ۵۱۲ منطقی انجام میشه.
اما این الزاماً به معنی "سکتور واقعی ۵۱۲" نیست (ممکنه 512e باشه).
و سیستمفایل روی اون معمولاً block size بزرگتر (۴K) میذاره.
https://askubuntu.com/questions/641900/how-file-system-block-size-works
-
جناب آقای Chappie ، واقعاً مرا شرمنده فرمودید، خیلی زحمت کشیدید. توضیحاتتان عالی بود.
بعضی وقتها که خودم نمیتوانم به نتیجهای برسم حتی با وجود اینکه به خیلی از صفحات فارسی و انگلیسی و حتی دیگر زبانها بلاجبار در اینترنت سر می زنم، و چیزی پیدا نمیکنم و یا شاید متوجه منظور نویسنده نمیشوم، مجبور میشوم در انجمن مطرح کنم و دوستان را به زحمت بیاندازم.
دقیقاً میدانم که برای هر سطری که دوستان پاسخ میدهند چقدر زحمت می کشند. خلاصه ممنون و سپاسگزارم.
در قسمت بررسی اندازه سکتور واقعی و منطقی سه تا دستور نوشتید، اگر اشتباه نکرده باشم، بنظر میرسد که دستور اول دقیقتر است. اگر به دو عکس ارسالی 1 و 2 من نگاه بکنید، در عکس 1 که از دستور اول استفاده شده است، مشخص میکند که از 4096 استفاده شده است،
ولی در عکس 2 که از دستور دوم و سوم استفاده شده است، هر دو تا عدد 512 را نشان می دهند. که بنظرم همان دستور اولی برای اینکه پی ببریم که سکتور بندی هاردمان به چه نحوی است، کفایت می کند.در هارد من بنظر میرسد با توجه به دستور اولی سکتور واقعی ۵۱۲ نیست و بصورت 512e است.
در صحبتهایتان از واژه native و emulation استفاده نمودید، اگر امکان داشته باشد این دو واژه را که گاهی دوستان بکار میبرند بیشتر برایم توضیح دهید.
-
خلاصه ممنون و سپاسگزارم.
خواهش میکنم , نظر لطفتون هست و امیدوارم که مفید باشه .
- - -
خروجی تصویر اول (fdisk -l /dev/sda)Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
logical = 512 → سیستمعامل با سکتورهای ۵۱۲ بایتی آدرسدهی میکند.
physical = 4096 → سکتور واقعی روی دیسک ۴K است.
این دقیقاً تعریف 512e (512 emulation) هست:
سختافزار سکتور ۴K داره.
سیستمعامل "تظاهر" میکنه که سکتور ۵۱۲ وجود داره.
- - -
خروجی تصویر دوم (/sys/block/...)
hw_sector_size = 512
logical_block_size = 512
اینجا هستهٔ لینوکس مقدارهای سختافزار رو گزارش میکنه، ولی داره همون لایهٔ شبیهسازی (emulation) رو نشون میده.
به همین دلیل هر دو ۵۱۲ دیده میشن.
- - -
بنابراین:
دیسک شما یک 512e drive هست.
سکتور واقعی = ۴۰۹۶ بایت.
سکتور منطقی (آنچه سیستمعامل میبینه) = ۵۱۲ بایت.
پس همون emulation اتفاق افتاده.
- - -
fdisk -l
مستقیم میره از خود هارد (firmware) سؤال میپرسه:
«سکتور واقعیت چند بایته؟ و به سیستمعامل چی نشون میدی؟»
پس میتونه هم logical رو بگه، هم physical رو.
cat /sys/block/...
این فقط چیزی رو نشون میده که کرنل لینوکس الان برای کار کردن با هارد استفاده میکنه.
یعنی همون چیزی که سیستمعامل "میبینه" (logical).
به اطلاعات سختافزاری عمیقتر کاری نداره.
نتیجه
fdisk -l → دقیقتره، چون هم لایهٔ واقعی (physical) رو میگه، هم لایهٔ نمایشی (logical).
/sys/block/... → سادهتره، فقط همون چیزی رو نشون میده که کرنل استفاده میکنه (بیشتر logical).
- - -
این دو واژه native و emulation دقیقاً کلید فهم تفاوت دیسکهای قدیمی (۵۱۲ بایتی) و دیسکهای جدید (۴K) هستند:
Native (بومی / واقعی)
معنی: چیزی که بهصورت واقعی و طبیعی توسط سختافزار پشتیبانی میشود.
مثال در دیسکها:
اگر دیسک واقعاً سکتورهای ۴۰۹۶ بایتی داشته باشد و سیستمعامل هم همان ۴۰۹۶ را ببیند → این میشود 4Kn (4K native).
یا اگر دیسک قدیمی باشد و سکتورهای ۵۱۲ بایتی واقعی داشته باشد → این میشود 512n (512 native).
پس Native یعنی:
«آنچه سیستمعامل میبیند == همان چیزی است که سختافزار واقعاً دارد.»
Emulation (شبیهسازی)
معنی: وقتی سختافزار چیزی را دارد ولی خودش را به شکل دیگری به سیستمعامل معرفی میکند.
در دیسکها:
بیشتر هاردهای مدرن واقعاً سکتور ۴K دارند.
اما برای سازگاری با نرمافزارها و سیستمعاملهای قدیمی، خودشان را به شکل سکتور ۵۱۲ بایتی نشان میدهند.
یعنی دیسک یک سکتور ۴K را به ۸ سکتور مجازی ۵۱۲ بایتی «شبیهسازی» میکند.
به این میگویند: 512e (512 emulation).
-
- - -
بیاین سه حالت رو کنار هم بذاریم:
۱ ) دیسکهای قدیمی (Legacy 512)
واقعاً سکتور ۵۱۲ بایتی دارن (native).
هم خودشون ۵۱۲ هستن، هم به سیستم ۵۱۲ نشون میدن.
اینا مشکل alignment یا افت سرعت خاصی ندارن چون چیزی برای emulate کردن وجود نداره.
پارتیشنبندی هم همون ۵۱۲تایی انجام میشه.
۲ ) دیسکهای جدید «512e» (512 emulated)
واقعیت: سکتور ۴۰۹۶ بایتی دارن (native physical).
نشون میدن: سکتور ۵۱۲ بایتی (logical).
اگر پارتیشن درست روی مرز ۴K align نشه → هر نوشتن کوچک باعث Read-Modify-Write میشه → افت کارایی.
برای همین ابزارهای جدید (مثل fdisk و parted) همیشه پارتیشنها رو به صورت ۱MiB aligned میسازن تا مطمئن باشن روی مرز ۴K میفته.
۳ ) دیسکهای جدید «4Kn» (4K native)
واقعیت: سکتور ۴۰۹۶ بایتی دارن.
نشون میدن: همون ۴۰۹۶ بایت (یعنی هیچ شبیهسازیای وجود نداره).
نرمافزارها/سیستمعاملهای خیلی قدیمی ممکنه باهاش مشکل داشته باشن (چون انتظار دارن همهچیز ۵۱۲ باشه).
پس:
هارد قدیمی واقعاً ۵۱۲ هست → نیازی به نگرانی نیست.
هارد 512e → باید به alignment دقت کنیم.
هارد 4Kn → بهترین کارایی رو میده، ولی فقط روی سیستمعاملهای جدید سازگار.
- - -
Native (واقعی)
یعنی سختافزار همان چیزی است که به سیستمعامل اعلام میکند.
اگر دیسک Native 512 باشه → سکتور واقعاً ۵۱۲ بایتیه و به سیستم هم میگه «من ۵۱۲ هستم».
اگر دیسک Native 4K باشه (4Kn) → سکتور واقعاً ۴۰۹۶ بایتیه و به سیستم هم میگه «من ۴K هستم».
هیچ لایه شبیهسازی (ترجمه) وجود نداره.
عملیات I/O مستقیماً و بیواسطه روی سکتور واقعی انجام میشه.
کارایی بهترین حالتشه.
Emulation (شبیهسازی)
یعنی سختافزار چیزی هست، ولی خودش رو چیز دیگهای نشون میده.
مثال معروف → 512e (512 emulated)
واقعیت: سکتور دیسک ۴۰۹۶ بایت (۴K) هست.
نمایش به سیستم: «من ۵۱۲ بایت هستم» (برای سازگاری با نرمافزارهای قدیمی).
مشکل کجاست؟
وقتی سیستمعامل فکر کنه سکتور ۵۱۲ بایته، ممکنه روی مرزهای ۴K واقعی ننویسه.
یک write کوچک ۵۱۲ بایتی → دیسک مجبور میشه اول کل سکتور ۴K رو بخونه، اون ۵۱۲ رو تغییر بده، بعد دوباره کل ۴K رو بنویسه.
این بهش میگن Read-Modify-Write penalty و باعث افت سرعت میشه.
به همین دلیل در دیسکهای 512e باید alignment پارتیشنها دقیق روی مرز ۴K باشه تا چنین جریمهای نخوره.
خلاصه:
Native = هیچ شبیهسازی وجود نداره، همهچیز واقعی و مستقیمه → کارایی عالی.
Emulation = سختافزار و نرمافزار همدیگه رو «گول میزنن» برای سازگاری → ممکنه افت سرعت بشه.
-
ای کاش توضیحات ساده و زیبا و جامعتان ویکی می شد. یاد آقای دراگون بخیر، ایشان هم با صبر و متانت مینشست پای مشکلات ما، آنقدر مینوشت و توضیح میداد که خودمان خجالت میکشیدیم از آنهمه مهر و مَحبت ایشان ( و همینطور شما دوست عزیز )
پس بنا به توضیحات مفصل شما، برای دستور:
sudo fdisk -l /dev/sda
سه حالت خروجی در حال حاضر میتوانیم داشته باشیم:
حالت اول: عکس 1
Sector size (logical/physical): 512 bytes / 512 bytes
پس logical و physical هر دو عدد 512 bytes میباشند.
به این حالت می گویند: 512native یا 512n
یعنی سکتور واقعی و فیزیکی با سکتوری که سیستم عامل می شناسد، یکی است.
حالت دوم: عکس 2
Sector size (logical/physical): 512 bytes / 4096 bytes
پس logical ، عدد 512 bytes میباشد ولی physical ، عدد 4096 bytes می باشد.
به این حالت می گویند: 512e یا 512emulation
یعنی سکتور واقعی و فیزیکی با سکتوری که سیستم عامل می شناسد، متفاوت است.
به این حالت می گویند: 512e یا 512emulation
حالت سوم:
Sector size (logical/physical): 4096 bytes / 4096 bytes
پس logical و physical هر دو عدد 4096 bytes میباشند.
به این حالت می گویند: 4knative یا 4kn یا 4096native یا 4096n .
یعنی سکتور واقعی و فیزیکی با سکتوری که سیستم عامل می شناسد، یکی است.
ولی چیزی که برایم کمی عجیب است با وجودیکه در هر دو عکس از یک دستور کاملاً مشابه استفاده شده است ولی خروجی کمی متفاوت از هم دارند، در عکس اول که از یک لب تاپ با هارد اس اس دی استفاده کرده ام، اطلاعات بیشتری از جمله Device و Boot و Start و End و … آمده است که این اطلاعات در عکس دوم که مال یک کامپیوتر رومیزی با هارد معمولی و چرخان می باشد، دیده نمی شود!!
-
( و همینطور شما دوست عزیز )
محبت دارید (:
در عکس ۲
وقتی فقط تا Disk identifier نشون داده میشه:
یعنی دیسک پارتیشن نداره یا جدول پارتیشنش پاک/خراب شده.
پس fdisk چیزی برای لیست کردن نداره و خروجی کوتاهتر میشه.
برای مطمئن شدن چند دستور داریم که بعضی وقتا حتی از fdisk -l هم شفافترن:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
sudo blkid
sudo parted -l
-
دیسکهایی که به VM وصل میشن (مثل VirtualBox یا VMware یا QEMU) معمولاً ایمیج فایل هستن (VMDK, VDI, QCOW2, RAW).
اینها ممکنه اصلاً جدول پارتیشن نداشته باشن (مثلاً فقط یک فایلسیستم مستقیم روشون ساخته شده باشه).
توی این حالت fdisk -l بعد از Disk identifier دیگه چیزی نشون نمیده چون پارتیشن وجود نداره.
بعضی ایمیجها موقع ساختن به صورت raw device داده میشن به سیستمعامل مهمان.
یعنی VM فقط یک دیسک خالی میبینه و باید خودت پارتیشن بسازی.
بعضی hypervisorها (مثل QEMU) geometry واقعی دیسک رو شبیهسازی نمیکنن و فقط سایز کلی رو گزارش میدن. برای همین خروجی میتونه کوتاهتر یا متفاوت باشه.
بهترین راه تست اینه که دستور زیر رو بزنی:
lsblk -o NAME,SIZE,TYPE
-
یعنی دیسک پارتیشن نداره
درست گفته بودید. چون ...
من یک هارد دارم که تمام پارتیشن هایش را حذف کرده ام.
-
آنچه باید در نظر داشت
از آنجا که تمامی دیسک های ساخته شده بعد از ژانویه 2011 بصورت 4k سکتور هستند، باید توجه داشت که باید سکتور شروع هر پارتیشن مضربی از 8 (یعنی 8 تا سکتور 512 بایتی باشد). به عبارت دیگر پارتیشنی که در سکتور 2048 شروع می شود aligned است و اگر مثلا در 2044 شروع شود non aligned است.
سیستم عامل های قدیمی تر مانند win xp و win vista pre sp1 نسبت به این قضیه بی اطلاع هستند و باید هنگام ساختن پارتیشن آنها بصورت دستی و با ابزارهای مناسب پارتیشن را ساخت که بصورت aligned باشند. اما سیستم عامل win7 پارتیشن هایی که می سازد aligned است.
در مورد لینوکس ها هم آخرین نسخه های fdisk و parted تفاوت بین physical sector و logical sector را تشخیص می دهند و به کاربر اعلام می کنند. اما مثلا هنگام سوار کردن ubuntu 12.04 در حالت gpt پارتیشن هایی که خود installer ساخت aligned نبود و ما مجبور شدیم دستی و با ابزار gdisk آنها را بصورت مضارب 8 بسازیم.
از همین رو باید در هنگام ساختن پارتیشن در سیستم های راید یا سیستم های قدیمی تر مثل xp تمهیدات لازم برای align بودن پارتیشن را در نظر داشت.
http://xeta.ir/partition-alignment-tutorial/ (http://xeta.ir/partition-alignment-tutorial/)
من میخواستم همین مورد alignment را در مورد توزیعهای لینوکسی ماقبل سال 2011 امتحان کنم و سعی کنم آنها را روی هارد نصب کنم.
ابتدا Linux Mint-2.0.iso را از اینترنت دانلود کردم و بوسیله نرم افزار USB Image Writer به فلش زدم، ولی هنگامیکه کامپیوتر را روشن میکنم، آلارم موجود در عکس 1 را نشان می دهد. نمیدانم چرا این نسخه قدیمی از لینوکس مینت توسط فلش بوت نمی شود؟
بعد iso آنرا به سی دی زدم ولی اینبار بوت شد ولی در مراحل بوت یخ میکند و جلوتر نمی رود. عکس شماره 2 مربوط به آن است.
گفتم که یک چیز قدیمی دیگر امتحان کنم رفتم سراغ gparted-live-0.3.3-5.iso ، اینهم مانند آن لینوکس مینت قدیمی در فلش بوت نشد، بنابراین این را هم به سی دی زدم، این هم بوت شد ولی باز هم در مراحل بوت ماند، عکس هاس 3 و 4 .
؟!!
-
- - -
علت اینکه این توزیعهای خیلی قدیمی (مثل Linux Mint 2.0 یا GParted Live 0.3.3) روی فلش بوت نمیشوند و حتی روی CD هم نصفه متوقف میشوند، اینهاست:
1. عدم پشتیبانی از USB Boot
توزیعهای قدیمی (قبل از سالهای ۲۰۰۸–۲۰۱۰) اصلاً برای بوت از USB طراحی نشده بودند.
خیلی از این ISOها ساختار Hybrid ISO ندارند (یعنی همزمان قابلیت بوت روی CD و USB نداشتند).
به همین دلیل وقتی با ابزارهای جدید روی فلش زده میشوند، سیستم BIOS/UEFI آنها را بوتپذیر نمیشناسد → همون خطای عکس اول.
2. سازگاری سختافزاری قدیمی
کرنل و درایورهای اون دوره، برای سختافزارهای امروزی (بهویژه چیپستهای جدید، کنترلرهای SATA/AHCI، کارتهای گرافیک و USB) اصلاً پشتیبانی ندارند.
نتیجه → مثل عکس دوم و سوم، کرنل بالا میآید ولی هنگام شناسایی دیسک یا گرافیک، گیر میکند.
3. مشکل alignment روی دیسکهای جدید
همونطور که خودت گفتی، بعد از ۲۰۱۱ تقریباً همه دیسکها ۴K physical sector دارند.
توزیعهای قدیمی (مثل Ubuntu 7 یا Mint 2) کلاً این مفهوم رو نمیشناختند و فقط روی دیسکهای ۵۱۲n درست کار میکردند.
وقتی روی هارد امروزی امتحان کنی → ممکنه اصلاً root device شناسایی نشه (خطای عکس سوم).
4. BIOS قدیمی در برابر UEFI
اون زمان فقط BIOS کلاسیک وجود داشت.
خیلی از ISOهای قدیمی حتی فایلهای EFI ندارند.
اگر سیستم میزبان تو UEFI کار میکنه و حالت Legacy/CSM رو فعال نکردی → بوت نمیشه.
نتیجه:
اینکه روی فلش بوت نمیشوند طبیعیست → چون Hybrid ISO نبودند.
اینکه روی CD بالا میآیند ولی گیر میکنند → چون کرنل و درایورها قدیمیاند و سختافزار مدرن رو نمیشناسند.
اگر واقعاً میخوای تست alignment و پارتیشنبندی قدیمی رو ببینی، بهترین راه اینه که:
یا از یک کامپیوتر خیلی قدیمی (قبل از ۲۰۱۰) با دیسک ۵۱۲n استفاده کنی.
یا این ISOها رو داخل یک ماشین مجازی (VirtualBox/VMware/QEMU) اجرا کنی؛ اونجا سختافزار شبیهسازیشده قدیمی هست و راحت بوت میشوند.
- - -
-
با تشکر فراوان از دوست خوبم آقای Chappie .
-
norouzi90
🙏✋