AllInfo
Main: Info Blog Temp Mail


unix 2010-06-01 12-23-05

Windows переписал мой загрузочный сектор (grub-legacy)


ПРИМЕЧАНИЕ: Чтобы восстановизь загрузчик Grub1, Вы должны применить ISO-образ с sidux 2009-03 (momos) или ранее. Alternatively use chroot with any live.iso.

Чтобы перезаписывать данные загрузчика Grub1 (grub-legacy) в MBR и/или его восстановить, Вы должны загрузиться sidux live-cd (sidux-2009-03-momos.iso or earlier) :

1. Чтобы узнать, какие разделы имеются на жестком диске (например [h,s]d[a..]X)), Вам необходимы привилегии администратора, т.е. права учетной записки root, которые можно получить командой (#):

$ sux

2. Чтобы узнать правильные наименнования разделов в системе используется утилита fdisk:

fdisk -l
cat /etc/fstab

3. После того, как Вы oпределили местонахождение разделов, можно создать точки монтирования:

mkdir -p /media/[hdxx,sdxx,diskx]

4. Далее производим монтирование устройств в необходимые каталоги:

mount /dev/xdxx /media/xdxx

5. Переписываем Grub в MBR первого жёсткого диска:

/usr/sbin/grub-install --recheck --no-floppy --root-directory=/media/xdxx /dev/sda

Пример

root@sidux:/home/sidux# fdisk -l
# fdisk -l
Disk /dev/sda: 115.9 GB, 115989736960 bytes
255 heads, 63 sectors/track, 14101 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x40444044
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3673 29503341 7 HPFS/NTFS
/dev/sda2 3674 14101 83762910 5 Extended
/dev/sda5 3674 7239 28641784+ 83 Linux
/dev/sda6 7239 10842 28934104+ 83 Linux
/dev/sda7 10843 14101 26177886 b W95 FAT32
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xa41e667f
Device Boot Start End Blocks Id System
/dev/sdb1 1 3574 28708123+ 83 Linux
/dev/sdb2 3575 7247 29503372+ 83 Linux
/dev/sdb3 7248 10845 28900935 83 Linux
/dev/sdb4 10846 14593 30105810 5 Extended
/dev/sdb5 * 10846 14338 28057491 83 Linux
/dev/sdb6 14339 14593 2048256 82 Linux swap / Solaris
Disk /dev/sdc: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00077541
Device Boot Start End Blocks Id System
/dev/sdc1 1 30401 244196001 83 Linux
Disk /dev/sdd: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1c01ad92
Device Boot Start End Blocks Id System
/dev/sdd1 1 30401 244196001 83 Linux

root@sidux:/home/sidux# cat /etc/fstab
# /etc/fstab - static information about the filesystems - fstab(5)
#
# /etc/fstab is only read by programs, and not written; it is the duty of the
# system administrator to properly maintain this file.
#
# Instead of giving the device explicitly, one may indicate the filesystem
# that is to be mounted by its UUID or VOLUME label. This will make the
# system more robust: adding or removing a disk changes the disk device name
# but not the filesystem UUID or VOLUME label.

# automatically added, ST3120026A-3LJ093B4-part1
/dev/sda1 /media/disk0 ntfs noauto,users,exec,ro,dmask=0022,fmask=0133 0 0

# automatically added, ST3120026A-3LJ093B4-part5
/dev/sda5 /media/disk1 jfs noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ093B4-part6
/dev/sda6 /media/disk2 reiserfs noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ093B4-part7
/dev/sda7 /media/disk3 vfat noauto,users,exec,shortname=lower,quiet,umask=000 0 0

# automatically added, ST3120026A-3LJ09RBF-part1
/dev/sdb1 /media/disk4 reiserfs noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ09RBF-part2
/dev/sdb2 /media/disk5 ext3 noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ09RBF-part3
/dev/sdb3 /media/disk6 reiserfs noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ09RBF-part5
/dev/sdb5 /media/disk7 ext3 noauto,users,exec,noatime 0 2

# automatically added, ST3120026A-3LJ09RBF-part6
/dev/sdb6 none swap sw 0 0

# automatically added, ST3250824AS-4ND1V199-part1
/dev/sdc1 /media/disk9 ext3 noauto,users,exec,noatime 0 2

# automatically added, ST3250620AS-9QE13XVF-part1
/dev/sdd1 /media/disk10 ext3 noauto,users,exec,noatime 0 2

# automatically added, _NEC_DVD_RW_ND-4550A
/dev/cdrom /media/cdrom udf,iso9660 user,noauto 0 0

# automatically added, ASUS_DVD-ROM_DVD-E616P_0104
/dev/cdrom1 /media/cdrom1 udf,iso9660 user,noauto 0 0

# automatically added
/dev/fd0 /media/fd0 auto rw,user,noauto 0 0

# temporary filesystem in virtual memory
#tmpfs /tmp tmpfs defaults 0 0

Таким образом /dev/sdb1 является разделом root и MBR находится на sda. Grub восстанавливается этими 3 командами:

mkdir -p /media/sdb1
mount /dev/sdb1 /media/sdb1
/usr/sbin/grub-install --recheck --no-floppy --root-directory=/media/sdb1 /dev/sda

Создание загрузочной дискеты

Чтобы сделать себе загрузoчную дискету, используйте инструменты, предусмотренные на вебстранице UBCD (Ultimate Boot Disk CD).
Удаление grub с загрузочного сектора

Установите инструмент системы восстановления mbr:

apt-get update
apt-get install mbr
apt-get remove --purge lilo
man install-mbr

Менеджер загрузки grub

Примечание: Grub для ядер 2.6.22 и выше использует sdax
и требует заменить строку
initrd (hd0,x)/sidux/miniroot.gz
на:
initrd /boot/initrd.img-2.6.xx.x-slh-smp-x

Введение

grub - это менеджер загрузки, который может загружать операционные системы с различных разделов. grub не зависит от блочных списков (blocklists), используемых для поиска файлов, необходимых для запуска системы. Менеджер загрузки поддерживает большое число файловых систем: ext2, ext3, reiserfs... (Linux), Fat32, Fat16 (Windows), UFS (BSD), Minix и многие другие.

grub использует расширения BIOS (таким образом может загружать системы с разделов, расположенных даллее 8 Гб) и не имеет ограничения на 1024 цилиндра. Для Grub не имеет значения, где находится физически ядро загружаемой ОС, ему достаточно знать раздел и путь к файлам ядра (или их символическим ссылкам). После изменения конфигурации (т.е файла menu.lst) нет необходимости в вызове программы (как в случае с lilo) - новые настройки будут автоматически восприняты при следующей загрузке.

sidux использует Grub при загрузке компьютера с LiveCD. Как стандартный загрузчик при работе с жесткого диска используется также grub. Однако grub ,без каких-либо проблем, может быть установлен и позже. Для установки grub в MBR необходимo из оболочки с правами root выполнить команду:

grub-install --root-directory=/media/sdaX /dev/sdY

/media/sdaX - это раздел, смонтированный с правами на запись, на котором в директории /boot/grub будут размещены файлы (stage2, stage1_5xxx).
Файл конфигурации menu.lst должен находиться в этой директории. /dev/sdY - это диск в MBR которого должен быть записан код запуска, обычно это /dev/sda.
Обозначения дисков и имена устройств

grub не делает различия между SCSI-и IDE жесткими дисками. (hd0) - всегда первый жесткий диск, который является первым в последовательности загрузки устанавливающейся в BIOS), независимо от того является ли он IDE или SCSI. Несколько необычен метод нумерации разделов, принятый в grub: первый раздел на первом жестком диске обозначается как (hd0,0). Первичные разделы нумеруются от 0 до 3, а логические разделы от 4 и далее.
Grub Linux Label
(fd0) /dev/fd0 дискета (под Windows)
(hd0) /dev/sda первый жёсткiй диск
(hd0,0) /dev/sda1 первичный раздел первого жёсткого диска
(hd0,5) /dev/sda6 Logical раздел первого жёсткого диска

