[devel] q: installer: Killing all remaining processes (forever)
Evgeny Sinelnikov
=?iso-8859-1?q?sin_=CE=C1_altlinux=2Eru?=
Сб Апр 5 05:04:50 MSD 2008
2008/4/5 Dmitry V. Levin <ldv на altlinux.org>:
> On Sat, Apr 05, 2008 at 04:29:59AM +0400, Evgeny Sinelnikov wrote:
> [...]
>
> > > > Дело в общем-то оказалось давнее. Ошибок было две:
> > > > 1) во время копирования образа в память он затирался и работал на
> > > > каком-то остаточном ходу.... волшебная функция sparse в начальных
> > > > скриптах запуска stage2 делала своё грязное дело довольно давно...
> > > > из-за этого иногда (а у меня на тесте в VirtualBox постоянно) не
> > > > работал loop_change_fd()
> > >
> > > Это было сделано специально, чтобы сэкономить несколько десятков мегабайт
> > > памяти. По крайней мере, содержимое этого образа уже не должно быть нужно
> > > ни одному процессу. Хорошо бы в этом как следует разобраться, всё-таки
> > > несколько десятков мегабайт памяти иногда кое-что значит.
> > >
> >
> > Довольно-таки смутно.... Как можно сэкономить "несколько десятков
> > мегабайт памяти" путём затирания образа в памяти после его
> > копирования..? Сначала копируем cp /image/altinst /mnt/altlinst, а
> > потом затираем последние как минимум 512 байт с помощью dd
> > if=/dev/zero of=/mnt/altinst skip=$size_of_image...
>
Кстати, тут 's/skip/seek/'
> Идея была в том, чтобы создать файл-дырку /mnt/altlinst в точности
> того же размера, что и исходный файл /image/altinst.
>
Довольно-таки странно сначала копировать файл, а потом поверх него
делать файл дырку. Я предположил, что порядок должен быть обратным -
перед копирование создаётся файл дырка нужного размера, для гарантии
непонятно чего (места на рамдиске?).... Иначе мы получали losetup-move
на файл с только что обнулённым куском в конце. Причём, если везде по
коду указывается $fs/altinst, то этот самый создатель файла-дырки
использует /mnt/altlinst. Такое ощущение, что его просто оставили во
время ручного мёрджинга.
>
> > После этого оно
> > иногда падает, особенно когда мы вызываем loop_change_fd("/dev/loop0",
> > "/mnt/altinst"), если ядро память почистило для своих нужно...
>
> Непонятно, почему оно может падать, если, по идее, оно больше не должно
> использоваться в тот момент, когда вызывается завершающий loop_change_fd.
>
Ну, это вот кстати, довольно просто... Оно же в памяти остаётся, чтобы
уметь сменить диск и добавить другой, с новыми пакетами. И нужно на
протяжении всего времени работы в stage2. Когда же мы делаем
losetup-move на один и от же вроде файл, у которого затёрты последние
512 байт может произойти глюк... Ядро на такой покоцаной файловой
системе в памяти просто падает.
Кстати, доводы относительно loop_change_fd() в многодисковой
установке, на последнем этапе работы установщика в stage2 несколько
меня смущают. Это могло быть сделано для корректного eject, но его не
делают... Может добавим?
>
> > > > 2) После вызова reboot(), в случае появленения сигнала ECHILD, init не
> > > > дожидался момента завершения и падал из-за чего появлялся:
> > > > Kernel panic - not syncing: Attempted to kill init!
> > >
> > > А вот это совершенно верно, коммит
> > > fe761e03fcc44afc58687810844a1efc1a013e82
> > > исправляет сразу две ошибки.
> > >
> > > > Исправленный вариант installer можно найти здесь:
> > > > http://git.etersoft.ru/people/sin/packages/installer.git/
> > > >
> > > > Единственное, что осталось непонятным - это отмонтирование
> > > > /mnt/destination, в котором оказываются занятыми /mnt/destination/dev
> > > > и, при наличии, /mnt/destination/home... Комментарий по поводу
> > > > MNT_DETACH вероятно стоит раскомментировать... Есть ещё какие-нибудь
> > > > по этому поводу предложения?
> > >
> > > Нет, MNT_DETACH был убран специально, иначе не все ресурсы оказываются
> > > полностью отмонтированными: после "поверхностного" отмонтирования
> > > расположенные глубже ресурсы оказываются недоступными для отмонтирования.
> >
> > Ну, тут всё вообще очень мутно.... Почему init, который init_stage2,
> > оказывается занял что-то /mnt/destination/dev?
>
> Кажется, это последствия работы evms.
>
Ужасно.... Получается, что новые ФС на разделе сразу требуют поверки
сразу после установки...
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Devel