Как сбросить аптайм в линуксе без перезагрузки?

Вопрос в теме на ЛОРе: "Как сбросить uptime?". Стандартными средствами - никак. Но можно написать маленький модуль для ядра на несколько строк. Это конечно злой хак, но он работает (проверил на Fedora 12 с ядром 2.6.31.12-174.2.3.fc12.x86_64) =).

  1. $ hg clone https://uptime-reset-kmod.ivans-playground.googlecode.com/hg/ uptime-reset-kmod
  2. $ cd uptime-reset-kmod
  3. $ make -C /usr/src/linux-$( uname -r ) SUBDIRS=$( pwd ) EXTRA_CFLAGS="-DTST_ADDR=0x$( grep -Fw total_sleep_time /boot/System.map-$( uname -r ) | cut -d ' ' -f 1 )" modules
  4. $ sudo insmod ./uptime-reset.ko && sudo rmmod uptime-reset

Результат работы:

  1. [2010.02.11 09:44:52] ivan@ivan-laptop ~/projects/playground/uptime-reset-kmod
  2. $ uptime
  3. 09:45:51 up 21 min, 2 users, load average: 0.00, 0.06, 0.07
  4.  
  5. [2010.02.11 09:45:51] ivan@ivan-laptop ~/projects/playground/uptime-reset-kmod
  6. $ sudo insmod ./uptime-reset.ko && sudo rmmod uptime-reset
  7. [sudo] password for root:
  8.  
  9. [2010.02.11 09:46:08] ivan@ivan-laptop ~/projects/playground/uptime-reset-kmod
  10. $ uptime
  11. 09:46:10 up 0 min, 2 users, load average: 0.00, 0.06, 0.07

Применять, естественно, на свой страх и риск.

P.S. По идее можно обойтись вообще без модуля ядра, а в память ядра писать из пространства пользователя через /dev/mem. Но у меня что-то сходу не вышло, хотя раньше подобное делал. В общем я не стал возиться =).