Все обозначения устройств в grub берутся в скобки ( ). Тем не менее, следует обратить внимание на запись параметров, передаваемых ядру. В противоположность grub параметры ядра должны быть записаны в обычном для Linux виде. В следующем примере обе записи указывают на один и тот же раздел, а именно на четвертый раздел первого диска. Первая запись в стиле grub, а вторая в виде, типичном для Linux:

root (hd0,3)
kernel /boot/vmlinuz root=UUID=bf955abf-ce1f-45a3-9ee5-93b5c5dc4fe0 ro quiet vga=791
initrd /boot/initrd.img

Командный режим (grub-shell)

Одним из особенно приятных свойств grub является наличие командного режима. Для входа в этот режим необходимо нажать клавишу "c" чтобы запустить оболочку grub. В этом режиме имеется возможность, даже при наличии испорченного файла menu.lst, находить и загружать различные системы и файлы (например ядро).

Для того, чтобы иметь возможность немного попрактиковаться можно при загруженном sidux запустить grub из оболочки root с помощью команды # grub. В командном режиме grub можно получить справку о всех доступных командах. Для этого нужно выполнить инструкцию "help". Подробную информацию о каждой команде можно получить выполнив "help <команда>". Выйти из командного режима grub можно с помощью инструкции quit". Большой помощью является тот факт, что в оболочке grub клавиша табуляции (Tab) работает так же как и в оболочке Linux, т.е. команды, имена дисков, разделов и файлов могут быть автоматически дополнены ее нажатием.

