WikiSandBox
Ubuntu, както знаете, си работи стабилно. Това се отнася и за всичките му разновидности – Kubuntu, Xubuntu и т. н. След поредното обновяване на софтуера установих с приятна изненада, че grub "увисва". Ех, да имам на българина късния акъл! Ми да - между обновяваните пакети беше и grub и все трябваше да се сетя да го конфигурирам наново...
Нямам много опит с grub, та се наложи да потърся и да почета. Описвам резултата - дано това ви спести малко ровене.
Работата се свежда до две неща:
- трябва да заредиш линукс от другаде, например от оптичен диск, и да получиш достъп до твърдия диск, където е инсталиран Ubuntu;
- трябва да използваш grub (от оригиналната инсталация на твърдия диск), за да оправиш нещата.
Стартиране на линукс от оптичен диск и достъп до инсталацията на твърдия диск
Най-добре е да имате оригиналния жив диск на тази версия на Ubuntu, която сте инсталирали. Изчаквате да се зареди системата от диска, отваряте конзолата и пишете
{sudo -s}
С тази команда придобивате права на свръхпотребител. Когато сте стартирали линукс от живия диск, sudo не работи по обичайния начин. След това
[code]mkdir /mnt/disk[/code]
и монтирате оригиналния диск в точка /mnt/disk
[code]mount -t ext3 /dev/sdb1 /mnt/disk[/code]
Параметърът -t ext3 определя типа на файловата система и обикновено може да се пропусне - тогава mount автоматично определя типа файлова система. В примера се предполага, че отваряте първия дял от втори (физически втори) твърд диск. Ако не сте съвсем наясно какви точно дялове имате по дисковете и как се именуват, прочетете тази информация така:
[code]cat /proc/partitions[/code]
Сега вече може да преминете към точка 2.
Ако искате обаче да инсталирате grub на дискета - това никак не е лоша идея, - трябва да направите преди това още нещо. Поставете дискетата във флопито, форматирайте я (това унищожава всички данни на нея!) и я монтирайте, например в точка /mnt/fd. Форматирането става така:
[code]mke2fs /dev/fd0[/code]
Тази команда не форматира физически дискетата, тя само създава върху нея файлова система от типа ext2. Файловата система ext3 не става за дискети (голяма е), но може да поставите досовата (старата уиндоуска) файлова система vfat със следната команда:
[code]mksf -t vfat /dev/fd0[/code]
В случая няма значение коя файлова система ще поставите, но ако приготвяте дискета за данни, използвайте vfat, за да може да я чете и Windows.
Направете точка за монтиране на дискетата и я монтирайте:
[code]mkdir /mnt/fd mount /dev/fd0 /mnt/fd[/code]
След това копирайте върху нея следните файлове:
[code]cd /mnt/disk/boot/grub cp stage1 stage2 menu.lst device.map /mnt/fd[/code]
Да копирате тези файлове не е задължително действие, за да направите стартираща дискета, но е разумна предпазна мярка. Демонтирайте дискетата:
[code]umount /mnt/fd[/code]
Може да стартирате линукс и от всякакъв друг жив диск. Аз от доста време периодично обновявам жив диск от инициативата SystemRescueCd ([url=http://www.sysresccd.org/Main_Page]http://www.sysresccd.org/Main_Page[/url]) - в по-малко от 200 МБ той съдържа всичко, което е необходимо при спасителни операции от този тип. Когато стартирате системата от SystemRescueCd, вие влизате в нея с права на администратор. Затова аз по-нататък няма да поставям пред командите sudo. Ако обаче използвате друг жив диск с линукс, може да се наложи да въвеждате командите със sudo.
Както с оригиналния диск на Ubuntu създавате си точка за монтиране на твърдия диск и го монтирате:
[code]mkdir /mnt/disk mount /dev/sdb1 /mnt/disk[/code]
Новото следва тук:
[code]mount -t proc none /mnt/disk/proc mount -o bind /dev /mnt/disk/dev[/code]
Тези две команди фактически копират директориите /proc и /dev от активната система (в случая - SystemRescueCd). След малко ще стартираме копие от командния интерпретатор, а той също е от активната операционна система и данните в тези две директории трябва да бъдат адекватни за него. От друга страна, понеже и файловата система /proc, и файловата система /dev са "мними", тоест създават се от ядрото при стартиране на системата, това няма да нанесе физически промени върху вашия твърд диск. И сега да стартираме копие от командния интерпретатор (bash), като му определим за основна файлова система /mnt/disk:
[code]chroot /mnt/disk /bin/bash[/code]
Сега вече сме почти като свръхпотребител на собствената си система на твърдия диск и можем да стартираме grub и да поправим нещата.
[b]2) Работа с grub[/b]
Стартирана без параметри, програмата grub предоставя нещо като мъничък команден интерпретатор. Тя извежда разпознавателен знак (propmpt) [b]grub>[/b] и тук могат да се пишат някои команди. Точно това ще направим сега:
[code]grub> find /boot/grub/stage1[/code]
Тази команда изисква от grub да анализира на кой диск е файлът stage1. В моя пример резултатът ще бъде такъв:
[b](sdb0)[/b]
Обърнете внимание, че докато ядрото номерира дисковите дялове от 1, в grub, кой знае защо, те се номерират от 0. Сега трябва да определим този диск като основен (коренен):
[code]grub> root (sdb0)[/code]
И най-сетне сме готови да поправим нещата. Ако вие сте инсталирали стартиращата част на grub в MBR - Master Boot Record, тоест нулевия сектор на първия дял от първия диск - а инсталиращата програма на Ubuntu по подразбиране прави точно така, - въвеждате следната команда:
[code]grub> setup (sda0)[/code]
Ако пък искате да инсталирате grub на дискета (нали вече си приготвихте дискетата?), използвайте
[code]grub> setup (fd0)[/code]
И толкова. Излезте от grub:
[code]grub> quit[/code]
и рестартирайте системата. Нещата трябва да са вече наред.
[b]Кратко отклонение[/b]
Сигурно вече сте разгледали файловете в директорията /boot/grub и сте забелязали, че файлът stage1 е с дължина точно 512 байта. Това е и размерът на сектор от диска. В този файл се съдържа онази свръхкратка програмка, която се записва в MBR или в нулевия сектор на дискетата. Тя има за задача само да пренасочи процеса на зареждане към правилния диск и дисков дял, където се намира /boot/grub и файлът stage2 - той всъщност върши работата.
[b]Една неприятна, но поправима изненада[/b]
Стартирали сте системата и сте много доволни. И с право. Като предвидлив човек решавате да си направите резервно копие на стартираща дискета. След като поставите форматирана дискета във флопито, това става така:
[code]sudo grub-install /dev/fd0[/code]
или
[code]sudo grup-install fd0[/code]
И в двата случая получавате някакви тъпи съобщения, че BIOS не разпознавал такова устройстви или че такъв диск нямало. Това е страничен ефект от "спасителната операция". Оправянето му е лесно - използвайте --recheck, за да си "припомни" grub какво е описано в device.map. Например:
[code]sudo grub-install --recheck fd0[/code]
[b]И накрая[/b]
След като сте поправили нещата и сте си направили стартираща дискета, копирайте върху нея четирите файла от /boot/grub, за които стана дума преди малко. Може да спасите на дискетата и копие от MBR (нулевия, стартиращия сектор от първия диск). Това е особено разумно да се направи, ако използвате на компютъра си и Windows или DOS - компютърните вируси много обичат да се настаняват в MBR и макар в новите версии на Windows това да им е все пак по-трудно, винаги съществува риск. Копието се прави така:
[code]sudo mount /dev/fd0 /mnt/fd sudo dd if=/dev/sda of=/mnt/fd/backup.mbr bs=512 count=1[/code]
Това създава на дискетата файла backup.mbr, съдржащ MBR, а възстановяването на нулеви сектор от дискетата може да стане така:
[code]sudo mount /dev/fd0 /mnt/fd sudo dd if=/mnt/fd/backup.mbr of=/dev/sda bs=512 count=1[/code]
Нали е ясно? При тези действия трябва да бъдете много внимателни. Програмата dd (Data Duplicator) е много "професионална" - с нея наистина могат да се правят чудеса, но със същата лекота може да унищожите цели дискове, та някои майтапчии разчитата dd като Data Destroyer: [url=http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/]http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/[/url] Date(2008-06-13T01:28:10Z)
Pages: PageCount
IdeaPool/UniversalVirtualTerminals
Tip: Shift-click "HelpOnEditing" to open a second window with the help pages.