Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Завантажники в Linux

  1. LILO (LInux LOader)
  2. GRUB (GRand Unified Bootloader)
  3. установка завантажувача

Знайшов стару статтю, так як багато питань думаю зайвою не буде.

Спочатку давайте поговоримо про процес завантаження ОС і зокрема місці завантажувача при цьому і трохи розвіємо помилки, як правило виникають на цей рахунок. Дійсно користуючись однією операційною системою якось не замислюєшся про те як це після включення живлення вона завантажується. Знання більшості користувачів на цьому етапі обмежуються словом BIOS. А далі що? Ну пройшов тест POST потім завантажилася BIOS в якій зазначено з якого диска необхідно завантажуватися і що відразу win.com завантажується. А ось і ні. Точніше не всі відразу так відбувається.

Щоб була можливість завантажитися з диска він повинен містити так званий MBR (Master Boot Record) який розташовується завжди в одному і тому ж місці, тому що BIOS передає керування сюди (не шукав ж його по всьому диску парне слово). Це місце знаходиться в першому секторі жорсткого диска (а якщо зовсім чесно то в нульовому). І займає цей самий MBR всього то 512 б. Але і це не все, складається він з трьох розділів. Другий за розташуванням розділ, називається Partition Table займає 64 б і складається з чотирьох записів в кожній з яких описується геометрія первинних розділів диска (перший і останній циліндр займаний даним розділом), тому до речі на диску може бути не більше чотирьох первинних розділів, а також тип файлової системи розділу і один біт займає ознака активності розділу тобто можливості використання даного розділу для завантаження. Для любителів наочності привожу опис даної структури MBR:

struct partition {

char active;

char begin [3];

char type;

char end [3];

int start;

int length

};

Ця запис до речі стандартна для всіх операційних системах і навіть Microsoft не ризикує відходити від нього.