grub дает возможность определить и наити даже перед началом загрузки местонахождение ядра и файл initrd, по команде find", например grub выдает при

find /boot/vmlinuz

список разделов, на которых в директории /boot находится файл ядра vmlinuz:

(hd0,3) (hd1,0)

С помощью команды "geometry" можно выяснить параметры интересующего раздела. Например на запрос:

geometry (hd0)

показывается следующее:

"drive 0x80: C/H/S = 3648/255/63, The number of sectors = 58605120, /dev/sda Partition num: 0,
Filesystem type is fat, partition type 0xb Partition num: 1,
Filesystem type is fat, partition type 0xb Partition num: 2,
Filesystem type is fat, partition type 0xc Partition num: 4,
Filesystem type is ext2fs, partition type 0x83 Partition num: 5,
Filesystem type unknown, partition type 0x82 Partition num: 6,
Filesystem type is fat, partition type 0xb"


После того как ядро и, возможно, имеющийся initrd (или miniroot.gz) найдены, можно начать загрузку командой boot.
Режим редактирования

Этот режим позволяет изменять пункты в menu.lst в процессе загрузки. Эта возможность существует даже тогда, когда grub загружается с LiveCD и файл menu.lst защищен от записи. Для входа в этот режим следует нажать ESCклавишу, затем для подтверждения Return клавишу и, наконец, "e" клавишу. После этого параметры будут дописаны в конец строки. Перемещение в строке осуществляется с помощью клавиш курсора.
menu.lst (примеры)

ПРИМЕЧАНИЕ: In this section commented out lines are started with 2 or more # marks, and are excluded from interfering with the bootprocess.

# Example /boot/grub/menu.lst
################################################
# setkey changes the keyboardlayout to german (as an example)
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright
# menu.lst - See: grub(8), info grub, update-grub(8)
# grub-install(8), grub-floppy(8),
# grub-md5-crypt, /usr/share/doc/grub
# and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
default 0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout 5

# Pretty colours
color cyan/blue white/blue
gfxmenu (hd0,5)/boot/message

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line) and entries protected by the
# command 'lock'
# e.g. password topsecret
# password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title Windows 95/98/NT/2000
# root (hd0,0)
# makeactive
# chainloader +1
#
# title Linux
# root (hd0,1)
# kernel /vmlinuz root=/dev/sda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/sda1 ro
## kopt_2_6_8=root=/dev/sdc1 ro
## kopt_2_6_8_2_686=root=/dev/sdc2 ro
# kopt=root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro quiet vga=791

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,5)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
## alternative=false
# alternative=false

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
## lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/sda5
# defoptions=

## should update-grub lock old automagic boot options
## e.g. lockold=false
## lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
## altoptions=(single-user) single
# altoptions=(single-user mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
## howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
## memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title Debian GNU/Linux, kernel 2.6.22.1-slh-smp-7
root (hd0,5)
kernel /boot/vmlinuz-2.6.22.1-slh-smp-7 root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro quiet vga=791
initrd /boot/initrd.img-2.6.22.1-slh-smp-7

