Table of Contents
Website Self Hosting
IP
Dynamic DNS service if you don't have a static IP.
Hardware
Any old machine, or even better an old laptop (less power, less noise, less room).
Flash cache
Introduction
Solutions for hybriding flash drives and hard drives have been experimented to save power on laptops, but it is quite complex in the general case and there is no final-user implementation yet, and the gains are limited on an everyday use machine. However it is a lot more efficient and simple on a server, as there are a lot less interactions with users and the panel of activities is largely reduced. Hence you only have to put on flash disk a few directories and files that the system regularly write to (the cache in RAM is enough for reading), and the disk can remain spun down for hours or days if you don't start unusual applications.
You need an USB stick or SD Card of at least 2GB (4GB is advised), and an init script to mount and fetch during early boot process, and unmount and flush during late shutdown process. For instance I wrote this one for Gentoo: /etc/init.d/fcache with conf /etc/conf.d/fcache, add it to the boot runlevel (rc-update add fcache boot
).
As an example, my server (a Core2 Duo laptop) consumes 12-13W (saved 1W stopping the hard drive), makes no noise at all (no fan, no hard drive), and the hard drive remains stopped for several days, as long as I don't interact with because it is also a multimedia server (I can even log in with ssh, with export display, as root, use firefox, without waking up the drive ; but of course listening to music stored on the hard drive, installing a program, changing some system configuration, starting an unusual program, will wake up the drive).
What to cache
The main directories you need to take care of are:
/var
must be cached/tmp
must be mounted as tmpfs in ram/home
can be cached if you have enough space on the flash disk
If you cannot cache your whole home folder, you can cache a few files that are updated too often by putting them in a ~/.fcache
directory that you will cache. Then either create a symbolic link (if it works, meaning that the file is not deleted and recreated each time) or configure the program to use this new location:
~/.history
: shell history for all users including root; symlink not ok, set the new location with the $HISTFILE environment variable for zsh in .zshrc file.~/.lesshst
:less
history; symlink ok.~/.xsession-errors
: gdm file; symlink not ok, needs version >2.32.1 so that symlink works, with previous versions you have to recompile it after hard changing “.xsession-errors” to “.fcache/.xsession-errors” (in filedaemon/slave.c
for version 2.20).~/.Xauthority
: xauth file; symlink not ok:- for GDM: set
[daemon] UserAuthDir=/home/cyril/.fcache
in/etc/X11/gdm/custom.conf
- for SSHD: set
XAUTHORITY=/home/cyril/.fcache/.Xauthority
in~/.ssh/environment
, andPermitUserEnvironment yes
in/etc/ssh/sshd_config
- for SU: set
cyril
(your username) in/root/.xauth/import
, to avoid creation of/root/.xauthXXXXX
files
- application data folder of programs you commonly use (firefox, music player, …)
/etc
cannot be cached entirely, because it contains the init scripts that are used to setup fcache (/etc/init.d
), but there are some files that are necessary to cache:
/etc/resolv.conf
: symlink ok.
Configure monitors
If you run smartd
daemon, it will wakes up the drive every 30min by default to perform some checks (or with the interval specified by the -i
option of smartd
). You have to tell it to not do tests if the drive is in standby powermode. Edit /etc/smartd.conf
:
-DEVICESCAN +#DEVICESCAN +/dev/sda -d ata -n standby
Asking the temperature to the hddtemp
daemon will also wake up the drive, so you should not use it.
Also be careful to conflicts between manual configuration and different power manager utilities (like pm-utils, your desktop environment…). You may have to disable some of them if it doesn't work.
Finding the guilty files
You can use a script similar to this one to monitor what files are being used and add them to the cache (you can then grep “sda” and “dirtied”), and monitor if the drive remains spun down:
#!/bin/sh rm -f /mnt/ram/disk.log dmesg -c #sudo sysctl vm.block_dump=1 echo 1 > /proc/sys/vm/block_dump watch --interval=5 'dmesg -c | grep sda >> /mnt/ram/disk.log ; hdparm -C /dev/sda | grep "drive state" | cut -d":" -f2 >> /mnt/ram/disk.log' echo 0 > /proc/sys/vm/block_dump
You can also use strace -p <PID> -e trace=write -s 128
if you don't have enough information about some files name and location.
Configure the drive to go to standby
Configure hdparm to put the drive to standby after some time of inactivity. For instance to test with 10 minutes:
hdparm -S 120 /dev/sda
And for final configuration copy /usr/lib/pm-utils/power.d/harddrive
file to /etc/pm/power.d/
and set variable DRIVE_SPINDOWN_VALUE_BAT
to 241 for instance for 30 minutes (check option -S in hdparm's man page).
You can also configure with your power manager utility if you have one.
Optional extra configuration
You can try to tune how syslog will write to the disk to save the flash life, in /etc/syslog-ng/syslog-ng.conf
:
options { mark_freq(0); # remove --MARK-- lines issued by default every 20s flush_lines(20); flush_timeout(60000); # in ms };
Read cache
You can try to prefetch in the Linux RAM read cache all the programs and files you often read, with a script that executes programs and grep inside files when you start the computer.
You can also have a look at e4rat
that optimizes the boot process but also prefetches files used at boot, and preload
that adaptatively preloads the programs you usually use.
RAM write cache
You could also try to use the noflushd
daemon and laptop-mode-tool
to tune the RAM write cache (how long and how much before flushing to the disk), but if you lose power you may lose lots of data (that were recently written), and it may not work as expected because of the filesystem that force some writes. See http://buffalo.nas-central.org/wiki/Spin_down_the_hard_drive_when_idle.