Останні два байта сектора займає так званий Magic Number призначений для перевірки чи є даний сектор завантажувальним. Ну а перші 446 байт займає так цікавить нас програма-завантажувач. Кожен первинний розділ отформатірований під файлову систему FAT містить також запис на початку розміром один сектор (512 байт) звану вже Boot Record (до речі розширені (extended) розділи містять також свій запис. Так ось у всіх ОС сімейства Windows 9x (і ДОС) програма- завантажувач розташована в MBR просто передає управління у ланцюжку первинного розділу позначеного як активний, який свою чергу завантажує необхідну програму для запуску системи. Але більшості систем відведених 512 байт замало буде для розташування всіх інструкцій необ одим для нормального завантаження. Тому в завантажувальний сектор поміщаються деякі інструкції необхідні для запуску первинного завантажника ОС. Такий завантажувач може бути ще корисний для вибору різних параметрів завантаження ядра (однокористувальницький режим, аварійний і т.д.) і ще один варіант використання завантажувача - можливість установки декількох операційних систем на комп'ютері користувача і природно вибору необхідної в процесі завантаження комп'ютера. Ось ми і підійшли власне до завантажувач або менеджерам завантаження як іноді називають подібні програми.

По викладеним вище причин для завантаження Linux і застосовуються завантажувачі. Найпопулярнішими, на мій погляд, є LILO і Grub (про них і піде мова далі), хоча існують і інші наприклад ASPLoader є штатним в ASPLinux (два роки не ставив можу і помилятися) або Loadlin - невеликий завантажувач дозволяє завантажити Linux з під ДОС , використовувати його зручно тільки в критичній ситуації коли немає більше способів завантажити Linux. Ну і плюс syslinux \ isolinux.

LILO (LInux LOader)

І так почнемо по старшинству. Менеджер завантаження LILO (LInux LOader) підтримує більшість файлових систем які можуть зустрітися на комп'ютері користувача.

Хорошим тоном є створення окремого розділу / boot з файлової системою ext2 з якого і завантажиться Linux.

При своїй роботі LILO зчитує вихідні дані з конфігураційного файлу /etc/lilo.conf. Даний файл як і більшість є звичайним текстовим тобто що дозволяє для редагування використовувати простий текстовий редактор. Складається файл як би з двох розділів спочатку описуються загальні параметри роботи LILO, а потім йдуть розділи описують операційні системи і містять специфічну інформацію необхідну для їх завантаження (максимум 16 варіантів). Приклад файлу /etc/lilo.conf:

prompt # включає введення запрошення при завантаженні без очікування будь-яких натискань клавіш

timeout = 50 # час очікування 5 сек.

default = linux # мітка ОС завантажується за замовчуванням, якщо її немає то буде завантажуватися ядро записане першим

boot = / dev / hda # сектор жорсткого диска куди встановлено LILO в даному випадку це MBR першого IDE диска

map = / boot / map # розташування map-файла з описами ядер

install = / boot / boot.b # файл для використання в якості нового загрузочногосектора

backup = / boot / boot.NNNN # файл куди копіюється оригінальний завантажувального сектора

message = / boot / message # задає файл, що містять повідомлення яке відображається перед запрошенням завантаження, максимальний обсяг 65536, символ FF очищає екран

vga = normal # задає текстовий режим VGA, який буде встановлений під час завантаження, в даному випадку нормальний режим 80 × 25

verbose = 5 # максимальний рівень діагностики

l inear # генерація адреси лінійного сектора замість адреси сектор / головка / циліндр

image = / boot / vmlinuz-2.6.18-3 # файл або пристрій, що містить образ ядра Linux

label = linux # ім'я яке використовує завантажувач для ідентифікації образу ядра (мітки повинні бути різні і додатково можливе використання псевдоніма для образу alias = Not_Windows, наприклад)

read-only # говорить, що коренева файлова системи повинна бути змонтована тільки для читання

root = / dev / hda5 # задає пристрій яке буде монтуватися як коренева файлова система. Якщо дана опція опущена, то буде використовуватися значення в образі ядра

other = / dev / hda2 # інша система для завантаження

optional # пропускає образ ядра якщо він не доступний в момент створення карти диска

label = Windows

Це найбільш часто використовувані опції і як ви повинні розуміти далеко не всі. При завантаженні можливо передати при необхідності ряд аргументів ядру. Таких як реальне значення оперативної пам'яті (append = "mem = 64M») якщо система не виявляє всю, що дуже часто буває зі старими дистрибутивами або прописати новий пристрій коли воно автоматично не виявляється, що часто відбувається з ISA девайсами або в інших випадках (наприклад , append = »hdc = ide-scsi» для емуляції SCSI пристрої необхідної для роботи CD-RW). Сама напевно поширена помилка яку дуже часто допускають при конфігуруванні файлу /etc/lilo.conf - використання параметра default який не вказує ні на одну з міток образів. Це може відбуватися наприклад у такій ситуації. Захотілося вам наприклад змінити мітку linux (див. Приклад файлу), на яку то більш інформативну, наприклад label = Mandriva. І все. Тепер при завантаженні системи ви отримаєте щось на зразок цього - Fatal: No images have been defined or default image does not exist . Хоча начебто нічого поганого і не зробили. І ще після того як ви відредагували файл конфігурації, зміни ще не вступили в силу. Для цього необхідно перезаписати lilo командою / sbin / lilo -v 5 (v 5 параметр необов'язковий, він застосовується для найбільшої інформативності того що власне кажучи відбуватиметься на жорсткому диску). І ще така команда стане в нагоді після чергового перевстановлення Windows яка завжди перезаписує MBR (природно якщо LILO записаний туди) не сильно хвилюючись про те, що там може бути щось корисне. До речі творці KDE тут трохи підсобили користувачеві.