title Debian GNU/Linux, kernel 2.6.22.1-slh-smp-7 (single-user mode)
root (hd0,5)
kernel /boot/vmlinuz-2.6.22.1-slh-smp-7 root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro quiet vga=791 single
initrd /boot/initrd.img-2.6.22.1-slh-smp-7

### END DEBIAN AUTOMAGIC KERNELS LIST

#### MS (TM)
title Windows 2K/XP/2003 (sda1)
chainloader (hd0,0)+1

### ISO boot
title sidux 32bit from gaiaISO
kernel (hd0,3)/sidux3/vmlinuz-2.6.22.1-slh-smp-7 boot=fll quiet vga=791 fromiso=/sidux3/siduxgaia.iso
initrd (hd0,3)/sidux3/initrd.img-2.6.22.1-slh-smp-7


title Debian GNU/Linux, kernel 2.6.18-1-686 (sda5)
root (hd0,4)
kernel (hd0,4)/boot/vmlinuz-2.6.18-1-686 root=/dev/sda5 ro vga=791
initrd (hd0,4)/boot/initrd.img-2.6.18-1-686
savedefault

Мультизагрузка

С помощью "chainloading" очень просто расширять меню выбора Grub с другими операционными системами. Если бы хотелось иметь возможность запускать системы например MS Windows (TM) и Debian etch вместе с sidux' fromiso инсталляцию ', нужно отредактировать файл настройки Grub /boot/grub/menu.lst от имени root, добавив следующие строки после автоматически сгенерированного участка конфигурации, то есть после ### END DEBIAN AUTOMAGIC KERNELS LIST:

####MS Windows (TM) perhaps even MS Vista (TM)
title Windows (95/98/XP/Vista)
rootnoverify (hd0,1)
makeactive
chainloader +1

### Debian etch
title Debian etch
kernel (hd0,3)/debian/vmlinuz root=/dev/sda4 ro (or whatever)
initrd (hd0,3)/debian/miniroot.gz (or (whatever)

### ISO boot
title sidux 32bit from ISO
kernel (hd0,5)/sidux/vmlinuz boot=fll quiet vga=791 fromiso=/sidux/sidux.iso
initrd (hd0,5)/sidux/miniroot.gz

Некоторые люди хотят или вынужденны иметь несколько установленных систем Windows на компьютере. Однако операционные системы этого семейства запускаются только с 1-го диска. Таким образом, необходимо один из разделов скрыть, а другой активировать. Последующие команды должны быть введены в командную строку grub и, в случае успеха, добавлены в menu.lst. Сделать это следует для каждого Windows-раздела. Не забудьте о резервном копировании! ;-)

hide (hd0,0) # скрыть 1-й раздел на 1-ом диске
unhide (hd0,1) # показать 2-й раздел на 1-ом диске
rootnoverify (hd0,1) # сделать 2-й раздел на 1-ом диске к корневой файловой системе
makeactive # активировать 2-й раздел на 1-ом диске
chainloader +1 # показывает на 1-й сектор стартового раздела
boot # загружает операционную систему

Для того чтобы загрузить вторую Windows со второго диска, надо виртуально поменять местами диски 1 и 2. Таким образом для Windows будет симулироваться первый диск:

map (hd0) (hd1)
map (hd1) (hd0)

Возможные трудности

Хотя grub не имеет ограничения на 1024-цилиндрa и может загружать системы, расположенные далее, тем не менее файл /boot/grub/stage2 должен быть доступен посредством базовой системы ввода-вывода BIOS (должен быть расположен до 1024 цилиндра). Файл stage2 не может быть перемещен после инсталляции (например, программа defrag может попытаться это сделать), , т.к. в этом случае данные, записанные во время установки Grub теряют свою актуальность. Кроме того, разумно так же защитить файл stage2 от записи. Для этого, находясь в директории grub, выполнить следующие команды:

Dos: attrib +r +s stage2
LINUX: # chmod a -w ./stage2

18.224.39.74 / 2024-04-27_22-56-10 UTC.