Показаны сообщения с ярлыком grub. Показать все сообщения
Показаны сообщения с ярлыком grub. Показать все сообщения

вторник, 20 ноября 2012 г.

The file /boot/grub/stage1 not read correctly.


Сегодня пришлось помучится с установкой нового сервера под ОС CentOS6. На хостинге имелась возможность заказать бесплатную установку ОС. Сервер с 2-мя дисками по 2Т. Разбиение после автоустановки оказалось не подходящим мягко говоря:

# fdisk -l
Диск /dev/sda: 2000.4 ГБ, 2000398934016 байт
******
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *         524      243201  1949311035   83  Linux
/dev/sda2               1         523     4200966   82  Linux своп / Solaris
Пункты таблицы разделов расположены не в дисковом порядке

Диск /dev/sdb: 2000.4 ГБ, 2000398934016 байт
*******

Разбил как нужно sdb:
# fdisk -l /dev/sdb
Диск /dev/sdb: 2000.4 ГБ, 2000398934016 байт
******
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1               1          64      512000   83  Linux
Раздел 1 не заканчивается на границе цилиндра.
/dev/sdb2              64       19646   157286400   83  Linux
Раздел 2 не заканчивается на границе цилиндра.

Создал файловые системы, подмонтировал, скопировал данные с sda.
При попытке установить загрузчик grub на sdb:

# grub-install --recheck --no-floppy /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
The file /boot/grub/stage1 not read correctly.

Если делать из консоли grub:
# grub
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15t: File not found
grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd1)"...  27 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd1) (hd1)1+27 p (hd1,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

Файл /boot/grub/stage1 находится на диске. Что за хрень?
Оказывается, старый grub не поддерживает 256 битные inode, которые были введены для легкой миграции на ext4.
Проверить размер инод на файловой системе можно так:
# tune2fs -l /dev/sda1 | grep -i 'inode size'
Inode size:               256

Решение - отформатировать заново раздел с 128-битными inode.
# mkfs.ext3 -I 128 /dev/sda1

Поскольку данные я скопировал на sdb, форматировал sda спокойно. )

понедельник, 7 февраля 2011 г.

Проблемы с grub

История не новая. Изредка каждый сталкивается с проблемами grub. Пока не забыл опишу ситуацию, случившуюся в четверг 6.01.2011, так сказать в ночь/вечер перед Рождеством. Звонит админ с филиала и радостно сообщает "сервер не грузится". Ладно, берем безлимитный телефон и начинаем общаться с админом, чтоб выяснить чтоже случилось на самом деле. Сервер используется под smtp+imap и играет важную роль.
Итак, при загрузке выдается "GRUB Loading, Please Wait Error 17".
Далее не грузится и ничего не даёт сделать. Такую проблему с grub надо решать перестановкой grub. Админ выкачивает по корпоративному каналу и записывает образ rhel 5.6. Грузится linux rescue, без поддержки сети (очень зря, чтоб сэкономить время и не рассказывать как пишутся разные команды. Андрюха привет, подучи инглиш!!!!!).
grub-install /dev/mapper/nvidia_systemp. Казалось бы, теперь все получится и наступит счастье, но следующая загрузка показывает меню grub, но выдает ошибку error 15: File not found. Такс, возвращаемся опять в rescue режим. Опять запускаем grub-install и наблюдаем ошибку error 22 при инсталляции stage 1.5. Открываем командную строчку grub:
root (hd0,0)
setup (hd0)
grub error 22: file not found