Тепер коли всі операції проведені при черговій завантаженні системи вас буде зустрічати запрошення (LILO :). При натисканні Enter завантажиться система прописана за замовчуванням, для перегляду доступних варіантів натисніть Tab. Часто для вирішення проблем є необхідність завантажиться в режимі одного (рівень запуску системи 1), для цього наберіть після запрошення lilo single. Але от невдача, користувач скористався цією командою автоматично отримує права root, що на безпеці системи в цілому позитивно, як ви розумієте, не позначається. Для того щоб перешкодити цьому необхідно захистити LILO паролем (password = пароль), а для того щоб самому не набирати його кожного разу при завантаженні системи додайте параметр restricted і тепер пароль буде необхідний тільки при завданні параметрів завантаження в командному рядку тобто як раз в нашому випадку. Цікаво, що при запрошення тобто літери LILO виводяться після проходження будь-якого етапу завантаження і тому якщо завантажиться не вийшло то замість рядка запрошення ви побачите тільки від однієї до трьох букв. Тому якщо виникне якась проблемма, то по числу букв, які надрукуються на дисплеї можна визначити причину цієї проблеми. Мені найбільш часто доводилося спостерігати дві і один раз навіть три букви.

LI-якщо на екрані надрукувати тільки дві літери - то причина в розбіжності описаної геометрії диска з наявною або в що файл /etc/lilo/boot.b був переміщений без перезапуску програми переконфігурації геометрії диска. А швидше за все через те, що ви видалили розділ з Linux і не відновили MBR перед цим або за допомогою Partition Magic створили ще один розділ перед кореневим і тепер система не може його знайти.

LIL - в цьому випадку проблема швидше за все полягає в апаратній помилку або в розбіжності описаної і фактичної геометрії диска.

За LILO мабуть все, інше можна знайти в документації, скажу тільки щоб його видалити скористайтеся командою / sbin / lilo - u, якщо хочете скористатися іншим конфігураційним файл не переписуючи старий, то вкажіть його назву (і шлях) скориставшись опцією -C.

GRUB (GRand Unified Bootloader)

Наступний цікавий для нас завантажувач GRUB (GRand Unified Bootloader) більш сучасну технологію. Давайте по порядку. У 1995 році при розробці ядра Hurd, стало питання як його власне кажучи завантажувати то. Але тут треба віддати належне вони (розробники) надійшли не стандартно. Замість того щоб завантажувати ядро Hurd як то по своєму, була запропонована Multiboot Specification - специфікацію дозволяє завантажувати систему універсальним (єдиним) чином. Для систем чиї виробники не бажали створювати продукт сумісний з даною специфікацією (спробуйте вгадати) була збережена схема їх завантаженні послідовно «по ланцюжку». А в 1999 GRUB офіційно приєднався до проекту GNU, з усіма наслідками, що випливають звідси наслідками (додалися прихильники бажаючі допомогти, що позитивно вплинуло на функціональності всього пакета). І з десь 2000 року виробники почали включати GRUB в свої дистрибутиви, спочатку обережно, пропонуючи просто в якості альтернативи, а потім вже як основного завантажувача за замовчуванням. А в даний час в інтернент вже чути навіть розмови про GRUB'e як про стандарт. Що ж такого особливого в GRUB:

  • Завантаження ядер систем сумісних з Multiboot Specification (FreeBSD, NetBSD, OpenBSD та GNU / Linux), підтримка завантаження по ланцюжку (Windows 9x / NT / 2000 / XP)
  • Підтримка більшості файлових систем (DOS FAT і FAT32, Linux ext2fs і ext3fs, Minix fs, BSD ffs, ReiserFS, VSTa fs і XFS)
  • Підтримка більшості форматів здійсненних файлів
  • Підтримка завантажуваних модулів
  • Підтримка автоматичної розпакування архівів
  • Незалежність від геометрії диска тобто при переході до іншого диску не потрібно внесення змін в конфігурації.
  • Автоматичне визначення підтримки LBA (Logical Block Address) режиму
  • Визначення всієї доступної оперативної пам'яті
  • Підтримка бездискових станцій і віддалених терміналів

Особливо хотілося б виділити, то що привернуло до нього користувачів - це простота інтерфейсу для вибору необхідної операційної системи. Хоча зараз LILO теж може працювати з графічним інтерфейсом, але до GRUB ще далеко. Плюс до всього у GRUB зручний для редагування конфігураційний файл. Знаходиться він в каталозі / boot / grub і називається grub.conf. Приблизний зміст якого таке:

