[make-initrd] Wait until the resume= is processed

Alexey Gladkov gladkov.alexey at gmail.com
Thu Aug 25 23:24:00 MSK 2022


On Thu, Aug 25, 2022 at 09:08:08PM +0300, Leonid Krivoshein wrote:
> Привет!
> 
> 
> 25.08.2022 15:41, Alexey Gladkov пишет:
> > Привет!
> >
> > Мне нужна ваша помощь. Я раздумывал про то как устроено resume в initramfs
> > и связанные с этим проблемы.
> >
> > Если всё суммировать, то проблема лишь одна:
> >
> > Если swap на отдельном устройстве, то оно может проинициализироваться
> > позже чем устройство, на котором находится корень. То есть мы не знаем по
> > какому сценарию мы движемся.
> 
> Потому что мы следуем событиям, а не движемся по сценарию.

Нет. Даже если скрипт последовательный, то в месте, где выполняется resume
и устройства для этого нет, то мы всё также не знаем нужно идти дальше или
ещё ждать пока появится устройство.

> > К счастью мы ждём не какой-нибудь swap, а вполне конкретный, определённый
> > через параметр resume= . Поэтому если _начать_ считать, что указанное в
> > параметре устройство обязательно должно по явиться, то неопределённости
> > уже не будет.
> >
> > Проблема в том, что сейчас устройство указанное в resume= опционально т.е.
> > параметр может указывать на что-то от предыдущий установки, например.
> 
> Это ошибка конфигурирования, которая должна вылезти боком сразу же, при 
> первом её обнаружении. Предлагаю считать отсутствие указанного SWAP 
> фатальной ошибкой и не загружаться, пока пользователь не прочтёт и не 
> подтвердит руками, что он накуролесил.

Я не думаю, что ломать конфигурацию, которая успешно грузилась, это
выигрышная стратегия.

> > У меня есть соблазн сделать:
> >
> > 1. Ждать устройство resume= и пробовать проснуться.
> 
> Видимо тут имелось ввиду две вещи:
> 
> 1.1. Попытаться проснуться при поступлении события о нахождении 
> устройства SWAP.
> 1.2. Если истёк некий тайм-аут ожидания SWAP, по крайней мере, события 
> можно больше не ждать. Этот тайм-аут, по идее, не должен совпадать с 
> rootdelay, так как штатная загрузка с корня -- задача, противоположная 
> просыпанию.

В случае загрузки с диска rootdelay по сути это таймаут для инициализации
блочных устройств.

Мне не хочется создавать отельный параметр для отката к обычной загрузке,
потому что мне пока кажется, что ситуация с неправильным параметром
resume= достаточно редкая. Блокировать загрузку из-за ошибки тоже
неправильно.
 
> > 2. Если устройство есть и не получилось, то обрабатывать накопившиеся
> > эвенты для обычной загрузки.
> >
> > 3. Если мы достигли rootdelay= и resume= не появился, то сбросить delay,
> > выдать большое предупреждение об отсутствии resume= и грузиться нормально.
> 
> Если resume будет неотъемлемой фичей. Интересно, получится это "ужить" с 
> общим кодом модульно. А так, да, проверку разумней делать в одном (в 
> этом) месте.

Я не очень понял. Сейчас resume не находится в фиче. Так и будет дальше.

> > 4. Возможно, при создании initramfs смотреть на resume= в /proc/cmdline и
> > предупреждать, что устройства нет. В этом пункте я сильно не уверен.
> 
> Нет, один initramfs может быть использован для загрузки в разных 
> условиях, с разными параметрами.

-- 
Rgrds, legion



More information about the Make-initrd mailing list