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, перевесить на текущие ветки или сизиф. |