Tengo 1GB de RAM y 512MB de swap, en teoría yo no podría hibernar o suspender el sistema, ya que el uso de ram sería mayor al espacio disponible en la swap. Pero esto tiene una solución: Optimizar la suspención del sistema limpiando el cache justo antes de suspenderlo. Para lograrlo, he creado un script que se encarga de suspender el sistema lo más limpio posible:

  1. #!/bin/bash
  2.  
  3. swapoff -a
  4. swapon -a
  5. echo -n 3 > /proc/sys/vm/drop_caches;
  6. s2disk

Para esto necesitamos tener instalado s2disk. Lo que hace el script es desactivar y reactivar la swap, limpiar el caché y luego suspender el sistema en disco.
Esto se puede utilizar junto a un cron que detecte que la batería está baja (por ej. al 5%).

Probado en Archlinux