[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