7. Технически детайли

(Допринесено от Randall Hopper, )

Тази секция се опитва да ви даде достатъчно начална информация относно вашите твърди дискове и стартиращият процес, така че да се справите с повечето проблеми, които може да възникнат, когато се опитате да стартирате няколко операционни системи. Започва с доста основни термини, така че може би ще искате да слезете надолу в тази секция, докато започне да ви изглежда непознато и тогава да почнете с четенето.

7.1. Начална информация за диска

Три основни термина се използват за описване мястото на данните върхи твърдият ви диск: Цилиндри (Cylinders), Глави (Heads) и Сектори (Sectors). Не е особено важно да знаете с какво са свързани тези термини, освен това, че заедно, те определят къде физически са данните на твърдият ви диск.

Вашият диск има специфичен номер цилиндри, номер глави и номер сектори за цилиндър-глава [цилиндър-глава се знае и като звено (track)]. Заедно, тази информация дефинира ``геометрията на физическия диск'' за вашият твърд диск. Обикновенно има 512 байта (bytes) на сектор и 63 на звено, броя цилиндри и глави варира широко от диск за диск. Така може да разберете броя байтове, който ще се побере на вашият диск чрез пресмятане:

(# на цилиндри) × (# глави) × (63 сектора/звено) × (512 байта/сектор)

Например, на моя 1.6 GB Western Digital AC31600 EIDE твърд диск се получава:

(3148 цилиндъра) × (16 глави) × (63 сектора/звено) × (512 байта/сектор)

което е 1,624,670,208 байта, или около 1.6 GB.

Можете да разберете физичната геометрия на диска (номера цилиндри, глави и броя сектори/звена) за вашият твърд диск чрез ATAID, или други програми в мрежата. Вашият твърд диск най-вероятно е дошъл с тази информация. Все пак внимавайте: ако използвате BIOS LBA (виж Section 7.3), не може да ползвате просто някоя програма за да разберете физичната геометрия. Това е така, защото много програми (пр. MSD.EXE или fdisk на FreeBSD) не могат да идентифицират физичната геометрия на диска; вместо това, те дават сведения за преведената геометрия (виртуални числа от използването на LBA). По-нататък ще разберете какво означава това.

Още едно полезно нещо относно тези термини. При 3 числа--номер на цилиндър, номер на глава и номер на сектор-в-звено--можете да идентифицирате специфичен абсолютен сектор (блок от данни, голям 512 байта) на вашият диск. Цилиндрите и Главите са номерирани от 0 нагоре, а Секторите са номерирани от 1 нагоре.

За тези, които се интересуват от още технически детайли, информация за геометрията на диска, стартиращи (boot) сектори, BIOS-и и т.н. може да бъде намерена навсякъде из мрежата. Запитайте Lycos, Yahoo и т.н. за boot sector или master boot record. Заедно с полезната информация, ще намерите и пакета документи How It Works на Hale Landis. Вижте секцията Section 6 за някои насоки към този пакет.

Добре, достатъчно терминология. Говорим за стартиране тук.

7.2. Процеса на стартиране

На първият сектор, на вашият диск (Цилиндър 0, Глава 0, Сектор 1) живее Главният Стартиращ Запис (Master Boot Record, MBR). Той съдържа карта на вашият диск. Идентифицира до 4 дяла , всеки от които, свързано парче от този диск. FreeBSD нарича дяловете парчета (slices) за да се избегне объркването със собствените си дялове, но тук няма да правим така. Всеки дял може да съдържа собствена операционна система.

Всеки запис за дял в MBR има ID на дяла (Partition ID), Стартиращ Цилиндър/Глава/Сектор и Краен Цилиндър/Глава/Сектор. ID на дяла казва какъв вид е дяла (каква OS), а Старт/Край казва къде е. Table 1 показва списък повърхностен списък на някой често срещани ID на дялове.

Table 1. ID на дялове

ID (hex) Описание
01 Главен DOS12 (12-битов FAT)
04 Главен DOS16 (16-битов FAT)
05 Разширен DOS
06 Главен голям DOS (> 32MB)
0A OS/2
83 Linux (EXT2FS)
A5 FreeBSD, NetBSD, 386BSD (UFS)

Забележете, че не всички дялове са стартиращи (пр. Разширен DOS). Някои са--други не. Това, което прави дяла стартиращ, е конфигурацията на Стартиращият Сектор на Дяла (Partition Boot Sector), който съществува в началото на всеки дял.

Когато конфигурирате любимият ви стартиращ мениджър, той гледа записите в дяловите таблици на MBR за всичките ви твърди дискове и ви позволява да наименувате записите в този списък. После, когато стартирате, стартиращият мениджър е извикан от специален код в Главният Стартиращ Сектор на първият проучен твърд диск, на вашата система. Гледа в записите на дяловата таблица на MBR отговарящ на избора на дяла, който сте направили, използва информацията на Стартиращият Цилиндър/Глава/Сектор за този дял, зарежда Стартиращият Сектор на Дяла за този дял, и му дава контрол. Този Стартиращ Сектор за дяла, сам по себе си съдържа достатъчно информация за да започне зареждането на операционната система на този дял.

Нещо, което минахме преди и е важно да се знае. Всички ваши дискове имат MBR. Все пак, този, който е важен, е първият, който е проучен от BIOS. Ако имате само IDE твърди дискове, то е първият IDE диск (пр. основният (primary) диск на първият контролер). Подобно е и за SCSI системите. Ако имате заедно IDE и SCSI твърди дискове, обикновенно BIOS първо проучва IDE диска, така че първият IDE диск е първият изучен диск. Стартиращият мениджър, който ще инсталирате, ще се закачи в MBR на този първи изучен диск, който току-що описахме.

7.3. Ограничения и педупреждения при стартирането

Сега, интересните неща, за които трябва да внимавате.

7.3.1. Страшният лимит за 1024-тият цилиндър и как помага BIOS LBA.

Първата част от стартиращият процес се извършва чрез BIOS (ако това е нов термин за вас, BIOS представлява софтуерен чип на вашата дънна платка, който предотставя стартиращ код за вашият компютър). Като такава, тази първа част от процеса е тема относно ограниченията интерфейса на BIOS.

Интерфейсът на BIOS, използван за четене на твърдият диск през този период (INT 13H, Subfunction 2) разпределя 10 бита към Номера на Цилиндъра, 8 бита към Номера на Главата и 6 бита към Номера на Сектора. Това ограничава потребителите на този интерфейс (пр. стартиращи мениджъри закачени в MBR на вашият диск, както и зареждачи на OS, закачени в Стартиращите Сектори) до следните лимити:

  • 1024 цилиндъра, макс

  • 256 глави, макс

  • 64 сектора/звено, макс (всъщност 63, 0 не е достъпно)

Сега големите твърди дискове имат много цилиндри, но не и много глави, така че неизменимо с големи твърди дискове, броя цилиндри е по-голям от 1024. Предотставено така, и чрез интерфейса на BIOS, не можете просто да стартирате където и да е на вашият твърд диск. Стартиращият код (стартиращият мениджър и зареждача на OS, закачени във всички Стартиращи Сектори на стартиращите дялове) трябва да пребивава под 1024-тият цилиндър. Всъщност, ако вашият твърд диск е обикновен и има 16 глави, това се равнява на:

1024 цил/диск × 16 глави/диск × 63 сект/(цил-глава) × 512 байта/сектор

което е около, често споменавания, лимит от 528MB.

Тук е мястото, където идва BIOS LBA (Logical Block Addressing). BIOS LBA дава на потребителя на BIOS API обажданията, достъп до физически цилиндри над 1024, въпреки интерфейса на BIOS, чрез предефиниране на цилиндър. Това е, прави нова карта на вашите цилиндри и глави, правейки ги да се появят през BIOS, въпреки, че диска има по-малко цилиндри и повече глави, отколкото са всъщност. С други думи, възползва се от факта, че твърдите дискове имат относително малко глави и много цилиндри, като подвига баланса между броя цилиндри и броя глави, така че и двата броя да са под гореспоменатите лимити (1024 цилиндъра, 256 глави).

С BIOS LBA, ограничението на твърдият диск, за големината, е виртуално отстранена (е, поне качена до 8 гигабайта). Ако имате LBA BIOS, можете да сложите FreeBSD, или всяка OS където поискате и да не достигнете ограничението на 1024-тият цилиндър.

Като използвам отново моят 1.6GB Western Digital за пример, неговата физична геометрия е:

(3148 цил, 16 глави, 63 сектора/звено, 512 байта/сектор)

Както и да е, моят BIOS LBA прави нова карта на това на:

(787 цил, 64 глави, 63 сектора/звено, 512 байта/сектор)

давайки същата ефективна големина на диска, но броя цилиндри и глави е в обхвата на BIOS API (по случайност, имам заедно Linux и FreeBSD, използващи един от твърдите ми дискове, над 1024-тият физически цилиндър, и двете операционни системи се стартират добре, благодарение на BIOS LBA).

7.3.2. Стартиращи Мениджъри и Дисково Разпределение

Още нещо, за което трябва да гледате, когато инсталирате стартиращи мениджъри, е разпределението на място за вашият стартиращ мениджър. По-добре е да мислите за това предварително, за да си спесите преинсталацията на една или повече, от вашите OS.

Ако сте следели дискусията в Section 7.2 относно Главният Стартиращ Сектор (където е MBR), Стартиращият Сектор на Дяла и стартиращият процес, може да се чудите къде ще живее точно стартиращият мениджър на вашият твърд диск. Е, някои стартиращи мениджъри са достатъчно малки за да се съберат изцяло в Главния Стартиращ Сектор (Цилиндър 0, Глава 0, Сектор 0) заедно с таблицата за дяловете. Други се нуждаят от малко повече място и всъщност разширяват няколко сектора след Главният Стартиращ Сектор в звено Цилиндър 0 Глава 0, това е типично свободно...типично.

Уловката е такава. Някои операционни системи (включително FreeBSD) ви позволяват, ако поискате, да пуснете техните дялове точно след Главният Стартиращ Сектор на Цилиндър 0, Глава 0, Сектор 2. Всъщност, ако дадете на sysinstall-а на FreeBSD диск с празен къс отпред, или цял празен диск, по подразбиране там ще се стартира и FreeBSD. (поне стана, когато аз попаднах в този капан). После, когато инсталирате вашият стартиращ мениджър, ако е такъв, че да окупира няколко сектора отгоре след MBR, ще презапише началото на данните за първият дял. В случая на FreeBSD се презаписва името на диска, и прави вашият FreeBSD дял така, че да не може да се стартира.

Лесният начин да избегнете този проблем (и да си оставите възможността по-късно да използвате различни стартиращи мениджъри) е да оставяте винаги първото пълно звено на диска ви неразпределено (unallocated), когато разделяте диска си. Това означава да оставите място от Цилиндър 0, Глава 0, Сектор 2 през Цилиндър 0, Глава 0, Сектор 63 неразBпределено и да стартирате вашият първи дял в Цилиндър 0, Глава 1, Сектор 1. Когато създавате дялове на DOS в началото на вашият диск, DOS оставя това място по подразбиране отворено (заради това някои стартиращи мениджъри предполагат, че е свободно). Така че създаване на DOS дял в началото на диска ви, също избягва този проблем. Аз обичам да правя така, да създам 1MB DOS дял отпред, защото също така избягва главните букви на DOS дисковете да се изместят след ново разпределение на дяловете.

За справка, следните стартиращи мениджъри използват Главният Стартиращ Сектор за да запазят техният код и данни:

  • OS-BS 1.35

  • Boot Easy

  • LILO

Тези стартиращи мениджъри използват няколко допълнителни сектора след Главният Стартиращ Сектор:

  • OS-BS 2.0 Beta 8 (sectors 2-5)

  • OS/2's boot manager

7.3.3. А ако машината ви не се стартира?

Понякога, когато инсталирате стартиращи мениджъри, може да оставите MBR в състояние, в което машината ви няма да може да се стартира. Това е рядко срещано, но възможно, когато използвате отновно fdisk върху вече инсталиран стартиращ мениджър.

Ако имате стартиращ DOS дял на диска ви, можете да пуснете DOS флопи дискета, и изпълните:

A:\> FDISK /MBR

за да сложите оригиналният, прост стартиращ код на DOS обратно в системата. После можете да стартирате DOS (и само DOS) от твърдият диск. Алтернативно, просто пуснете отново инсталационната програма на стартиращият ви мениджър от стартиращо флопи (bootable floppy).

Този и други документи можете да намерите в ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

За въпроси отностно FreeBSD, прочетете документацията преди да попитате в <questions@FreeBSD.org>.
За въпроси отностно този документ, e-mail <doc@FreeBSD.org>.