[sisyphus] hibernate: cleanup after Software Suspend 2
Arioch
=?iso-8859-1?q?the=5FArioch_=CE=C1_nm=2Eru?=
Сб Авг 6 23:44:39 MSD 2005
file:///usr/share/doc/hibernate-1.09/init.d/hibernate-cleanup.sh
Этот скрипт зачищает места, где SwSusp2 может хранить образ оперативки.
Поскольку SwSusp2 сохраняет в образ кэши VFS - при каждой загрузке
старые образы нужно зачищать.
Увы, ядро это делает только при нормальном resume, но если отменить
просыпание (resume2=no), то образы остаются нетронуты, поэтому
1) если образ лежит в swap partition - swapon не срабатывает.
2) потом однажды, при обычной загрузке с "просыпанием" можно
подцепить этот образ и убить ФС неверными старыми кэшами.
Скрипт перебирает swap partitions и файлы в которых по его мнению могут
остаться образы. Запускаться он по задумке авторов должен из
/etc/rc.d/rc.sysinit после монтирования дисков (mount -a) но до
включения swap. В случае же просыпания - до него дело просто не доходит.
Это не вписывается в Альт, потому что у нас swap partitions включаются
до mounting local filesystems.
Насколько понимаю, выхода может быть 3:
1) разделить скрипт на очистку разделов и очистку файлов, запускать
эти половинки из разных мест rc.sysinit, пробить это изменение в mainstream
2) то же без mainstream, forkнуит но отслеживать обновления скрипта в
mainstream'e
3) изменить rc.sysinit, чтобы при наличие скрипта (т.е.установленном
пакете hibernate) - очередность mount -a и swapon возвращалась к более
классическому варианту.
Вообще, ввиду потенц.опасности загрузки со старым образом IMHO надо этот
скрипт помещать не в hibernate.rpm, который м.б. юзер и не поставит - а
в ядра с поддержкой SwSusp2.
Ниже мой подправленный rc.sysinit (вариант 3):
...........skip.........
# Initialize bootsplash subsystem.
splash_init 5
splash_update start 1
# Set the system clock (when /etc/adjtime is missing)
[ -s /etc/adjtime ] || /etc/init.d/clock start
## Arioch - swapon must be moved later, for SwSusp2/hibernate-cleanup
SWSUSP2_CLEANUP=/etc/rc.d/scripts/hibernate-cleanup.sh
if [ -x $SWSUSP2_CLEANUP ]; then
echo "Hibernate cleanup script present - will not activate swap
partitions yet"
else
# Activate swap
action "Activating swap partitions:" swapon -a -e
fi
## /Arioch
# Set the hostname
action "Setting hostname $HOSTNAME:" hostname "$HOSTNAME"
...........skip.........
if [ -x /sbin/quotaon ]; then
action "Turning on user and group quotas for local
filesystems:" /sbin/quotaon -a
fi
## Arioch: going on with SwSusp2
if [ -x $SWSUSP2_CLEANUP ]; then
# action "Removing Software Suspend images, if any." $SWSUSP2_CLEANUP
# script itself prints looog greeting
action "Hibernate: " $SWSUSP2_CLEANUP
# Ugly, but it seems we do not want user, entering into single mode
without swap???
swapon -a -e
fi
## /Arioch
# Do the following while waiting for an 'I' from the user...
{
# Cleanup everything :)
action "Cleaning up temporary files from previous boot:"
/etc/rc.d/scripts/cleanup
# Language fixes
/etc/rc.d/scripts/lang
# Now turn on swap again (in case we swap to files)
## Arioch: and in case SwSusp2/Hibernate cleanup script present. ;-D
splash_update swap 7
action "Activating swap space:" swapon -a
# Initialize the serial ports
ExecIfExecutable /etc/rc.d/rc.serial
...........skip.........
Монстрик тот еще получился, но я старался по минимуму менять сложившиеся
скрипты и процесс загрузки.
Подробная информация о списке рассылки Sisyphus