Передо мной замаячила перспектива поехать на выходные за 700 км на филиал. Админу реально было сложно объяснить, каждую команду приходилось по буквам говорить. Стараясь отогнать мысли о поездке подальше, решил подключить сеть при загрузке, чтоб самому как-то посмотреть/исправить. Итак, очередная загрузка linux rescue, с поддержкой сети, вбить ип/маску/шлюз, сделать chroot /mnt/sysimage, запустить service sshd restart и, о чудо, я смог законнектиться.
Первым делом смотрим список смонтированных систем и опции монтирования (mount), ничего интересного. Пробуем grub-install, ошибка на месте.
Стал гуглить, ища решение проблемы, куча однотипных постов, у кого-то решается занулением 446 байт загрузочного диска и переустановкой grub, у кого не помогает. И тут мне в голову приходит мысль о проверке файловой системы, поскольку на сервере fake-raid (древний сервер), то возможно проблема кроется здесь. Отмонтировать раздел /boot (umount /boot), проверить (e2fsck -y /dev/mapper/nvidia_systemp1). При проверке раздела вылезло несколько логических ошибок, которые были поправлены. Пробуем снова установить grub и он таки ставится.  Далее очередь за всеми файловыми системами. Корневую файловую систему проверять в режиме "только чтение" (mount -n -o remount,ro /). Треть файловых систем выдало ошибки при проверке. Теперь самый трепетный момент - пробуем загрузиться как обычно. Загрузились, все нормально, но от fake-raid надо избавиться при первой же возможности. Данный текст не претендует на истину в последней инстанции, здесь я просто описал конкретную ситуацию. Может кому поможет.

четверг, 13 января 2011 г.

Установка программного RAID1 на рабочей системе с 2-мя дисками

Небольшая памятка для себя.
1. Загрузка модулей ядра (во избежание перезагрузки)
/sbin/modprobe linear
/sbin/modprobe raid1
2. Проверка загрузки
cat /proc/mdstat
3. Копирование таблицы разделов с /dev/sda на /dev/sdb
/sbin/sfdisk -d /dev/sda | /sbin/sfdisk /dev/sdb
4. Проверка
/sbin/fdisk -l
5. Изменение типа разделов /dev/sdb на Linux raid autodetect
/sbin/fdisk /dev/sdb
Command: t (change a partition's system id)
Partition number (1-4): 1
Hex code (type L to list codes): fd
6. Обнуление суперблока, чтобы убедиться в том, что не осталось предыдущих RAID-installations на /dev/sdb
/sbin/mdadm --zero-superblock /dev/sdbX
7. Создание RAID массивов
/sbin/mdadm --create /dev/mdX --level=1 --raid-disks=2 missing /dev/sdbY
8. Проверка вывода
cat /proc/mdstat
9. Создание файловых систем на RAID массивах
/sbin/mkfs.ext3 /dev/mdX
/sbin/mkswap /dev/mdY
10. Создание /etc/mdadm.conf
/sbin/mdadm --examine --scan > /etc/mdadm.conf
11. Монтирование устройств /dev/mdX
mkdir /mnt/mdX
mount /dev/mdX /mnt/mdX
12. Изменение файла /etc/fstab. Замена LABEL=YYYY на /dev/mdX
13. Настройка загрузчика GRUB добавить fallback=1
14. Замена root=LABEL=/ на root=/dev/mdX и root (hd0,0) на root (hd1,0)
15. Согласование с новой ситуацией ramdisk
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
16. Копирование содержимого директроий /dev/sdaX на новые устройства /dev/mdY
cp -dpRx / /mnt/mdX
17. Настройка и инсталляция загрузчика GRUB
grub
>root (hd0,0)
>setup (hd0)
>root (hd1,0)
>setup (hd1)
>quit
18. Перезагрузка
19. Изменение типа разделов /dev/sda на Linux raid autodetect
/sbin/fdisk /dev/sda
Command: t (change a partition's system id)
Partition number (1-4): 1
Hex code (type L to list codes): fd
20. Добавление устройств /dev/sdaX в соответствующие RAID массивы
/sbin/mdadm --add /dev/mdX /dev/sdaY
возможные проблемы с корневым разделом /sbin/grub-install --recheck /dev/sdb
сделать /sbin/modprobe megaraid_mm
21. Проверка вывода
cat /proc/mdstat
22. Согласование с новой ситуацией файла /etc/mdadm.conf
/sbin/mdadm --examine --scan > /etc/mdadm.conf
23. Подготовка загрузчика GRUB (Часть 2)
Скопировать строку с kernel (содержащую hd1), вставить ниже и заменить hd1 на hd0
24. Обновление ramdisk
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

Литература:
http://www.howtoforge.com/software-raid1-grub-boot-fedora-8
man grub
man fdisk
man mdadm