| Summary: | invalid active partition set after install | ||
|---|---|---|---|
| Product: | Branch 4.0 | Reporter: | Sergey Vlasov <vsu> |
| Component: | alterator-install3-desktop | Assignee: | Nobody's working on this, feel free to take it <nobody> |
| Status: | CLOSED WONTFIX | QA Contact: | Q.A. 4.0 <qa-4.0> |
| Severity: | critical | ||
| Priority: | P2 | CC: | icesik, inger, legion, mike |
| Version: | 4.0 | ||
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | |||
| Bug Blocks: | 12100, 14168 | ||
|
Description
Sergey Vlasov
2007-10-28 13:09:55 MSK
Посмотрел код /usr/lib/alterator/backend3/lilo в
alterator-install3-desktop-0.11-alt1:
bootable_flag() {
local bootdev="$1"
# Check raid
[ -z "$raidtypes" ] || set_bootable_raid
# Don't set bootable flag if some partitions already marked as bootable.
partitions_list |grep "^$bootdev" |cut -d\ -f1,2 |grep -qs
'[[:space:]]\*$' &&
return 0
Насколько я понял, последняя проверка должна была отключать установку флага
bootable в случае, если загрузчик устанавливается в MBR, а на диске уже есть
активный раздел (на самом деле в подобной конфигурации активный раздел нужен
только для обхода особо умных BIOS, проверяющих наличие активного раздела перед
попыткой загрузки). Однако в случае, если $bootdev - это раздел, а не диск, эта
проверка ничего не найдёт, и далее в любом случае будет вызвана функция
set_bootable, устанавливающая флаг bootable для раздела, в который
устанавливается загрузчик. Возможно, для случая, когда установка идёт в primary
раздел, такое поведение имеет смысл, но для расширенного раздела так делать в
любом случае нельзя.
Кстати, код в set_bootable() в любом случае работает неправильно для расширенных
разделов (в данном случае попал в sda11 вместо sda12) и, вероятно, будет
работать неправильно для таблицы разделов с "дырами" (например, при наличии sda1
и sda3, но отсутствии sda2).
В Сизифе это пакет alterator-lilo. Тут бы очень помог лог от сборки. (In reply to comment #1) > # Don't set bootable flag if some partitions already marked as bootable. > partitions_list |grep "^$bootdev" |cut -d\ -f1,2 |grep -qs > '[[:space:]]\*$' && > return 0 > > Насколько я понял, последняя проверка должна была отключать установку флага > bootable в случае, если загрузчик устанавливается в MBR, а на диске уже есть > активный раздел (на самом деле в подобной конфигурации активный раздел нужен > только для обхода особо умных BIOS, проверяющих наличие активного раздела перед > попыткой загрузки). Нет. Это проверка на уже установленый bootable флаг. Если эта проварка не сработала, то либо partitions_list биный, либо $bootdev не из списка разделов. > Однако в случае, если $bootdev - это раздел, а не диск, эта > проверка ничего не найдёт, и далее в любом случае будет вызвана функция > set_bootable, устанавливающая флаг bootable для раздела, в который > устанавливается загрузчик. Возможно, для случая, когда установка идёт в primary > раздел, такое поведение имеет смысл, но для расширенного раздела так делать в > любом случае нельзя. > > Кстати, код в set_bootable() в любом случае работает неправильно для расширенных > разделов (в данном случае попал в sda11 вместо sda12) и, вероятно, будет > работать неправильно для таблицы разделов с "дырами" (например, при наличии sda1 > и sda3, но отсутствии sda2). set_bootable, как ты видел, тупо отсчитыват раздел для sfdisk. У меня опять же подозрение на partitions_list. Версию sfdisk в студию. В 4.0/branch исправления не будут вноситься уже технически (заглушена очередь на сборку), поэтому прошу ошибки, актуальные для sisyphus/p7/t7, перевесить на текущие ветки или сизиф. |