# Boot = / dev / hda

default = 0

fallback = 1

timeout = 10

splashimage = (hd0,4) /boot/grub/splash.xpm.gz

title Red Hat Linux (2.4.18-3)

root (hd0,4)

kernel /boot/vmlinuz-2.6.18-3 ro root = / dev / hda5

initrd /boot/initrd-2.6.18-3.img

title windows

rootnoverify (hd0,1)

c hainloader +1

Параметр default показує яка система (точніше мітка позначена title) завантажується за замовчуванням, якщо завантаження по-замовчуванням не вийшла з якихось причин завантажиться система позначена як fallback. Закоментувавши параметр boot вказує куди буде встановлений завантажувач, місце для установки зручно задавати в командному рядку тому можна не чіпати цю можливість. Timeout вказує час очікування введення команди або вибору іншої операційної системи. Параметр splashimage вказує який малюнок буде використаний як фон, це повинен бути зазіпірований xpm малюнок з роздільною здатністю 640 × 480 і з 14 палітрою кольорів. Також зверніть увагу на те як позначаються розділи дисків. Ім'я пристрою повинна бути укладена в круглі дужки, перша цифра позначає номер диска в системі, а друга розділ на диску (починаючи з нуля). У прикладі для файлу зображення - це перший жорсткий диск (він у мене єдиний (нульовий)) і п'ятий розділ на ньому (вважаючи з боку MBR) - hda5 по Linux'овскі. Параметр rootnoverify вказує на кореневий розділ системи, але який не вимагає монтування (для ОС Windows для цього просто немає необхідності). А «chainloader +1» необхідний для систем які не підтримують Multiboot Specification для «цепочечной» їх завантаження. Іноді цим параметром може передувати директива makeactive, для того щоб зробити даний розділ «активним», наприклад якщо вас попало встановити Windows туди куди його творці не могли й подумати, що хтось наважиться це зробити, наприклад в розширений розділ жорсткого диска або у вас , кілька Windows'ов. Для цієї ж мети також можуть знадобитися команди hide і unhide дозволяють приховати будь-якої розділ жорсткого диска на час завантаження. наприклад:

hide (hd0,0)

unhide (hd0,1)

rootnoverify (hd0,1)

makeactive

chainloader +1

Інші параметри я думаю очевидні. Як вже говорилося за допомогою GRUB можна завантажити і FreeBSD (варіант з GRUB мені здається найбільш симпатичним), для того щоб це зробити додайте в файл наступні рядки:

title FreeBSD 6.2

root (hd0,2, a)

kernel / boot / loader

З позначенням дисків в даному прикладі ті кому треба розберуться самі, а для інших щоб не зупинятися на цьому зараз, повернемося до цього питання як-небудь потім. Для того щоб завантажити Windows з другого жорсткого диска (а вона цього робити чомусь не вміє) застосовується техніка свопіювання дисків для цього в потрібному пункті просто необхідно прописати щось на зразок цього:

map (hd0) (hd1)

map (hd1) (hd0)

І тепер система буде думати, що вона вантажиться з першого жорсткого диска.

Щоб встановити GRUB скористайтеся командою

$ Sudo / sbin / grub-install / dev / hda

Це для запису в MBR. І якщо все пройшло благополучно отримаєте повідомлення «Installation finished. No error reported »і скрипт виведе карту пристроїв. Але на відміну від LILO перевстановлювати GRUB при зміні конфігураційного файлу не потрібно.

