В результате установки lite-cd-20071025.iso была получена незагружающаяся система; работоспособность пришлось восстанавливать через rescue. Таблица разделов перед установкой выглядела следующим образом: Disk /dev/sda: 250.0 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 9 72261 83 Linux /dev/sda2 10 6089 48837600 7 HPFS/NTFS /dev/sda3 6090 30401 195286140 5 Extended /dev/sda5 6090 6239 1204843+ 83 Linux /dev/sda6 6240 7439 9638968+ 83 Linux /dev/sda7 7440 7939 4016218+ 82 Linux swap / Solaris /dev/sda8 7940 8339 3212968+ 83 Linux /dev/sda9 8340 9839 12048718+ 83 Linux /dev/sda10 9840 25839 128519968+ 83 Linux /dev/sda11 25840 29339 28113718+ 83 Linux /dev/sda12 29340 30401 8530483+ 83 Linux При этом в MBR был стандартный код для загрузки из активного раздела (без поддержки загрузки из расширенных разделов, как в MBR от syslinux), в sda1 - grub (ext2), в sda2 - XP SP2 (ntfs), остальные разделы, кроме sda7 (swap) и sda12, содержали ext3; sda12 перед запуском установки был не отформатирован. При установке для sda12 было выполнено создание файловой системы ext3, задана точка монтирования / с параметрами по умолчанию; далее на этапе установки загрузчика был выбран раздел sda12 - предполагалось использование установленного в другой раздел grub и chainloader (hd0,11)+1 для загрузки этой системы. Однако после установки оказалось, что не загружается ни старый grub, ни что-либо ещё - активный раздел оказался переставленным на sda11. Пришлось загружать rescue и возвращать флаг активного раздела на место.
Посмотрел код /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, перевесить на текущие ветки или сизиф.