При завантаженні системи можна як і в LILO передати змінити деякі параметри в командному рядку, це менш очевидно тому GRUB має графічний інтерфейс. Здійснити все це дуже просто. Так для того щоб відредагувати послідовність команд виконуваних при завантаженні тієї чи іншої системи, перемістіть, при появі меню GRUB, на потрібну позицію курсор і натисніть 'e' (edit), для того щоб передати (змінити) аргументи передаються ядру натисніть 'a' ( add). А ось при натисканні 'c' (command) відбудеться найцікавіше, а потрапите ви в командний режим роботи з GRUB. У цьому режимі за допомогою bash-подібного командного інтерфейсу можна виконати безліч різних операцій які можуть знадобитися для завантаження системи, причому є як і автодоповнення команд і шляхів до файлів, так і пам'ять і редагування команд введених користувачем. Список всіх доступних команд можна отримати ввівши help в командному рядку, а більш детальну інформацію про команду:> help command_name. На всіх зупинятися не буду та й деякі вимагають певних знань, а про деякі ми вже говорили. Наведу лише самі часто використовувані (і найбільш безпечні). Згодом випробувані команди при необхідності (вдалому експерименті) можна внести в конфігураційний файл.

Так завантажити Linux можна приблизно за допомогою такої команди

GRUB> kernel (hd0,4) /boot/vmlinuz-2.6.18-3 root = / dev / hda5 hdc = ide-scsi vga = 791, тут як бачите з розділу hda5 завантажується ядро ​​містіться в файлі / boot / vmlinuz -2.6 .18-3 Сейчас розділ прізначається Коренєва и вібірається режим відеоадаптера 1024х768х16 (если Сейчас режим вам не Підходить Спробуйте, например vga = 788 - 800х600), и додатково для пише CD-RW приводу встановлюється емуляція scsi пристрою. Для других систем використову всі ті ж: makeactive и chainloader +1. Віпробуваті новий командний файл можна с помощью опції configfile path_to_file. Для того щоб вівесті вміст будь-которого текстового (конфігураційного) файлу скорістайтеся дуже знайомо командою cat, а порівняті два файли можна с помощью - cmp file1 file2, до речі для поиска потрібного файлу теж існує команда яка так нехитро и назівається - find. Команда quit дозволяє війта з завантажувача, а halt и reboot відповідно вімкнуті и Перезавантажити комп'ютер. С помощью командіровку color можна Изменить колір меню например: color light-gray / blue black / light-gray, дерло идет параметр для обраних пункту меню, а потім для НЕ Вибравши, основний / фоновий колір відповідно. Втім можна для цього скористатися і окремими командами наприклад foreground ffffff (колір в шестнадцатиричной формі), background 000000, а для установки рамки навколо є команда border. До речі можна змінити і режим виведення на текстовий для цього скористайтеся командою GRUB> display text, а коли вам набридне цей режим, то повернутися можна замінивши параметр на vga16. Визначити і вивести режими відеоадаптера можна за допомогою команди vbeprobe, а протестувати за допомогою testmode. Є й команди призначені для роботи з розділами жорсткого диска, так команда partnew дозволяє створити первинний розділ, а partype змінити його тип, fstest тестує файлову систему, geometry дає можливість працювати з геометрією розділів жорсткого диска. Для конфігурації мережевого інтерфейсу є можливість скористатися командою ifconfig, для установки параметрів СОМ порту - serial, змінити розкладку клавіатури setkey [to_key from_key]. І звісно ж не обійшлося без можливості установки пароля, так як самі бачите, що за допомогою командного режиму можна істотно нашкодити системі. Для цього використовується все та ж команда: password [ `-md5 '] собственно_пароль, дану команду бажано все-таки занести в конфігураційний файл, а необов'язкова опція md5 вказує на використання алгоритму шифрування md5crypt.

установка завантажувача

І так з завантажувачами ми розібралися. Тепер давайте розберемося з питанням куди його встановлювати. Вся справа в тому, що деякі системи вже мають свій завантажувач і природно можна скористатися ним. Також не можна залишити без уваги той факт, що операційні системи сімейства Windows взагалі не дбають про збереження MBR, а при своїй інсталяції просто записують туди те, що потрібно їм, після цього як ви розумієте до Linux можна буде дістатися лише за допомогою рятувальної дискети. Тому виникає питання в якій послідовності встановлювати системи, щоб потім не повторювати заново деякі операції. Розберемо два найбільш популярних варіанту: Windows 9x + Linux, Windows 9x + Windows NT (2000) + Linux. Інші як правило є лише окремими випадками цих двох, головне вловити принцип, а там розберетеся, я думаю вже самі.

Отже, випадок перший Windows 9x + Linux. Першою бажано встановити Windows 9x причина вже думаю ясна. Втім якщо є завантажувальний диск, то завантажити Linux і відновити завантажувач можна буде без проблем. Так, перед початком будь-яких дій зачіпають MBR бажано зберегти так би мовити його оригінальну версію за допомогою команди dd:

$ Sudo dd if = / dev / hda of = mbr_orig.bak bs = 512 count = 1

Правда зручно. Адже ви сподіваюся не забули, що в Linux можна звернутися до всього диску відразу або до будь-якої його частини, система не накладає ніяких обмежень (окрім прав доступу природно). Якщо звикли до Microsoft'овскім розділах відвикайте, буде легше. Що, ми зделали в цьому прикладі? Відкусили перші 512 байт жорсткого диска (тобто MBR) і зберегли його в файлі. Відновити тепер стару версію MBR можна ввівши dd if = mbr_orig.bak of = / dev / hda bs = 512 count = 1 at mbr_orig.bak> / dev / hda (або ще простіше c). Краса.

Під час інсталяції Linux програма установки запитає, куди встановлювати LILO. Давайте подивимося які у нас варіанти. Windows завантажується в такій послідовності.

З малюнка видно, що можливі два варіанти установки в MBR

і в boot record розділу куди встановлена ​​Windows.

Кращим варіантом є установка в MBR (тобто вибираємо hda). До речі якщо ви просто видалили розділ з Linux, то відновити MBR можна і в DOS, просто наберіть fdisk / mbr.

Тепер розглянемо другий варіант. Послідовність установки систем така: спочатку Windows 9x, потім Windows NT / 2000 вона коректно визначає споріднену систему і заносить дані в свій завантажувач і останньої встановлюємо Linux. Можна в цьому випадку завантажуватися і з поступовим зниженням дози, але це дещо не зручно. Так як прийдеться вибирати два рази, спочатку Windows в LILO (GRUB), а потім вибирати між Windows 9x і Windows NT / 2000. Кращим варіантом буде скористатися NT loader. Для цього при установці встановіть завантажувач в кореневий розділ Linux (наприклад hda5). Завантажитеся з дискети і введіть у командному рядку dd if = / dev / hda5 of = / bootsect.lnx bs = 512 count = 1. Тепер скопіюйте отриманий файл в розділ де у вас встановлена Windows (розділ С), наприклад командою cp /bootsect.lnx / mnt / win_c або через флоппі диск. Потім знайдіть в цьому ж розділі прихований файл boot.ini (тут все чомусь рекомендують перевантажитися в Windows, я користувався mc, навіщо бігати туди сюди) і додайте в кінець файлу наступний рядок C: \ bootsect.lnx = "Linux". Тепер при завантаженні ви отримаєте можливість вибрати за допомогою NT loader'a будь-яку з трьох систем, а потім при виборі варіанту Linux завантажиться встановлений завантажувач.

Якщо ви не створили дискету при установці системи, то в Linux її можна створити скориставшись утилітою mkbootdisk. Наприклад / sbin / mkbootdisk -device / dev / fd0 2.6.18-3, де опція device вказує на пристрій на якому буде створюватися завантажувальний диск, якщо у вас один дисковод, то цю опцію можна опустити, а 2.6.18-3 показує на використовувану версію ядра, ця назва каталогу в / lib / modules / (можна і простіше / sbin / mkbootdisk -device / dev / fd0 `uname -r`).

Ось ми і розібралися, я принаймні так сподіваюся з завантажувачами. Додаткову інформацію знайдете у відповідних man'ах і також по мультизагрузка системи в Інтернеті доступні різні варіанти HOWTO. Linux forever.

А далі що?
Що, ми зделали в цьому прикладі?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.